Vídeo recomendado
https://youtu.be/diWPPPhW-9E

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

Fórum para dúvidas sobre os fundamentos da linguagem de programação Visual Basic no contexto do VBA
PauloD
Colaborador
Colaborador
Mensagens: 18
Registrado em: Qua Dez 27, 2017 8:07 am

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

Mensagem 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
Anexos
Arquivo Formações.7z
(132.57 KiB) Baixado 172 vezes


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


PauloD
Colaborador
Colaborador
Mensagens: 18
Registrado em: Qua Dez 27, 2017 8:07 am

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

Mensagem 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


PauloD
Colaborador
Colaborador
Mensagens: 18
Registrado em: Qua Dez 27, 2017 8:07 am

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

Mensagem por PauloD »

alias apliquei esse codigo logo a seguir ao loop


PauloD
Colaborador
Colaborador
Mensagens: 18
Registrado em: Qua Dez 27, 2017 8:07 am

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

Mensagem 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


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Avatar do usuário
Reinaldo
Jedi
Jedi
Mensagens: 1537
Registrado em: Sex Ago 01, 2014 4:09 pm
Localização: Garça - SP / SCS - SP

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

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


PauloD
Colaborador
Colaborador
Mensagens: 18
Registrado em: Qua Dez 27, 2017 8:07 am

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

Mensagem por PauloD »

Ok vou preencher o ficheiro com dados reais para que me possas ajudar corretamente
Desde ja muito mas muito obrigado


PauloD
Colaborador
Colaborador
Mensagens: 18
Registrado em: Qua Dez 27, 2017 8:07 am

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

Mensagem 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
Anexos
Arquivo.7z
(115.11 KiB) Baixado 173 vezes


Avatar do usuário
Reinaldo
Jedi
Jedi
Mensagens: 1537
Registrado em: Sex Ago 01, 2014 4:09 pm
Localização: Garça - SP / SCS - SP

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

Mensagem por Reinaldo »

Considerando os tipos de dados em seu modelo
Experimente:
Arquivo.zip
(119.57 KiB) Baixado 201 vezes


PauloD
Colaborador
Colaborador
Mensagens: 18
Registrado em: Qua Dez 27, 2017 8:07 am

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

Mensagem por PauloD »

amigo espectáculo

muito obrigado pela ajuda :)


PauloD
Colaborador
Colaborador
Mensagens: 18
Registrado em: Qua Dez 27, 2017 8:07 am

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

Mensagem por PauloD »

amigo tive de eliminar esta linha pois não percebo o que lá esta a fazer

Me.Label20.Caption = contaregistros


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Responder