Página 1 de 2

Ajuda em pesquisa/filtro em Listview (já estou a ficar desesperado)

Enviado: Qua Nov 20, 2019 10:51 am
por PauloD
Boas Tardes a todos

volto a precisar de ajuda pois não estou a conseguir fazer o que pretendo e já penso que não vou conseguir
é o seguinte

no ficheiro em anexo pretendo fazer a pesquisa pelos campos da pesquisa
exemplo
por data por mês etc
e depois por data e mês e tipo formação etc
e data , mês, tipo formação, formação etc e assim ate chegar a pesquisa por todos
não sei como fazer pois o excel já não me deixa adicionar mais código existe alguma maneira de fazer o que pretendo de forma mais simples

obrigado fico a aguardar ajuda

Re: Ajuda em pesquisa/filtro em Listview (já estou a ficar desesperado)

Enviado: Qua Nov 20, 2019 12:21 pm
por PauloD
amigos
ou estou muito errado ou o meu problema era simples
podem me ver se esta codigo é mesmo assim isto depois de ter colocado uma pesquisa para cada opção
adicionei depois este codigo e pelo que estou a testar é o que pretendo so nao estou a acreditar ser uma soluçao tao simples

'filtrar todos
If pesquisadata.Text >= "" And pesquisames.Text >= "" And pesquisatipoformacao.Text >= "" And pesquisaformacao.Text >= "" And pesquisadisciplina.Text >= "" And pesquisasubunidades.Text >= "" And Pesquisalocal.Text >= "" And pesquisaformador.Text >= "" And pesquisaformandos.Text >= "" Then
ListView1.ListItems.Clear
textoDigitado = pesquisadata.Text
textoDigitado1 = pesquisames.Text
textoDigitado2 = pesquisatipoformacao.Text
textoDigitado3 = pesquisaformacao.Text
textoDigitado4 = pesquisadisciplina.Text
textoDigitado5 = pesquisasubunidades.Text
textoDigitado6 = Pesquisalocal.Text
textoDigitado7 = pesquisaformador.Text
textoDigitado8 = pesquisaformandos.Text
'código que irá filtrar os nomes
linha = 2
linhatabela = 1
While Folha1.Cells(linha, 1).Value <> Empty
TextoCelula = Folha1.Cells(linha, 2).Value
TextoCelula1 = Folha1.Cells(linha, 8).Value
TextoCelula2 = Folha1.Cells(linha, 4).Value
TextoCelula3 = Folha1.Cells(linha, 3).Value
TextoCelula4 = Folha1.Cells(linha, 9).Value
TextoCelula5 = Folha1.Cells(linha, 5).Value
TextoCelula6 = Folha1.Cells(linha, 7).Value
TextoCelula7 = Folha1.Cells(linha, 6).Value
TextoCelula8 = Folha1.Cells(linha, 10).Value
'quebra a palavra atual pela esquerda conforme a quantidade de letras digitadas e compara com o texto digitado
If InStr(UCase(TextoCelula), UCase(textoDigitado)) > 0 Then
If InStr(UCase(TextoCelula1), UCase(textoDigitado1)) > 0 Then
If InStr(UCase(TextoCelula2), UCase(textoDigitado2)) > 0 Then
If InStr(UCase(TextoCelula3), UCase(textoDigitado3)) > 0 Then
If InStr(UCase(TextoCelula4), UCase(textoDigitado4)) > 0 Then
If InStr(UCase(TextoCelula5), UCase(textoDigitado5)) > 0 Then
If InStr(UCase(TextoCelula6), UCase(textoDigitado6)) > 0 Then
If InStr(UCase(TextoCelula7), UCase(textoDigitado7)) > 0 Then
If InStr(UCase(TextoCelula8), UCase(textoDigitado8)) > 0 Then
'se a comparação for igual será adicionado no formulario
Set Item = ListView1.ListItems.Add(Text:=Folha1.Cells(linha, 1))
Item.SubItems(1) = Folha1.Cells(linha, 2) ' data
Item.SubItems(2) = Folha1.Cells(linha, 3) ' formacao
Item.SubItems(3) = Folha1.Cells(linha, 4) ' tipo formacao
Item.SubItems(4) = Folha1.Cells(linha, 5) ' subunidades
Item.SubItems(5) = Folha1.Cells(linha, 6) ' formador
Item.SubItems(6) = Folha1.Cells(linha, 7) ' local
Item.SubItems(7) = Folha1.Cells(linha, 8) ' mes
Item.SubItems(8) = Folha1.Cells(linha, 9) 'disciplina
Item.SubItems(9) = Format(Folha1.Cells(linha, 11).Value, "hh:mm") 'horas
Item.SubItems(10) = Folha1.Cells(linha, 10) ' formandos
End If
End If
End If
End If
End If
End If
End If
End If
End If
linha = linha + 1
Wend
Exit Sub
End If
contaregistros = "Número de Registos: " & Me.ListView1.ListItems.Count
End Sub

Re: Ajuda em pesquisa/filtro em Listview (já estou a ficar desesperado)

Enviado: Qua Nov 20, 2019 12:25 pm
por PauloD
alias apliquei esse codigo logo a seguir ao loop

Re: Ajuda em pesquisa/filtro em Listview (já estou a ficar desesperado)

Enviado: Qua Nov 20, 2019 12:55 pm
por PauloD
logo vi que a coisa nao esta muito bem
agora não soma corretamente na pesquisa ao iniciar o userform mas soma correto na filtragem não estou a perceber

Re: Ajuda em pesquisa/filtro em Listview (já estou a ficar desesperado)

Enviado: Qua Nov 20, 2019 2:52 pm
por Reinaldo
Lembro de já haver visto algo parecido com esse projeto; mas vamos lá
Aplicação de filtro é algo relativamente simples, porem deve se observado alguns detalhes importantes.
O mais importante e quando será aplicado/iniciado esse filtro.
Aplicação Filtro em campo numérico e "ligeiramente" diferente da aplicação em campos Texto.
Em um campo texto é possível a cada digitação de caractere "ir filtrando" os dados (algo que particularmente não gosto), já um campo numérico não aceita essa possibilidade.
Para efetuar qualquer proposta primeiro e necessário entender/conhecer a base; como seu modelo não há valores fica difícil saber o que e numérico texto ou ambos.
Vou tentar entender sua rotina locais de chamamento da rotina/execução, antes de qq proposta
Contudo vale ressaltar:
Apenas um trecho

Código: Selecionar todos

'apenas data com filtro
If pesquisames.Text = "" And pesquisatipoformacao.Text = "" And Pesquisalocal.Text = "" And _
   pesquisaformacao.Text = "" And pesquisadisciplina.Text = "" And pesquisaformador.Text = "" And _
   pesquisasubunidades.Text = "" And pesquisaformandos.Text = "" Then

    ListView1.ListItems.Clear
    textoDigitado = pesquisadata.Text
    'código que irá filtrar os nomes
    linha = 2
    linhatabela = 1
    While Folha1.Cells(linha, 1).Value <> Empty
        TextoCelula = Folha1.Cells(linha, 2).Value
        'quebra a palavra atual pela esquerda conforme a quantidade de letras digitadas e compara com o texto digitado
        If InStr(UCase(TextoCelula), UCase(textoDigitado)) > 0 Then
            'se a comparação for igual será adicionado no formulario
            Set Item = ListView1.ListItems.Add(Text:=Folha1.Cells(linha, 1))
            Item.SubItems(1) = Folha1.Cells(linha, 2) ' data
            Item.SubItems(2) = Folha1.Cells(linha, 3) ' formacao
            Item.SubItems(3) = Folha1.Cells(linha, 4) ' tipo formacao
            Item.SubItems(4) = Folha1.Cells(linha, 5) ' subunidades
            Item.SubItems(5) = Folha1.Cells(linha, 6) ' formador
            Item.SubItems(6) = Folha1.Cells(linha, 7) ' local
            Item.SubItems(7) = Folha1.Cells(linha, 8) ' mes
            Item.SubItems(8) = Folha1.Cells(linha, 9) 'disciplina
            Item.SubItems(9) = Format(Folha1.Cells(linha, 11).Value, "hh:mm") 'horas
            Item.SubItems(10) = Folha1.Cells(linha, 10) ' formandos
        End If
        linha = linha + 1
    Wend
    Exit Sub
End If

contaregistros = "Número de Registos: " & Me.ListView1.ListItems.Count
...
A informação desse trecho indica "Apenas data", porem a comparação e utilizada a função InStr, que
"Retorna uma Variant (Long) que especifica a posição da primeira ocorrência de uma sequência de caracteres dentro de outra";
como disse anteriormente essa "comparação" não funciona com números; assim e preciso uma forma diferente de comparação ou de pesquisa.
ao final desse trecho mas ainda "dentro" do mesmo há a linha/comando "exit sub"; ou seja sai da rotina sem executar/ler as demais linhas;
asism o comando ==>contaregistros = "Número de Registos: " & Me.ListView1.ListItems.Count logo após o Endif não é executado.
Forneça seu modelo com alguns registros (dados ficticios, mas representativo do constante em cada coluna) bem como da necessidade de cada "filtro/consulta" ocorrer em que momento, Tipo acionar um botão,saida do campo, digitação ....

Re: Ajuda em pesquisa/filtro em Listview (já estou a ficar desesperado)

Enviado: Qua Nov 20, 2019 3:00 pm
por PauloD
Ok vou preencher o ficheiro com dados reais para que me possas ajudar corretamente
Desde ja muito mas muito obrigado

Re: Ajuda em pesquisa/filtro em Listview (já estou a ficar desesperado)

Enviado: Qui Nov 21, 2019 6:06 am
por PauloD
Amigo conforme falámos envio o arquivo com dados preenchidos para que me possas ajudar correctamente
desde já muito obrigado pela disponibilidade e ajuda

Re: Ajuda em pesquisa/filtro em Listview (já estou a ficar desesperado)

Enviado: Qui Nov 21, 2019 9:58 am
por Reinaldo
Considerando os tipos de dados em seu modelo
Experimente:
Arquivo.zip
(119.57 KiB) Baixado 43 vezes

Re: Ajuda em pesquisa/filtro em Listview (Resolvidão)

Enviado: Qui Nov 21, 2019 10:39 am
por PauloD
amigo espectáculo

muito obrigado pela ajuda :)

Re: Ajuda em pesquisa/filtro em Listview (já estou a ficar desesperado)

Enviado: Qui Nov 21, 2019 11:06 am
por PauloD
amigo tive de eliminar esta linha pois não percebo o que lá esta a fazer

Me.Label20.Caption = contaregistros