Planilha com Filtro Automático

Neste passo-a-passo vamos ver como criar uma planilha com filtro automático de dados, sem a necessidade de clicar para abrir o filtro.
Esta planilha terá campos do tipo Caixa de Texto utilizando VBA para executar o filtro para cada campo. O filtro será aplicado a cada letra que você digitar, ocasionando uma planilha com um filtro extremamente rápida e perfeita para planilhas de preços por exemplo.

Vamos lá:1. Faça o download da lista de dados aqui.

Lista de dados
Lista de dados

2. Note que o filtro já está aplicado no cabeçalho, caso a sua planilha não tivesse, você deve aplicar o filtro para continuar.

3.Clique na guia Desenvolvedor e no botão Modo de Design, o que colocará o Excel no modo de desenvolvimento para poder colocar componentes de formulário na planilha.

3. Clique na guia Desenvolvedor, no botão Inserir e selecione Caixa de Texto.

Caixa de texto

4.Coloque as caixas de texto acima dos nomes de cada uma das colunas conforme a figura.

Inserção das caixas de texto

5.Clique sobre a caixa de texto da coluna código e nomeie-a como Codigo na caixa de nome, repita a operação para as caixas de texto seguintes, como Loja, Produto, Estoque e Preco.

Nomear caixas de texto

6.Clique na guia Desenvolvedor e desmarque o botão Modo de Design.

7.Ainda na guia Desenvolvedor clique no botão Visual Basic.

8.Clique no botão Project Explorer, selecione o projeto VBAProject (Lista de dados.xlsm), clique em Plan1 neste projeto conforme na figura.

Projeto

9.No lado direito clique na guia  de código fonte digite o código abaixo:

Private Sub Codigo_Change()
  If Codigo.Text  "" Then
    Selection.AutoFilter Field:=1, Criteria1:="=" & Codigo.Text
  Else
    Selection.AutoFilter Field:=1
  End If
End Sub

Private Sub Estoque_Change()
  If Estoque.Text  "" Then
    Selection.AutoFilter Field:=4, Criteria1:="=" & Estoque.Text
  Else
    Selection.AutoFilter Field:=4
  End If
End Sub

Private Sub Loja_Change()
    Selection.AutoFilter Field:=2, Criteria1:=CStr("*" + Loja.Text) + "*"
End Sub

Private Sub Preco_Change()
  If Preco.Text  "" Then
    Selection.AutoFilter Field:=5, Criteria1:=">=" & Replace(Preco.Text, ",", "."), Criteria2:="<=" & Replace(Preco.Text + 0.0099999, ",", ".")
  Else
    Selection.AutoFilter Field:=5
  End If
End Sub

Private Sub Produto_Change()
    Selection.AutoFilter Field:=3, Criteria1:=CStr("*" + Produto.Text) + "*"
End Sub

Private Sub Comissao_Change()
  If Comissao.Text  "" Then
    Selection.AutoFilter Field:=6, Criteria1:=">=" & Replace(Comissao.Text / 100, ",", "."), Criteria2:="<=" & Replace(Comissao.Text / 100 + 0.0099999, ",", ".")
  Else
    Selection.AutoFilter Field:=6
  End If
End Sub


Private Sub txtAte_Change()
  If txtData.Text  "" And IsDate(txtData.Text) And IsDate(txtAte.Text) Then
    Selection.AutoFilter Field:=7, Criteria1:=">=" & Format(txtData.Text, "mm/dd/yyyy"), Operator:=xlAnd, Criteria2:="<=" & Format(txtAte.Text, "mm/dd/yyyy")
  Else
    Selection.AutoFilter Field:=7
  End If
End Sub

Private Sub txtData_Change()
  If txtData.Text  "" And IsDate(txtData.Text) And IsDate(txtAte.Text) Then
    Selection.AutoFilter Field:=7, Criteria1:=">=" & Format(txtData.Text, "mm/dd/yyyy"), Operator:=xlAnd, Criteria2:="<=" & Format(txtAte.Text, "mm/dd/yyyy")
  Else
    Selection.AutoFilter Field:=7
  End If
End Sub

Pronto! Agora sempre que você digitar os dados nos campos TextBox você terá os filtros sendo aplicados diretamente nestas colunas.

Baixe a planilha

Abraço

Marcos Rieper

Avalie este post
Sair da versão mobile