Notifications
Clear all

Pesquisa listindex

20 Posts
3 Usuários
0 Reactions
3,112 Visualizações
Lorenzon
(@lorenzon)
Posts: 355
Reputable Member
Topic starter
 

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

 
Postado : 21/04/2014 8:16 am
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

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

 
Postado : 21/04/2014 10:11 am
Lorenzon
(@lorenzon)
Posts: 355
Reputable Member
Topic starter
 

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

 
Postado : 21/04/2014 10:51 am
Lorenzon
(@lorenzon)
Posts: 355
Reputable Member
Topic starter
 

...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

 
Postado : 21/04/2014 11:03 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

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

 
Postado : 21/04/2014 11:34 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

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

 
Postado : 21/04/2014 12:06 pm
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

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

 
Postado : 21/04/2014 12:29 pm
Lorenzon
(@lorenzon)
Posts: 355
Reputable Member
Topic starter
 

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.

 
Postado : 21/04/2014 1:43 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

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

 
Postado : 21/04/2014 2:28 pm
Lorenzon
(@lorenzon)
Posts: 355
Reputable Member
Topic starter
 

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.

 
Postado : 21/04/2014 3:37 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

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

 
Postado : 21/04/2014 6:46 pm
Lorenzon
(@lorenzon)
Posts: 355
Reputable Member
Topic starter
 

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.

 
Postado : 22/04/2014 11:43 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

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

 
Postado : 22/04/2014 4:18 pm
Lorenzon
(@lorenzon)
Posts: 355
Reputable Member
Topic starter
 

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.

 
Postado : 24/04/2014 7:02 am
Lorenzon
(@lorenzon)
Posts: 355
Reputable Member
Topic starter
 

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

 
Postado : 24/04/2014 8:20 am
Página 1 / 2