Notifications
Clear all

Filtrar planilha pelo valor da célula clicada

8 Posts
2 Usuários
0 Reactions
2,509 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Bom dia pessoal,

Estou precisando de um código de macro, que faça o seguinte:

Tenho duas sheets, sendo que a primeira apresenta as áreas de uma empresa, e a segunda o detalhamento de todas as áreas, com o pessoal que trabalha em cada uma delas. Preciso que, ao dar um duplo clique em uma célula da primeira planilha, a segunda seja filtrada pelo valor da célula que foi clicada. Por exemplo, se ele deu um duplo clique em "Suprimentos" (conforme planilha anexa), a segunda planilha seja filtrada por esse valor, exibindo apenas os funcionários da área de suprimentos.
Acredito que não seja complicado, porém não tenho tanta facilidade com os códigos de VB, principalmente para declarar variáveis, que sempre faço confusão.

Muito obrigado pela ajuda.

 
Postado : 03/04/2012 7:44 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa tarde!!

Só lembrando, que os arquivos posto em anexo devem ser compactados, tente lembrar na próxima.

Att

 
Postado : 03/04/2012 11:46 am
(@arthurdiegoo)
Posts: 99
Estimable Member
 

Caríssimo,

Crie um Módulo Auxiliar em seu arquivo, e cole dentro do mesmo o seguinte:

Sub AutoFiltroSuprimentos()
Application.Worksheets(2).Select
       Range("A1").AutoFilter Field:=2, Criteria1:="Suprimentos", Operator:=xlOr, _
           Criteria2:="Suprimentos"
End Sub

O serviço está um pouco amarrado aqui, ficou difícil fazer um exemplo, mas basta modificar este mesmo código ( pode colocar todos no mesmo módulo )

Basta mudar os campos onde está Suprimentos, para os outros filtros desejados, Nomeie cada Sub com um nome e crie os botões, ou associe as células cada um com seu respectivo desejo.

Espero ter ajudado.

Att.

 
Postado : 03/04/2012 1:46 pm
(@arthurdiegoo)
Posts: 99
Estimable Member
 

Perdão pelo duplo post, mas esqueci.

Lembre de criar este sub também:

   Sub ApagarFiltro()
       Range("A1").AutoFilter
   End Sub

E coloque-o de forma a ser executado antes do sub acima, pois retornará erro se a sheet já estiver filtrada.

Att.

 
Postado : 03/04/2012 1:50 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Diego, você citou "ao dar um duplo clique em uma célula da primeira planilha".

Então aproveitando a rotina do Arthur e adaptando a questão do Duplo Clique, proceda da seguinte forma:
Na Aba "Lista 1" clique com o Botão direito e escolha "Exibir Código", na tela que abrir cole a rotina abaixo ;

Option Explicit

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Not Intersect(Target, Range("A2:A8")) Is Nothing Then
        
        If Target.Value <> "" Then
            
            On Error Resume Next
            
            rValor = Target.Value
            Cancel = Err.Number = 0
            
            Call AutoFiltroSuprimentos
            
        End If
    End If

End Sub

Depois em um Módulo, coloque a rotina adaptada do Arthur:

Option Explicit

Public rValor

Sub AutoFiltroSuprimentos()

    Application.Worksheets(2).Select
    
        Range("A1").AutoFilter Field:=2, Criteria1:=rValor, Operator:=xlOr, _
           Criteria2:=rValor, VisibleDropDown:=False
           
        Range("B1").AutoFilter Field:=1, VisibleDropDown:=False
        
End Sub

Ao dar um Duplo Clique em uma das Celulas definidas no Intervalo : Target, Range("A2:A8"), se a mesma contiver dado, o mesmo é passado para a Variavel rValor, e depois é chamada a rotina "AutoFiltroSuprimentos", que utiliza esta Variavel para a filtragem.
Se no intervalo clicado a celula estiver em branco a rotina não é executada, tambem se der duplo cleique em qq outra celula fora do intervalo definido , tambem não é executada a rotina, e sempre que uma celula estiver em Branco a mesma é habilitada para edição.

[]s

 
Postado : 03/04/2012 7:34 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Bom dia!!

Segue um modelo, como exemplo.

Att

 
Postado : 04/04/2012 4:57 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Muito obrigado pessoal!! Com a ajuda de todos deu certinho!!
Valeu!!!

 
Postado : 04/04/2012 6:08 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa noite!!

Obrigado por retornar, precisando é só falar!! :D

Att

 
Postado : 04/04/2012 6:42 pm