Ir para conteúdo
Fórum Script Brasil
  • 0

Pesquisa por períodos


Michelle Alves

Pergunta

Boa noite,

Tenho uma planilha de pagamentos, que exibo ela num Userform, e os dados são armazenados numa Listbox. Mas gostaria de efetuar pesquisa por um período de datas e valores, para por exemplo saber o que é necessário pagar na semana corrente. São 3 situaçoes:

- Preciso fazer uma pesquisa um período de datas nas colunas: J, L, N, P, R, T, V, X, Z, AB, AD e AF.

- Preciso pesquisar um limite de valores nas colunas I, K, M, O, Q, S, U, W, Y, AA, AC, AE

- E por último pretendo correr cadastro por cadastro nos TExtbox por meio de buttons. Ao estilo próximo e anterior.

A idéia seria: Depois de fazer a pesquisa, com um duplo click no List transferir os dados para os TEXT e alterar ou baixar o PG.

Existem 3 tipos de pesquisa, que serão selecionadas pelo Option Button. Conforme o click no Option Button, determinada TEXT ou Combo será exibida e lá será digitada o que pretende ser pesquisado.

Link para o comentário
Compartilhar em outros sites

16 respostass a esta questão

Posts Recomendados

  • 0

michelle, mas você já fez alguma coisa?? tem algum codigo já pronto??

não to entendendo direito...

essa parte da pesquisa nas colunas J, L, N, P, R, T, V, X, Z, AB, AD e AF, por exemplo, é so você fazer o find no range delas. exemplo:

Range("J:J,L:L,N:N").Find (...)

no exemplo, ele vai buscar nas colunas J, L e N. é so você adicionar as outras.

- E por último pretendo correr cadastro por cadastro nos TExtbox por meio de buttons. Ao estilo próximo e anterior.

esses dados vem da planilha ne??

no botao de anterior você voltaria uma linha e no proximo você avanca uma.

e ai você carrega a partir da selecion atual.

Link para o comentário
Compartilhar em outros sites

  • 0

Então Kuroi,

Os dados vem da planilha sim.

Eu tentei pelo método Find primeiro antes de postar e não deu. Com sua sugestão vi que estava nomeando as colunas de forma errada, tentei de novo mas novamente sem sucesso.

Sub Pesquisar()

Dim PrimEndereço, C As Range

'ListBox1.Clear

With Sheets("CREC").Range("J:J,L:L,N:N,P:P,R:R,T:T,V:V")

Set C = .Find(TextBox32.Text & TextBox33.Text, LookIn:=xlValues, LookAt:=xlPart, MatchCase:=False)

If Not C Is Nothing Then

PrimEndereço = C.Address

Do

CREC.ListBox1.AddItem Sheets("CREC").Range("F" & C.Row).Value

CREC.ListBox1.List(CREC.ListBox1.ListCount - 1, 1) = Sheets("CREC").Range("D" & C.Row).Value

CREC.ListBox1.List(CREC.ListBox1.ListCount - 1, 2) = Sheets("CREC").Range("I" & C.Row).Value

Set C = .FindNext(After:=C)

Loop While Not C Is Nothing And C.Address <> PrimEndereço

End If

End With

End Sub

O que acontece é que vou pesquisar um período. Suponhámos, quero saber o que tenho para pagar essa semana, ai eu pesquiso do dia 30/03/09 até 03/04/09. Ou seja, seria uma pesquisa em 2 TEXTBOX.

Além da pesquisa por data, eu faria por Valor e FORMA de PG.

Sobre a questão de correr os registros eu já consegui resolver.

Não sei se ficou mais fácil o entendimento, vou colocar um exemplo para facilitar a visualização.

http://www.4shared.com/account/file/95800035/ab9993d8/EXEMPLO_CREC-2.html

Obrigada

Editado por Michelle Alves
Link para o comentário
Compartilhar em outros sites

  • 0

Além dessa questão acima, que ainda não consegui resolver.

A estética visual dos dados no Listbox é algo que tem me incomodado.

Não sei se existe como fazer. Seria assim, as colunas PARCELAS e VENCIMENTO só apareceriam aquelas referentes ao que for pesquisado. Exemplifico: A parcela que é refere-se a minha pesquisa é a 2ª, então seria exibida apenas a coluna da 2ª parcela e o seu respectivo vencimento, e assim com todas os resultados, exibindo apenas o valor e parcela que se refere a pesquisa. Se por acaso tiver jeito... seria uma boa alternativa para aprimorar o visual estético, não acha ?

Muito Obrigada

Link para o comentário
Compartilhar em outros sites

  • 0
Além dessa questão acima, que ainda não consegui resolver.

michelle, já baxei a planilha, quando der eu olho.

Eu tentei pelo método Find primeiro antes de postar e não deu. Com sua sugestão vi que estava nomeando as colunas de forma errada, tentei de novo mas novamente sem sucesso.

então, michelle, se você ta tentando encontrar uma data q teja entre as datas digitadas, não vai dar em nada passar "TextBox32.Text & TextBox33.Text" no find.

pra dizer a verdade, não sei se adianta usar o Find. nunca fiz uma pesquisa assim, mas acho q o Find so vai procurar no texto.

exemplo, você digita a data e ele pesquisa uma coluna q tenha essa data.

se você quer pesquisar em intervalo de data, acho q você tera q percorrer as colunas com um for e comparar as datas.

Além dessa questão acima, que ainda não consegui resolver.

A estética visual dos dados no Listbox é algo que tem me incomodado.

Não sei se existe como fazer. Seria assim, as colunas PARCELAS e VENCIMENTO só apareceriam aquelas referentes ao que for pesquisado. Exemplifico: A parcela que é refere-se a minha pesquisa é a 2ª, então seria exibida apenas a coluna da 2ª parcela e o seu respectivo vencimento, e assim com todas os resultados, exibindo apenas o valor e parcela que se refere a pesquisa. Se por acaso tiver jeito... seria uma boa alternativa para aprimorar o visual estético, não acha ?

essa parte não entendi direito. se você quer mostrar so as colunas das parcelas q precisar, você pode esconder as colunas, alterando a propriedade ColumnCount do ListBox (subtraia nela pra esconder colunas, e some pra mostrar as colunas escondidas ou pra adicionar novas).

Link para o comentário
Compartilhar em outros sites

  • 0

Hummm.... por isso que tentei o Find de todas as formas imagináveis e nada, que pena.

Então, sobre a questão das COLUNAS, não seria bem do jeito como você imaginou. A própria pesquisa, pensei em fazer ela só retornar as COLUNAS de DATAS e VALORES referentes ao que foi pesquisado, o resto não viria para o LIST.

Por exemplo procurei o intervalo entre 1/4/09 até 10/04/09. Se apenas a COLUNA J tem do pedido 350 tem esse intervalo, só ela aparecia. Se no pedido 351 a COLUNA referente ao intervalo pesquisado é M, somente ela apareceria. Não sei se tem como fazer isso, mas pensei numa solução na estética, pois o LIST ficou desproporcional com tantas informações...

Muito Obrigada

Link para o comentário
Compartilhar em outros sites

  • 0

michelle, da uma olhada na pesquisa por data q eu inventei aqui:

Sub Pesquisar()
    Dim i As Integer, j As Integer
    Dim colunas As String, x() As String
    
    colunas = "J,L,N,P,R,T,V"
    x = Split(colunas, ",")
    
    Dim fim_coluna As Boolean
    For i = LBound(x) To UBound(x)
        j = 5
        With Sheets("CREC")
            fim_coluna = False
            
            Do While Not fim_coluna
                If .Range("C" & j).Value <> "" Then
                    If CDate(.Range(x(i) & j).Value) > CDate(TextBox32.Text) And CDate(.Range(x(i) & j).Value) < CDate(TextBox33.Text) Then
                        .Range(x(i) & j).Activate
                        Exit Sub
                    End If
                    j = j + 1
                Else
                    fim_coluna = True
                End If
            Loop
        End With
    Next
End Sub[/code]

o problema é q eu não conseguia achar o final. tipo não sabia ate q linha tinha q procurar, e ia acabar procurando ate a 65536. pra evitar isso, eu mandei pesquisar ate onde a coluna C tiver preenchida. ai você pode ajustar essa parte de acordo com o q for melhor pra você.

ai veja se funciona ai, so o q acho q faltaria implementar ai seria um findnext, nesse caso, você teria q achar q celula ele esta (de acordo com o array x) antes de pesquisar.

Por exemplo procurei o intervalo entre 1/4/09 até 10/04/09. Se apenas a COLUNA J tem do pedido 350 tem esse intervalo, só ela aparecia. Se no pedido 351 a COLUNA referente ao intervalo pesquisado é M, somente ela apareceria. Não sei se tem como fazer isso, mas pensei numa solução na estética, pois o LIST ficou desproporcional com tantas informações...

ainda não entendi direito. q codigo você usa pra mostrar as colunas no listbox??

você mostra a coluna q quiser ue.

Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia Kuroi,

Gostei da estrutura da sua pesquisa, ficou muito enxuta, só que infelizmente não puxou nada aqui, você testou ela ?

[\quote]

Sub Pesquisar()
    Dim i As Integer, j As Integer
    Dim colunas As String, x() As String
    
    colunas = "J,L,N,P,R,T,V"
    x = Split(colunas, ",")
    
    Dim fim_coluna As Boolean
    For i = LBound(x) To UBound(x)
        j = 5
        With Sheets("CREC")
            fim_coluna = False
            
            Do While Not fim_coluna
                If .Range("C" & j).Value <> "" Then
                    If CDate(.Range(x(i) & j).Value) > CDate(TextBox32.Text) And CDate(.Range(x(i) & j).Value) < CDate(TextBox33.Text) Then
                        .Range(x(i) & j).Activate
                        Exit Sub
                    End If
                    j = j + 1
                Else
                    fim_coluna = True
                End If
            Loop
        End With
    Next
End Sub

Link para o comentário
Compartilhar em outros sites

  • 0
Gostei da estrutura da sua pesquisa, ficou muito enxuta, só que infelizmente não puxou nada aqui, você testou ela ?

michelle, não sei o q a consulta devia fazer, então ele so ta ativando a celula.

tipo, acho q não puxando nd, porque eu não sei pra onde tem q puxar.

mas se você olhar na planilha enquanto, você consulta, vai ver q ele muda o cursor pra celula onde ta a data, testei aqui e deu certo. é essa linha aqui:

.Range(x(i) & j).Activate

ai o q teria q fazer seria alterar ela, pra por os dados onde você quiser.

Por exemplo procurei o intervalo entre 1/4/09 até 10/04/09. Se apenas a COLUNA J tem do pedido 350 tem esse intervalo, só ela aparecia. Se no pedido 351 a COLUNA referente ao intervalo pesquisado é M, somente ela apareceria. Não sei se tem como fazer isso, mas pensei numa solução na estética, pois o LIST ficou desproporcional com tantas informações...

esses dados vao vir dessa consulta acima?? o q você pode fazer é, a cada vez q a consulta for feita, você apaga todos os dados do listbox, e adiciona as linhas e as colunas de acordo com o q achou na pesquisa.

Link para o comentário
Compartilhar em outros sites

  • 0

Ahhhh.... vi aqui, Kuroi.

Ele ativou a célula mesmo.

Então, ele puxaria os dados para a Listbox. Agora que vi, o que você disse sobre o FindNext, realmente, ele ativa só uma linha, quando o resultado da pesquisa é mais de 1 item.....

Para puxar os dados para a List seria +ou - assim?

Sub Pesquisar()

Dim i As Integer, j As Integer

Dim colunas As String, x() As String

colunas = "J,L,N,P,R,T,V"

x = Split(colunas, ",")

Dim fim_coluna As Boolean

For i = LBound(x) To UBound(x)

j = 5

With Sheets("CREC")

fim_coluna = False

Do While Not fim_coluna

If .Range("C" & j).Value <> "" Then

If CDate(.Range(x(i) & j).Value) > CDate(TextBox32.Text) And CDate(.Range(x(i) & j).Value) < CDate(TextBox33.Text) Then

CREC.ListBox1.AddItem Range("B" & j).Value

CREC.ListBox1.AddItem Range("C" & j).Value

CREC.ListBox1.AddItem Range("D" & j).Value

CREC.ListBox1.AddItem Range("E" & j).Value

CREC.ListBox1.AddItem Range("F" & j).Value

CREC.ListBox1.AddItem Range("C" & j).Value

CREC.ListBox1.AddItem Range("C" & j).Value

CREC.ListBox1.AddItem Range("C" & j).Value

Exit Sub

End If

j = j + 1

Else

fim_coluna = True

End If

Loop

End With

Next

End Sub

O que pretendo é exatamente o que você escreveu no último quote.

Editado por Michelle Alves
Link para o comentário
Compartilhar em outros sites

  • 0

Boa noite,

Colocando

CREC.ListBox1.AddItem .Range(x(i) & j).Value

O retorno no Listbox seria apenas das colunas pesquisadas, certo ? E não dos outros dados... De qualquer forma, fiz um teste apenas com CREC.ListBox1.AddItem .Range(x(i) & j).Value e não funcionou.

Mas olha só,

Eu e o pessoal do serviço quebramos a cabeça hoje e pensei agora a noite. Acho que estou complicando sem necessidade a entrada dos dados. E isso deixa a pesquisa complicada.

Se conseguir inserir cada parcela em uma linha resolveria de vez esse problema de ter que fazer a consulta em tantas colunas, pois a data de vencimento estaria sempre na mesma coluna.

A dúvida seria, como fazer para que quando fosse 1 parcela, descesse apenas 1 linha, quando fosse 2 parcelas, desceria 2 linhas e assim por diante ??

Outra coisa, percebeu que tenho um código para correr os registros nos TEXT ? Ele dá conflito com o código de pesquisa?

Se houver necessidade de verificar como seria essa estrutura vou postar o exemplo:

http://www.4shared.com/account/file/984205...MODIFICADO.html

Muito Obrigada, Kuroi.

Link para o comentário
Compartilhar em outros sites

  • 0
O retorno no Listbox seria apenas das colunas pesquisadas, certo ? E não dos outros dados... De qualquer forma, fiz um teste apenas com CREC.ListBox1.AddItem .Range(x(i) & j).Value e não funcionou.

michelle, seria so a coluna pesquisada sim, passei de exemplo pois não sei o q você quer adicionar. mas pra adicionar os otros dados, é so você trocar o x(i), pela letra da coluna q você quer.

mas você ta dizendo q não funcionou. o q aconteceu de errado?? ele não adicionou nd??

hum, to olhando agora aqui e acho q entendi sua planilha so agora. é q tinha varias datas de vencimento, certo?? pra mesma parcela.

e o meu codigo do jeito q tava ia adicionar datas de vencimento diferente pra mesma parcela.

mas devia inserir a parcela uma vez so ne??

ai teria q alterar aquele meu codigo.

entretanto, na sua nova planilha, vi q você so vai ter uma coluna vencimento, ne??

ai nesse caso, o meu codigo vai servir sim.

mas se por acaso você tentar adicionar de novo as otras colunas, ai a gente tem q ver.

Eu e o pessoal do serviço quebramos a cabeça hoje e pensei agora a noite. Acho que estou complicando sem necessidade a entrada dos dados. E isso deixa a pesquisa complicada.

Se conseguir inserir cada parcela em uma linha resolveria de vez esse problema de ter que fazer a consulta em tantas colunas, pois a data de vencimento estaria sempre na mesma coluna.

A dúvida seria, como fazer para que quando fosse 1 parcela, descesse apenas 1 linha, quando fosse 2 parcelas, desceria 2 linhas e assim por diante ??

michelle essa parte eu não entendi. você diz q seria 1 parcela em cada linha, você diz q seria 1 linha no listbox, ou na planilha??

bom, na planilha, acho q já ta uma em cada ne.

no listbox, você teria q usar aquele meu codigo, imagino q ele faca isso direito.

Outra coisa, percebeu que tenho um código para correr os registros nos TEXT ? Ele dá conflito com o código de pesquisa?

não vi michelle, a q sub exatamente você ta se referindo??

mas acho q não dara conflito nenhum

Se achar melhor eu posto um tópico só para a inserção de dados.

não, não vejo necessidade, pode ser esse mesmo.

Link para o comentário
Compartilhar em outros sites

  • 0

Boa noite Kuroi,

Obrigada novamente por toda sua boa vontade. Queria fazer esses Quotes, mas dá última vez que tentei não consegui, então vou copiando suas perguntas e respondendo:

michelle, seria so a coluna pesquisada sim, passei de exemplo pois não sei o q você quer adicionar. mas pra adicionar os otros dados, é so você trocar o x(i), pela letra da coluna q você quer.

Troquei o x(i)

Tentando como: CREC.ListBox1.AddItem .Range("B"(i) & j).Value

Dessa forma o VBA não aceita, então coloquei assim:

CREC.ListBox1.AddItem .Range(x("B") & j).Value

Mas não filtrou nada.... o código roda, mas não filtra

o Código completo ficou assim:

Dim i As Integer, j As Integer

Dim colunas As String, x() As String

colunas = "L"

x = Split(colunas, ",")

Dim fim_coluna As Boolean

For i = LBound(x) To UBound(x)

j = 5

With Sheets("CREC")

fim_coluna = False

Do While Not fim_coluna

If .Range("C" & j).Value <> "" Then

If CDate(.Range(x(i) & j).Value) > CDate(TextBox12.Text) And CDate(.Range(x(i) & j).Value) < CDate(TextBox13.Text) Then

CREC.ListBox1.AddItem .Range(x("B") & j).Value

CREC.ListBox1.AddItem .Range(x("C") & j).Value

CREC.ListBox1.AddItem .Range(x("D") & j).Value

CREC.ListBox1.AddItem .Range(x("E") & j).Value

CREC.ListBox1.AddItem .Range(x("F") & j).Value

End If

j = j + 1

Else

fim_coluna = True

End If

Loop

End With

Next

End Sub

A dúvida seria, como fazer para que quando fosse 1 parcela, descesse apenas 1 linha, quando fosse 2 parcelas, desceria 2 linhas e assim por diante ??

michelle essa parte eu não entendi. você diz q seria 1 parcela em cada linha, você diz q seria 1 linha no listbox, ou na planilha??

Essa é parte que pensei em postar outro tópico, pois pensei numa forma de que a pesquisa fosse apenas em 1 COLUNA, mas teria que mudar um outro FORM. Já consegui essa parte, mas tá com um errinho chato, ele insere as linhas conforme os planos de PG, mas a partir da segunda linha sai desconfigurado. estou mandando um arquivo dele juntamente ele com o exemplo da pesquisa, o FORM dele é FrmCaixa.

Outra coisa, percebeu que tenho um código para correr os registros nos TEXT ? Ele dá conflito com o código de pesquisa?

não vi michelle, a q sub exatamente você ta se referindo??

mas acho q não dara conflito nenhum

No exemplo que estou enviando tá esse código. É aquele que faz correr os registros nos TEXT, seja PRÒXIMO OU ANTERIOR.

Para melhor visualizar tudo que falei envio o link do arquivo:

http://www.4shared.com/account/file/99980195/6c38e375/EXEMPLO_CREC-4_MODIFICADO.html

Kuroi mais uma vez muitíssimo obrigada.

Link para o comentário
Compartilhar em outros sites

  • 0
Obrigada novamente por toda sua boa vontade. Queria fazer esses Quotes, mas dá última vez que tentei não consegui, então vou copiando suas perguntas e respondendo:

michelle, pra fazer o quote você tem q dexar dentro da tag quote tipo assim:

[q.u.o.t.e]

aqui ta dentro do quote

[/q.u.o.t.e]

so q sem os pontos.

clique no botao "RESP" logo embaxo do post pra você ver como é.

Troquei o x(i)

Tentando como: CREC.ListBox1.AddItem .Range("B"(i) & j).Value

Dessa forma o VBA não aceita, então coloquei assim:

CREC.ListBox1.AddItem .Range(x("B") & j).Value

Mas não filtrou nada.... o código roda, mas não filtra

michelle, era pra ser assim ó:

CREC.ListBox1.AddItem .Range("B" & j).Value

não precisa do (i)

Para melhor visualizar tudo que falei envio o link do arquivo:

http://www.4shared.com/account/file/99980195/6c38e375/EXEMPLO_CREC-4_MODIFICADO.html

michelle, esse link não ta funcionando...

e nem o de cima ta funcionando mais (esse já baxei), acho q o 4shared deletou sua conta hehe

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...