Notifications
Clear all

VBA de Filtragem - Utilizando Caixa de Combinação

25 Posts
3 Usuários
0 Reactions
3,845 Visualizações
(@gleiner)
Posts: 0
New Member
Topic starter
 

Ola a Todos!
Sou novo no fórum no quesito participação, já algum tempo venho pesquisando algumas informações simples para algumas das minhas planilhas.
Atualmente estou me aventurando nas macros e VBA, em uma nova planilha.

O problema é o seguinte:

Quero utilizar uma caixa de combinação (ActiveX) para ativar a filtragem de uma determinada coluna.
No inicio ate pensei em usar macros, mas não estava dando certo.

Private Sub ComboBox1_Change()

If ComboBox1.Value = "Novo" Then

ActiveSheet.Range("$A$4:$BD$65536").AutoFilter Field:=17, Criteria1:="Novo"

ElseIf ComboBox1.Value = "Orçando" Then

ActiveSheet.Range("$A$4:$BD$65536").AutoFilter Field:=17, Criteria1:="Orçando"

ElseIf ComboBox1.Value = "Aguardando" Then

ActiveSheet.Range("$A$4:$BD$65536").AutoFilter Field:=17, Criteria1:="Aguardando"

ElseIf ComboBox1.Value = "Declinado" Then

ActiveSheet.Range("$A$4:$BD$65536").AutoFilter Field:=17, Criteria1:="Declinado"

ElseIf ComboBox1.Value = "Aprovado" Then

ActiveSheet.Range("$A$4:$BD$65536").AutoFilter Field:=17, Criteria1:="Aprovado"

ElseIf ComboBox1.Value = "Reprovado" Then

ActiveSheet.Range("$A$4:$BD$65536").AutoFilter Field:=17, Criteria1:="Reprovado"

Else
ActiveSheet.Range("$A$4:$BD$65536").AutoFilter Field:=17

End If
End Sub

Infelizmente não para de da erro.
Se acaso for envio a planilha.

 
Postado : 11/11/2014 2:12 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Com um modelo ficaria mais fácil, mas veja se a rotina a baixo ajuda:

Private Sub ComboBox1_Change()

    sFiltra = ComboBox1.Value
  
    If sFiltra <> "" Then
        'Aplica o Filtro
        ActiveSheet.Range("$A$4:$BD$65536").AutoFilter Field:=17, Criteria1:=sFiltra
    
    Else
        
        On Error Resume Next
        'Limpa o Filtro
        ActiveSheet.ShowAllData

    End If

End Sub

Lembrando que estou supondo que já tem os Itens adicionado no ComboBox1, se não tiver você pode forçar na abertura do arquivo com a rotina abaixo:

Private Sub Workbook_Open()

    With ActiveSheet.ComboBox1
        .AddItem "Novo"
        .AddItem "Orçando"
        .AddItem "Aguardando"
        .AddItem "Declinado"
        .AddItem "Aprovado"
        .AddItem "Reprovado"
    End With
    
End Sub

Faça os testes e se não for isto anexe um modelo reduzido e compactado.

[]s

 
Postado : 11/11/2014 4:05 pm
(@gleiner)
Posts: 0
New Member
Topic starter
 

Prezado Mauro,
Agradeço vossa colaboração, contudo, ainda permanece o erro.
A lista já estava inclusa nas configurações da caixa de combinação.
Neste caso vou incluir a planilha em anexo para melhor visualizar.
Obs.: Baseado neste filtro, irei desenvolver para as demais colunas caso precise futuramente.

 
Postado : 12/11/2014 5:45 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Eu não sei se eu entendi, tente assim.

Option Explicit
Private Sub ComboBox1_Change()
Application.ScreenUpdating = 0
    With Plan1
        .AutoFilterMode = False
        With .Range("A4:Q4")
            .AutoFilter
            If Me.ComboBox1.Value <> vbNullString Then .AutoFilter Field:=17, Criteria1:=Me.ComboBox1.Value
        End With
    End With
Application.ScreenUpdating = 1
End Sub

Att

 
Postado : 12/11/2014 7:07 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Caso você tenha a intenção de exibir todos os dados (limpar o filtro), usando Todos, então:

Option Explicit
Private Sub ComboBox1_Change()
Application.ScreenUpdating = 0
    If Me.ComboBox1.Value = "Todos" Then
     ShowAllData
     Else
        With Plan1
            .AutoFilterMode = False
            With .Range("A4:Q4")
                .AutoFilter
                If Me.ComboBox1.Value <> "" Then .AutoFilter Field:=17, Criteria1:=Me.ComboBox1.Value
            End With
        End With
    End If
Application.ScreenUpdating = 1
End Sub

Att

 
Postado : 12/11/2014 7:25 am
(@gleiner)
Posts: 0
New Member
Topic starter
 

Alexandre,
Foi quase!
A primeira parte que você postou esta funcionando sem problemas.
Nesse caso a planilha esta filtrando em todos os dados informados na caixa.
Só esta faltando a parte de limpar o filtro, neste caso usando "Todos".

 
Postado : 12/11/2014 8:13 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Leia o posto acima do seu!!

Att

 
Postado : 12/11/2014 8:15 am
(@gleiner)
Posts: 0
New Member
Topic starter
 

Bom dia!!

Leia o posto acima do seu!!

Att

Só tem um problema, quando eu colo junto com a outra fica dando erro.
Ele diz que esta repetido o nome "ComboBox1_Change"

E se eu apagar a primeira e deixa a segunda ele da outro erro
Showalldata do objeto worksheet falhou

 
Postado : 12/11/2014 8:24 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

quando eu colo junto com a outra fica dando erro.

Eu não entendi!!

Teste o meu arquivo e diga se está ocorrendo o mesmo erro.

Att

 
Postado : 12/11/2014 8:31 am
(@gleiner)
Posts: 0
New Member
Topic starter
 

Bom dia!!

quando eu colo junto com a outra fica dando erro.

Eu não entendi!!

Teste o meu arquivo e diga se está ocorrendo o mesmo erro.

Att

Testei e continua dando erro, quando seleciono "Todos" na caixa

Erro em tempo de execução '1004':
O metodo "ShowAllData" do objeto '_Worksheet" Falhou

 
Postado : 12/11/2014 8:37 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Eu não estou tendo problemas!!
:?

O código está dentro do módulo de planilha "Todos"?

Att

 
Postado : 12/11/2014 8:39 am
(@gleiner)
Posts: 0
New Member
Topic starter
 

Bom dia!!

Eu não estou tendo problemas!!
:?

O código está dentro do módulo de planilha "Todos"?

Att

Eu testei a tua planilha que você enviou agora pouco.
E o erro permanece.
Talvez a melhor solução seja deixar a caixa em branco, dessa forma ele zera o filtro, como se fosse usar a seleção "Todos"
O que acha?

 
Postado : 12/11/2014 8:46 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Gleiner, o erro acontece devido a você ter linkado o preenchimento do Combo com os dados na coluna "S", então tirei o linkcell e ajustei para carregar o Combo ao abrir o arquivo, e tambem ajustei para a palavra "Todos" ou se Limpar o combo, veja se é isto.
Outra coisa, se os dados a serem filtrados vão de A até a Coluna R(Status) em sua rotina você está filtrando até a coluna "BD", então alterei tambem na rotina:
$A$4:$BD$65536 para $A$4:$R$65536

Filtrar por Combobox

[]s

 
Postado : 12/11/2014 1:49 pm
(@gleiner)
Posts: 0
New Member
Topic starter
 

Mauro e Alexandre,
Agradeço muitíssimo a colaboração dos dois em resolver a minha necessidade.
A planilha esta um pouco pesada (6mb), por isso esta travando um pouco, mas funciona.

Perguntas finais
- Esse filtro pode ser estendido a qualquer valor informado entre as colunas "A" e "R", caso eu inclua na listagem?
- Seria possível (pratico) substituir a caixa de combinação por uma caixa de texto, pesquisando e filtrando qualquer termo na planilha?
- É possível implementar um alerta ao abrir a planilha referente a coluna "O" (informar quando o prazo para envio estiver próximo)?

Novamente agradeço todos.

 
Postado : 13/11/2014 7:32 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Perguntas finais
- Esse filtro pode ser estendido a qualquer valor informado entre as colunas "A" e "R", caso eu inclua na listagem?

Eu não entendi muito bem, mas eu creio que sim!

- Seria possível (pratico) substituir a caixa de combinação por uma caixa de texto, pesquisando e filtrando qualquer termo na planilha?

Sim, já tenho eu mesmo postado (além dos colegas do fórum), soluções para tal, use a pesquisa.

- É possível implementar um alerta ao abrir a planilha referente a coluna "O" (informar quando o prazo para envio estiver próximo)?

Sim, use a pesquisa.

Caso não conseguir adaptar, volte aqui no seu post, para que o pessoal possa ajuda-lo!
Att

 
Postado : 13/11/2014 7:37 am
Página 1 / 2