Notifications
Clear all

Pesquisa listindex

20 Posts
3 Usuários
0 Reactions
3,113 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
Lorenzon
(@lorenzon)
Posts: 355
Reputable Member
Topic starter
 

Pessoal,

Preciso de ajuda.

 
Postado : 25/04/2014 6:00 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Lorenzon, pelo que entendi, a logica que pretende seria :

1 - Carrega o Listview com todos os Dados;

2 - Pesquisa (Filtragens) :
2.1 - Realizar a Pesquisa (Filtro) nos dados contidos neste Litview pelo criterio definido em scontarazao
2.2 - Apos a Pesquisa acima, Pesquisar nos itens filtrados no ListView pelos Criterios "Data Inicial" e "Data Final".

Se for isto, realmente pela rotina que postou não dará certo.
1° ) Na "Private Sub socontarazao()", você está realizando a pesquisa (Filtro) pelos dados contidos no ListView, está OK,

2° ) Na Rotina "Sub RelatórioForm()", você está limpando o ListView com a Instrução "Me.lslista.ListItems.Clear" e depois carregando novamente o Listview com os Criterios Data Inicial e Final direto da "Plan41", ou seja você não está trabalhando com os Dados contidos no ListView apos a primeira filtragem.

Se realmente a intensão é seguir a lógica que coloquei acima, na segunda filtragem tem de referenciar aos dados contidos no ListView e não na planilha.

Se olhar os exemplo que indiquei, um deles tem uma opção de Filtrar "Somente pelas Datas Inicial e Final", então é esta rotina que você tem de utilizar.

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 25/04/2014 7:04 pm
Lorenzon
(@lorenzon)
Posts: 355
Reputable Member
Topic starter
 

Mauro,

Com base no exemplo referido por você, eu o adaptei de forma que permita que o usuário do projeto pesquise de vários modos, exemplo:

Opções de pesquisas:

Centro de Custo e Conta Razão
Conta razão apenas
Clientes apenas
Centro de Custo apenas
Ou pesquisar por todos os critérios.

O que estou a fazer é permitir que, além destas opções, o usuário possa também pesquisar pelas datas de pagamentos que estiverem dentro do período das datas descritas no txtdatainicial e txtdatafinal, sem desconsiderar a pesquisa anterior.

Eu utilizo este código para atender a pesquisa por todos os centro de Custo.

'Filtrar por tds os critérios

If ComboBoxCategorias.Text <> "" And ComboBoxProdutos.Text <> "" And ComboBox8.Text <> "" And ComboBox9.Text <> "" Then

Dim Tmp As Long
Dim I As Long
Dim sDtEmiss
Dim sTransportadora
Dim cliente
Dim situação

Tmp = UserForm9.lslista.ListItems.Count

sDtEmiss = ComboBoxCategorias.Text
sTransportadora = ComboBoxProdutos.Text
cliente = ComboBox8.Text
situação = ComboBox9.Text

Tmp = UserForm9.lslista.ListItems.Count

For I = 1 To Tmp

With lslista

If .ListItems(I).SubItems(2) = sDtEmiss And .ListItems(I).SubItems(3) = sTransportadora And .ListItems(I).SubItems(9) = situação And .ListItems(I).SubItems(10) = cliente 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)

Call Somar
Call datas

Exit Sub

End If

Observa que, como sugerido por você, utilizo o código para pesquisar pelas datas iniciais e datas Finais, chamando-o pelo Call datas. Vide a descrição:

Porém dá erro na linha em amarelo. O que devo fazer?

Private Sub datas()
Dim Tmp As Long
Dim I As Long
Dim sDtIni As Date
Dim sDtFim As Date

Tmp = UserForm9.lslista.ListItems.Count

sDtIni = txtDataInicial.Value
sDtFim = txtDataFinal.Value

For I = 1 To Tmp

With lslista
If .ListItems(I).SubItems(7) < sDtIni Then
UserForm9.lslista.ListItems.Remove I
I = I - 1
Tmp = Tmp - 1
If I = Tmp Then Exit For
Tmp = UserForm9.lslista.ListItems.Count

ElseIf .ListItems(I).SubItems(7) > sDtFim Then
UserForm9.lslista.ListItems.Remove I
I = I - 1
Tmp = Tmp - 1
If I = Tmp Then Exit For
Tmp = UserForm9.lslista.ListItems.Count

ElseIf .ListItems(I).SubItems(7) = sDtFim Then

Tmp = Tmp ' 1
If I = Tmp Then Exit For
Tmp = UserForm9.lslista.ListItems.Count

End If

End With

Next

End Sub

 
Postado : 27/04/2014 6:22 am
Lorenzon
(@lorenzon)
Posts: 355
Reputable Member
Topic starter
 

Mauro,

Desconsidere a mensagem acima!

Consegui atender a minha necessidade de acordo com o modelo referido por você.

Deste modo, encerro este fórum como resolvido.

Lorenzon.

 
Postado : 27/04/2014 6:41 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Ficamos contentes que resolveu, acredito que já teriamos encerrado antes se não tivéssemos de nos basear por uma imagem, é mais fácil quando temos um modelo.

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 27/04/2014 8:04 am
Página 2 / 2