Pessoal, bom dia!
Para realizar uma pesquisa no listview, eu utilizo um combox (selecionar a coluna dos dados que estou a pesquisar) e um textbox (para especificar o dado que desejo encontrar/). A pesquisa acontece perfeitamente. Eu utilizo os dados descritos abaixo.
A ajuda de vcs se faz necessária, pois não consigo inserir um 2° critério de pesquisa. Exemplo:
critério 1: Pesquisar por determinado centro de custo (diversão)
critério 2: Pesquisar pela situação das programações (atrasada/em dia)
Utilizando o mesmo codigo do critério 1, no critério 2, a pesquisa acontece, mas um critério desconsidera o outro, exemplo:
Se primeiramente eu pesquisar pelo centro de custo diversão, ele listará apenas as programações referentes a diversão, mas se no critério 2 eu pesquisar pelas programações atrasadas, ele desconsiderará a primeira pesquisa e listará todas as programações que estiverem atrasadas, independente do centro de custo que elas fizerem parte.
A pergunta é: o que devo fazer para manter a pesquisa do critério 1 e fazer uma pesquisa no critério 2 de acordo com os dados carregados da pesquisa 1?
Private Sub TextBoxFiltro_Change()
If TextBox23.Text = "" Then
End If
If TextBoxFiltro = "" Then
PreencherCabeçalhoLinhas
formato_islista
Exit Sub
If Me.ComboBoxCampos.ListIndex = -1 Then
Me.TextBoxFiltro = ""
Exit Sub
End If
Dim strObjetoBuscar As String
Dim lngResultado As Long
'Dim lngColumna As Long, lngFila As Long
Dim a As Integer
Dim coluna
Dim li
End If
coluna = Me.ComboBoxCampos.ListIndex + 1
lslista.ListItems.Clear
strObjetoBuscar = TextBoxFiltro.Value
If strObjetoBuscar = "" Then GoTo 99
strObjetoBuscar = LCase(strObjetoBuscar)
For a = 2 To 10000
lngResultado = InStr(1, Plan41.Cells(a, coluna), strObjetoBuscar, vbTextCompare)
If lngResultado > 0 Then
Set li = lslista.ListItems.Add(Text:=Format(Plan41.Range("A" & a).Value, "000"))
li.ListSubItems.Add Text:=Plan41.Range("B" & a).Value
li.ListSubItems.Add Text:=Plan41.Range("C" & a).Value
li.ListSubItems.Add Text:=Plan41.Range("D" & a).Value
li.ListSubItems.Add Text:=Plan41.Range("E" & a).Value
li.ListSubItems.Add Text:=Format(Plan41.Range("F" & a).Value, " R$ #,##0.00")
li.ListSubItems.Add Text:=Plan41.Range("g" & a).Value
li.ListSubItems.Add Text:=Plan41.Range("h" & a).Value
li.ListSubItems.Add Text:=Plan41.Range("i" & a).Value
li.ListSubItems.Add Text:=Plan41.Range("j" & a).Value
li.ListSubItems.Add Text:=Plan41.Range("k" & a).Value
li.ListSubItems.Add Text:=Plan41.Range("l" & a).Value
li.ListSubItems.Add Text:=Plan41.Range("m" & a).Value
li.ListSubItems.Add Text:=Plan41.Range("n" & a).Value
End If
Next a
99:
Me.Label10.Caption = "Total de Programações: " & Format(Me.lslista.ListItems.Count, "000")
End Sub
Lorenzon,
Boa Tarde!
Assim, sem ter sua planilha, fica muito difícil ajudar!
Vendo apenas seu código, o que posso sugerir é que o mesmo deve ter um IF para identificar se o que está sendo pesquisado é apenas um critério ou dois.Por exemplo:
Supondo que a caixa de texto do primeiro critério se chama TextBox1 e qua a caixa de texto do segundo critério se chama TextBox2:
IF TextBox1.Text <> "" And TextBox2 = "" Then 'Aqui entram os códigos que vão listar todas as linhas que atendem ao critério 1 ElseIF TextBox1.Text = "" And TextBox2.Text <> "" Then 'Aqui entram os códigos que vão listar todas as linhas que atendem ao critério 2 ElseIF TextBox1.Text <> "" And TextBox2.Text <> "" Then 'Aqui entram os código que vão listar todas as linhas que atendem ao critério 1 e ao critério 2 Else 'quando TextBox1.Text e TextBox2.Text estiverem em branco Exit Sub End If
Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)
Atenciosamente
Wagner Morel
Wagner,
A sua ideia é bem práticaa, mas eu ja tinha tentado utilizá-la.
Eu já tinha tentado utilizá-lo. Criei um botão com a caption (pesquisar) e inserir o código abaixo, mas ambos os critérios forem <> de "", a pesquisa ficará vazia.
Vide o código:
Private Sub CommandButton29_Click()
If TextBoxFiltro.Text <> "" And TextBoxFiltro2 = "" Then
'Aqui entram os códigos que vão listar todas as linhas que atendem ao critério 1
Call filtrarcritério1
ElseIf TextBoxFiltro.Text = "" And TextBoxFiltro2.Text <> "" Then
'Aqui entram os códigos que vão listar todas as linhas que atendem ao critério 2
Call filtrarcritério2
ElseIf TextBoxFiltro.Text <> "" And TextBoxFiltro2.Text <> "" Then
'Aqui entram os código que vão listar todas as linhas que atendem ao critério 1 e ao critério 2
Call filtrarcritério1
Call filtrarcritério2
Else 'quando TextBox1.Text e TextBox2.Text estiverem em branco
Exit Sub
End If
End Sub
...Melhor dizendo, mesmo que se ambos os critérios forem <> "" e, consequentemente eu chamar os códigos do critério 1 e 2, uma pesquisa continua eliminando a outra!
Wagner,
Ao fazer uma pesquisa, em um critério, a listview apaga tds os dados carregados e apresenta os dados pertinentes a pesquisa que eu realizei, logo, se eu fizer uma pesquisa no critério 2, ela apagará os dados da pesquisa 1 e apresentará os dados da pesquisa 2.
Eu não consegui postar a planilha, pq o limite é de 100 k.
Algo deve ser feito com o código: lslista.ListItems.Clear
Lorenzon, ajuste seu modelo somente com os dados necessários, deixando o mesmo com um tamanho compativel para que possa anexar, ou seja o que interessa que é somente a questão da filtragem.
Aproveito para dizer mais uma vez que procure manter o foco somente em uma postagem, evite abrir vários tópicos sobre o mesmo assunto :
Pesquisar por critério e obter vários resultados.
viewtopic.php?f=20&t=8942&p=47406#p47406
Pesquisar na Listview
viewtopic.php?f=23&t=8999&p=47704#p47704
VÁRIOS FILTROS NA LISTVIEW
viewtopic.php?f=10&t=11228&p=59021#p59021
FILTRAR NA LISTVIEW
viewtopic.php?f=10&t=9941&p=52379#p52379
Ajuda filtro listview [Resolvido]
viewtopic.php?f=23&t=9437
Se não obteve a resposta a algum post ou a mesma não foi satisfatória, continue sempre no mesmo, abrindo vários acaba-se se perdendo no meio de tantos tópicos repetidos.
[]s
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel
Lorenzon, baixe o modelo que está no tópico abaixo, foi adaptado na epoca para o usuario Selmo, acredito que atenda a sua duvida.
Temos nele alguns criterios de pesquisa atraves deCombobox.
Form com filtro para relatório
viewtopic.php?f=23&t=7741&start=10
[]s
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel
Lorenzon,
C reio que o código que o Mauro sugeriu deve atender a sua necessidade.
Com relação a minha sugestão, gostaria apenas de esclarecer que da forma como você estruturou seu código (chamando as rotinas filtrarcritério1 e filtrarcritério2) é óbvio que o código existente em filtrarcritério2 vai substituir os filtros aplicados na primeira filtragem (filtrarcritério1).
O que eu quis dizer com "'Aqui entram os código que vão listar todas as linhas que atendem ao critério 1 e ao critério 2" é que você deveria desenvolver código que atenda à pesquisa SIMULTÂNEA dos dois critérios ao mesmo tempo e não um e depois o outro. Supondo que você quisesse trazer todos os dados cujo critério 1 seja a Descrição Centro de Custo = Diversão e que o Critério 2 seja a situação das Programações = atrasada/Em dia e que a coluna onde está o Centro de Custo é a coluna C e a coluna onde está a Situação das Programações é a coluna G. Assim, o código deveria começar assim:
For a = 2 to 1000 IF Range("C" & a).Value = TextBoxFiltro.Text And Range ("G" & a).Value = TextBoxFiltro2.Text Then 'Aqui carrega os ítens que atendem aos dois critérios acima para o ListView End If Next
Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)
Atenciosamente
Wagner Morel
Mauro,
Utilizarei o seu modelo, mas, por favor, diga-me como posso contar, automaticamente, os valores das programações que forem apresentadas na pesquisa.
Grato.
Mauro,
Utilizarei o seu modelo, mas, por favor, diga-me como posso contar, automaticamente, os valores das programações que forem apresentadas na pesquisa.
Grato.
Lorenzon, você esta se referindo a contagem dos itens filtrados ?
Se for isto, no modelo que indiquei, nas rotinas temos no inicio a instrução:
Tmp = frmSaida.ListView1.ListItems.Count - ela é responsável pela contagem de qde de linhas no Listview, então se é esta contagem final que quer é só fazer o seguinte:
Adicione um Label em seu formulário, supondo que seja Label1, ao final das rotinas que efetuam a filtragem apos o ultimo Next e antes de End Sub, adicione a linha :
Label1= frmSaida.ListView1.ListItems.Count
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel
Mauro,
ok, mas me refiro a soma dos valores das programações. Ex: Pesquisei por diversão, dai quero que, automaticamente, apareça em uma label, o total gasto em diversão.
Mauro,
ok, mas me refiro a soma dos valores das programações. Ex: Pesquisei por diversão, dai quero que, automaticamente, apareça em uma label, o total gasto em diversão.
Eu não entendi o que quer dizer "a soma dos valores das programações" ?
No post anterior você disse :
posso contar, automaticamente, os valores das programações que forem apresentadas na pesquisa
Então se a intenção é SOMAR alguma das colunas do Listview, isto já seria um outro assunto, se este seu Tópico foi Resolvido referente ao assunto inicial, por favor abra um novo tópico para esta questão.
Só adiantando, quanto a SOMAR, antes de abri o Tópico faça a pesquisa no Forum que é um assunto que já foi tratado aqui :
Somar coluna em um ListView e Mostra o resultado em um T
viewtopic.php?f=10&t=3166
listview [Resolvido]
viewtopic.php?f=23&t=2752
[]s
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel
Mauro,
O exemplo citado por você, não sei por qual motivo, só apresenta o valor se o número de linhas da pesquisa for = 1, do contrário da erro.
Mauro,
O exemplo citado por você, não sei por qual motivo, só apresenta o valor se o número de linhas da pesquisa for = 1, do contrário da erro.
Lorenzon, minha bola de cristal está com defeito, então por favor, me diga de qual exemplo está se referindo, indiquei varios links e todos teem modelos.
][s
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel
Mauro,
Desculpa-me, mas o exemplo citado por você me serviu...
O erro acontecia pelo fato de ter algumas linhas em branco no banco de dados.
Mauro,
Utilizando o código abaixo, eu pesquiso na listview.
Private Sub socontarazao()
Dim Tmp As Long
Dim i As Long
Dim scontarazao
Tmp = UserForm9.lslista.ListItems.Count
scontarazao = ComboBoxProdutos.Text
Tmp = UserForm9.lslista.ListItems.Count
For i = 1 To Tmp
With lslista
If .ListItems(i).SubItems(3) = scontarazao Then
Tmp = Tmp '- 1
If i = Tmp Then Exit For
Tmp = UserForm9.lslista.ListItems.Count
Else
UserForm9.lslista.ListItems.Remove i
i = i - 1
Tmp = Tmp - 1
If i = Tmp Then Exit For
Tmp = UserForm9.lslista.ListItems.Count
End If
End With
Next
Me.Label10.Caption = "Total de Programações: " & Format(UserForm9.lslista.ListItems.Count)
End Sub
Nesta mesma listview, eu utilizo uma pesquisa entre datas, vide o código abaixo.
Porém, se eu realizar esta pesquisa, a pesquisa anterior é desconsiderada. Como posso fazer para considerar as duas pesquisas, tanto para conta razão, quanto para as datas?
Sub RelatórioForm()
Application.EnableEvents = False
Dim lastRow As Long
Dim lastResultRow As Long
Dim X As Long
' Verifica qual a ultima célula preenchida
lastRow = Plan41.Cells(Rows.Count, 1).End(xlUp).Row
lastResultRow = 2 'linha resultado
Me.lslista.ListItems.Clear
' Ciclo em todas as linhas
For X = 2 To lastRow '1 Linha dados pequisa
' verifica se o valor é igual ao da pesquisa
If CDate(Plan41.Cells(X, 8).Value) >= CDate(txtDataInicial.Value) And CDate(Plan41.Cells(X, 8)) <= CDate(txtDataFinal) Then
' Copia os valores
lslista.ListItems.Add 1, , Plan41.Cells(X, 1).Value
lslista.ListItems(1).ListSubItems.Add 1, , Plan41.Cells(X, 2).Value
lslista.ListItems(1).ListSubItems.Add 2, , Plan41.Cells(X, 3).Value
lslista.ListItems(1).ListSubItems.Add 3, , Format(Plan41.Cells(X, 4).Value, "#,##0.00")
lslista.ListItems(1).ListSubItems.Add 4, , Plan41.Cells(X, 5).Value
'Lslista.ListItems(1).ListSubItems.Add 5, , Plan41.Cells(x, 6).Value
lslista.ListItems(1).ListSubItems.Add 5, , Plan41.Cells(X, 6).Value
lslista.ListItems(1).ListSubItems.Add 6, , Plan41.Cells(X, 7).Value
lslista.ListItems(1).ListSubItems.Add 7, , Plan41.Cells(X, 8).Value
lslista.ListItems(1).ListSubItems.Add 8, , Plan41.Cells(X, 9).Value
lslista.ListItems(1).ListSubItems.Add 9, , Plan41.Cells(X, 10).Value
lslista.ListItems(1).ListSubItems.Add 10, , Plan41.Cells(X, 11).Value
lastResultRow = lastResultRow + 1
End If
Next
Application.EnableEvents = True
End Sub