Vídeo recomendado
https://youtu.be/diWPPPhW-9E
https://youtu.be/diWPPPhW-9E
Filtro com mais de uma condição
-
- Acabou de chegar
- Mensagens: 4
- Registrado em: Qui Jul 21, 2011 11:37 pm
Filtro com mais de uma condição
Olá boa noite a todos.
Sou iniciante em excel VBA e estou com um problema.
Criei um userform em que após ser filtrado o cód do cliente ele localiza quantas ocorrências existem e retorna este valor em um textbox e que também utiliza a linha da ocorrência e retorna valores em determinado textbox. Instalei um botão de rotação para que as ocorrências possam ser mudadas e com quando forem mudadas elas retornem os valores de acordo com a sua linha.
Criei a planilha com apenas um filtro e está da forma que eu quero, porém eu necessito de que ela possa ser filtrada por três filtros (cód cliente, ano, mês) em vez de apenas um e que sejam idependentes entre si e não sei como faze-lo.
a programação que utilizei para a tela de filtragem é esta:
Public MatrizResultados As Variant
Public TotalOcorrencias As Long
Dim TotalRegistro As Integer
'Este é o botão que aciona o filtro e CMB_COD é o valor que vai ser procurado.
Private Sub BTO_FILTRAR_Click()
If Me.CMB_COD.Text = "" Then
MsgBox "Digite um código para começar a pesquisa!"
Else
Call ProcuraRegistros(Me.CMB_COD.Text)
End If
End Sub
Private Sub ProcuraRegistros(ByVal TermoPesquisado As String)
Dim Busca As Range
Dim Primeira_Ocorrencia, Resultados As String
Set Busca = Sheets(1).Cells.Find(What:=TermoPesquisado, _
After:=Range("A1"), LookIn:=xlFormulas, LookAt:=xlPart, _
SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
'Se a variável Busca não for vazia
If Not Busca Is Nothing Then
Primeira_Ocorrencia = Busca.Address
'Lista o primeiro Resultado na variável
Resultados = Busca.Row
'Esse loop pesquisa as próximas ocorrência para o termo pesquisado
Do
Set Busca = Sheets(1).Cells.FindNext(After:=Busca)
'Condição para não listar o primeiro resultado, pois já foi listado acima
If Not Busca.Address Like Primeira_Ocorrencia Then
Resultados = Resultados & ";" & Busca.Row
End If
Loop Until Busca.Address Like Primeira_Ocorrencia
MatrizResultados = Split(Resultados, ";")
'Atualiza o botão de rotação
BTO_TOTAL.Max = UBound(MatrizResultados)
'Habilita o botão de rotação
BTO_TOTAL.Enabled = True
'Atualiza o cantador de registro
ROT_TOTAL.Caption = "1 de" & UBound(MatrizResultados) + 1
CXT_TOTAL.Value = UBound(MatrizResultados) + 1
'Os campos recebem o conteúdo encontrado
CXT_DATA.Text = Sheets(1).Cells(MatrizResultados(0), 2).Value
CXT_NOME.Text = Sheets(1).Cells(MatrizResultados(0), 4).Value
CXT_MOTORISTA.Text = Sheets(1).Cells(MatrizResultados(0), 6).Value
CXT_PLACA.Text = Sheets(1).Cells(MatrizResultados(0), 7).Value
'Se não for encontrado nenhum registro
Else
'Desabilita o botão de rotação
BTO_TOTAL.Enabled = False
'Zera o cantador de registro
ROT_TOTAL.Caption = ""
'Limpa os campos do formulário
CXT_MOTORISTA.Text = ""
CXT_PLACA.Text = ""
CXT_NOME.Text = ""
CXT_DATA.Text = ""
CXT_TOTAL.Text = ""
CMB_COD.Text = ""
MsgBox "Nenhum resultado para ' " & TermoPesquisado & " ' foi encontrado."
End If
End Sub
se alguém pode me ajudar?
Sou iniciante em excel VBA e estou com um problema.
Criei um userform em que após ser filtrado o cód do cliente ele localiza quantas ocorrências existem e retorna este valor em um textbox e que também utiliza a linha da ocorrência e retorna valores em determinado textbox. Instalei um botão de rotação para que as ocorrências possam ser mudadas e com quando forem mudadas elas retornem os valores de acordo com a sua linha.
Criei a planilha com apenas um filtro e está da forma que eu quero, porém eu necessito de que ela possa ser filtrada por três filtros (cód cliente, ano, mês) em vez de apenas um e que sejam idependentes entre si e não sei como faze-lo.
a programação que utilizei para a tela de filtragem é esta:
Public MatrizResultados As Variant
Public TotalOcorrencias As Long
Dim TotalRegistro As Integer
'Este é o botão que aciona o filtro e CMB_COD é o valor que vai ser procurado.
Private Sub BTO_FILTRAR_Click()
If Me.CMB_COD.Text = "" Then
MsgBox "Digite um código para começar a pesquisa!"
Else
Call ProcuraRegistros(Me.CMB_COD.Text)
End If
End Sub
Private Sub ProcuraRegistros(ByVal TermoPesquisado As String)
Dim Busca As Range
Dim Primeira_Ocorrencia, Resultados As String
Set Busca = Sheets(1).Cells.Find(What:=TermoPesquisado, _
After:=Range("A1"), LookIn:=xlFormulas, LookAt:=xlPart, _
SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
'Se a variável Busca não for vazia
If Not Busca Is Nothing Then
Primeira_Ocorrencia = Busca.Address
'Lista o primeiro Resultado na variável
Resultados = Busca.Row
'Esse loop pesquisa as próximas ocorrência para o termo pesquisado
Do
Set Busca = Sheets(1).Cells.FindNext(After:=Busca)
'Condição para não listar o primeiro resultado, pois já foi listado acima
If Not Busca.Address Like Primeira_Ocorrencia Then
Resultados = Resultados & ";" & Busca.Row
End If
Loop Until Busca.Address Like Primeira_Ocorrencia
MatrizResultados = Split(Resultados, ";")
'Atualiza o botão de rotação
BTO_TOTAL.Max = UBound(MatrizResultados)
'Habilita o botão de rotação
BTO_TOTAL.Enabled = True
'Atualiza o cantador de registro
ROT_TOTAL.Caption = "1 de" & UBound(MatrizResultados) + 1
CXT_TOTAL.Value = UBound(MatrizResultados) + 1
'Os campos recebem o conteúdo encontrado
CXT_DATA.Text = Sheets(1).Cells(MatrizResultados(0), 2).Value
CXT_NOME.Text = Sheets(1).Cells(MatrizResultados(0), 4).Value
CXT_MOTORISTA.Text = Sheets(1).Cells(MatrizResultados(0), 6).Value
CXT_PLACA.Text = Sheets(1).Cells(MatrizResultados(0), 7).Value
'Se não for encontrado nenhum registro
Else
'Desabilita o botão de rotação
BTO_TOTAL.Enabled = False
'Zera o cantador de registro
ROT_TOTAL.Caption = ""
'Limpa os campos do formulário
CXT_MOTORISTA.Text = ""
CXT_PLACA.Text = ""
CXT_NOME.Text = ""
CXT_DATA.Text = ""
CXT_TOTAL.Text = ""
CMB_COD.Text = ""
MsgBox "Nenhum resultado para ' " & TermoPesquisado & " ' foi encontrado."
End If
End Sub
se alguém pode me ajudar?
- Mauro Coutinho
- Jedi
- Mensagens: 1561
- Registrado em: Sáb Mar 13, 2010 8:10 pm
- Localização: São José dos Pinhais - Pr
-
- Acabou de chegar
- Mensagens: 4
- Registrado em: Qui Jul 21, 2011 11:37 pm
Re: Filtro com mais de uma condição
Estou enviando a planilha.
Está funcionando do jeito que eu quero porém eu só preciso que funcione aqueles outros Combobox de Mês e Ano juntamente com o cód do cliente e que eles sejam independente entre si, ou seja, que eu possa filtrar usando todos os três como também apenas um deles.
Obrigado.
Está funcionando do jeito que eu quero porém eu só preciso que funcione aqueles outros Combobox de Mês e Ano juntamente com o cód do cliente e que eles sejam independente entre si, ou seja, que eu possa filtrar usando todos os três como também apenas um deles.
Obrigado.
- Mauro Coutinho
- Jedi
- Mensagens: 1561
- Registrado em: Sáb Mar 13, 2010 8:10 pm
- Localização: São José dos Pinhais - Pr
-
- Acabou de chegar
- Mensagens: 4
- Registrado em: Qui Jul 21, 2011 11:37 pm
Re: Filtro com mais de uma condição
A dúvida é a seguinte: O combobox de código de cliente já está ativado, no entanto eu gostaria de fazer o filtro também pelos combobox de ANO e MÊS, simultâneamente e independentemente.
Baixem a planilha e perceberam a dúvida, desde já obrigado!