Página 1 de 1

List Box entre Datas

Enviado: Sex Set 13, 2019 11:01 pm
por alex1s3t
Boa noite Amigos, sou novo no fórum e eu utilizei como modelo, uma planilha que o webmaster disponibilizou em um site onde se criava um formulário contendo um list box e por um combobox e um textbox seria filtrado o que iria aparecer no listbox, isso resolveu 70% do que eu precisava e procurei bastante aqui no fórum se existia uma dúvida semelhante a minha, procurei por vários dias e não encontrei, eu gostaria que esse formulário filtrasse em um text box1 (data inicial) e textbox2 (data final) e pode conter um botao para fazer o filtro do que já foi filtrado, pq ao selecionar o combo box e digitar alguma palavra no text box, o list box já faz o filtro...eu só precisava desse complemento de filtrar as datas e isso já salvaria minha pele pois eu poderia fazer um filtro mensal no combo box(Selecionaria um nome) no texbox( digitaria uma letra ou um nome) e nesse filtro de datas ( o período), não sei se fui claro o suficiente ou se eu soube me expressar corretamente mais deixarei em anexo a planilha para que alguém possa me ajudar ,desculpe o longo texto, é que eu não encontrei nenhuma solução e realmente estou precisando desse filtro isso ajudaria bastante.....
O objetivo é colocar no combo box o nome da empresa, digitar uma letra no textbox.....essa rotina já esta fazendo e ja funciona, ai la embaixo, conseguir filtrar conforme as datas digitadas nos textbox.
Se alguém puder me ajudar ficarei imensamente agradecido!!!

Re: List Box entre Datas

Enviado: Sáb Set 14, 2019 11:42 am
por Reinaldo
Uma possibilidade:
Altere a rotina preenchelista conforme abaixo:
ao digitar uma letra ou nome o filtro:
Se as datas não estiverem preenchidas, será considerado somente a letra ou nome
Se a data inicio estiver preenchida e a data fim não, será considerado todos itens maiores ou iguais a data inicial.
Se a data final estiver preenchida e a inicial não será considerado todos itens menores ou iguais a data final

Código: Selecionar todos

Private Sub PreencheLista(ByVal TextoDigitado As String)
Dim i As Integer, x As Integer
Dim indiceLista As Integer, coluna As Integer
Dim TextoCelula As String
Dim Dt_Ini As Date, Dt_Fim As Date
Dim ws As Worksheet
Dim Lista()

Set ws = ThisWorkbook.Worksheets(NomePlanilha)
ReDim Lista(ws.UsedRange.Columns.Count, 0)

i = LinhaCabecalho + 1
indiceLista = 1
coluna = Me.ComboBoxCampos.ListIndex + 1
Call PreencheCabecalho(Lista)

ListBoxLista.Clear
If Me.TextBox1 = "" Then
    Dt_Ini = CDate("1900/12/31")
Else
    Dt_Ini = CDate(Format(Me.TextBox1.Text, "yyyy/mm/dd"))
End If
If Me.TextBox2 = "" Then
    Dt_Fim = CDate("2950/12/31")
Else
    Dt_Fim = CDate(Format(Me.TextBox2.Text, "yyyy/mm/dd"))
End If

With ws
    While .Cells(i, coluna).Value <> Empty
        TextoCelula = .Cells(i, coluna).Value
        If UCase(Left(TextoCelula, Len(TextoDigitado))) = UCase(TextoDigitado) And _
           .Cells(i, 1) >= Dt_Ini And .Cells(i, 1) <= Dt_Fim Then

            For x = 0 To ws.UsedRange.Columns.Count - 1
                ReDim Preserve Lista(ws.UsedRange.Columns.Count, indiceLista)
                Lista(x, indiceLista) = .Cells(i, x + 1)
            Next

            indiceLista = indiceLista + 1
        End If
        i = i + 1
    Wend
End With

Lista = Array2DTranspose(Lista)

Me.ListBoxLista.List = Lista
End Sub
Para utilizar as datas para o btn filtrar inclua o codigo:

Código: Selecionar todos

Private Sub CommandButton1_Click()
Call PreencheLista(TextBoxFiltro.Text)
End Sub

Re: List Box entre Datas

Enviado: Sáb Set 14, 2019 5:13 pm
por alex1s3t
Reinaldo, muito obrigado pela sua ajuda, resolveu sim, com esse exemplo eu adaptei para um formulário que eu estou desenvolvendo com cadastro de clientes, produtos e lançamentos de vendas, alteração de cadastro e exclusão.
Com esse exemplo acima ficou perfeito, agora consigo filtrar todas as colunas por período, vou seguir estudando e assistindo os videos pois gosto muito de VBA e gostaria de me aperfeiçoar.
mais uma vez muito obrigado pela atenção isso vai ajudar muito a minha esposa a controlar as vendas!!!

Abraço!

Alex

Re: List Box entre Datas

Enviado: Sáb Set 14, 2019 11:55 pm
por alex1s3t
Teria a possibilidade, de uma Label somar as datas diferentes na primeira coluna do listbox1, no caso da planilha acima, quando eu fizer o filtro, vai aparecer vários registros dentro do período colocado nos Textbox1 e Textbox 2. (isso ficou perfeito)
Agora para eu saber quantos dias eu trabalhei eu teria que somar as datas, no caso vão existir vários registros iguais com a mesma data, e eu gostaria que a label mostrasse a quantidade de dias diferente.
no caso de valores, eu consegui somar a colona correspondente a valores usando esse caso abaixo:
Sub Somar()
Dim lItem As Double
Dim Total As Double
For lItem = 0 To ListBox1.ListCount - 1
If IsNumeric(ListBox1.List(lItem, 6)) = True Then
Total = Total + CCur(ListBox1.List(lItem, 6))
Label6.Caption = Format(CCur(Total), "currency")
End If
Next
End Sub

Agora com as datas eu não consegui o mesmo sucesso

Re: List Box entre Datas

Enviado: Dom Set 15, 2019 9:19 am
por Reinaldo
Não entendi, "..saber quantos dias eu trabalhei eu teria que somar as datas.." O que entende por somar datas?

Re: List Box entre Datas

Enviado: Seg Set 16, 2019 6:01 pm
por alex1s3t
Boa noite amigo Reinaldo, de acordo com o listbox, a primeira coluna são as datas certo?
vou utilizar esse modelo e fazer que o listbox seja meu relatório de vendas, toda vez que eu vender vai lancar uma linha certo? então, na primeira coluna da planilha vai haver várias datas iguais, no caso de hoje, se eu lançar 5 vendas vai ter 5 linhas com produtos diferentes, todas lançadas no dia 16/09/2019......e assim por diante
vai existir varias linhas com datas dos mesmo dias, mais oq me interessa são os dias diferentes, no caso, dia 16,17,18/19/20, etc...
a label só vai contar na primeira coluna as datas que forem diferentes no caso dos números que eu coloquei acima o resultado seria 5....pq são 5 dias diferentes, ai eu vou saber que foram trabalhados 5 dias...espero ter conseguido explicar melhor :)