Página 1 de 1
LISTBOX com dados FILTRADOS e ORDENADOS - RESOLVIDO
Enviado: 28 Jan 2022 às 13:37
por JCabral
Boa tarde
Mais uma vez pedindo ajuda.
Tenho uma planilha de registo de km's, ou seja, DATA, KmInicial, KmFinal e MATRICULA e gostaria na USERFORM de Filtrar, Ordenar e apresentar os dados consoante o mês numa ListBox.
Consegui Filtrar os dados em função dos meses, basta clicar nos Labels dos meses, mas não não consegui nem ordenar - do inicio do mês para o fim do mês - nem consegui mostrar os dados filtrados e ordenados na Listbox.
E era essa a ajuda que precisava ou seja ordenar os dados em função do mês escolhido e apresenta-los na ListBox.
Gostaria que, se possível, não fosse feito através de copiar os dados para outra planilha, depois ordena-los e no fim traze-los para a ListBox
Obrigado
Jorge Cabral
Re: LISTBOX com dados FILTRADOS e ORDENADOS
Enviado: 28 Jan 2022 às 15:13
por osvaldomp
Salve, Jorge.
#
JCabral escreveu: ↑28 Jan 2022 às 13:37
E era essa a ajuda que precisava ou seja ordenar os dados em função do mês escolhido e apresenta-los na ListBox.
A ordenação pode ser feita na planilha e os dados carregados já ordenados na
ListBox ?
Ou você quer que os dados sejam carregados sem mexer na ordenação da planilha ?
Re: LISTBOX com dados FILTRADOS e ORDENADOS
Enviado: 28 Jan 2022 às 15:31
por JCabral
Boa tarde Osvaldo
Boa pergunta, julgo que fica mais fácil ordenar na planilha e carregar os dados já ordenados.
Mas, por uma questão puramente académica confesso que gostava de ver tb a outra solução.
Muito obrigado mais uma vez
Re: LISTBOX com dados FILTRADOS e ORDENADOS
Enviado: 29 Jan 2022 às 18:06
por osvaldomp
Olá, Jorge.
Fiz a solução que julgo ser a mais simples. Utilizei um intervalo auxiliar (K:O) para ordenar os dados filtrados e depois carregá-los na
ListBox.
A alternativa de não utilizar intervalo auxiliar talvez fosse carregar os dados filtrados em algum tipo de
Collection e aí ordenar, mas nesse caminho me perece que o código ficaria bem mais complexo.
Código: Selecionar todosSub FilterRows(theMonth As Integer)
Dim LR As Long
Application.ScreenUpdating = False
TurnOFFAutoFilter
Columns("K:O") = ""
LR = Cells(Rows.Count, "A").End(xlUp).row
On Error Resume Next
lstKmsDiarios.List = ""
Range("A1").AutoFilter Field:=1, Operator:=xlFilterDynamic, Criteria1:=theMonth
If ActiveSheet.AutoFilter.Range.Columns(1).SpecialCells(12).Count > 1 Then
Range("A2:E" & LR).Copy [K1]
ActiveSheet.ShowAllData
Range("K1:O" & Cells(Rows.Count, "K").End(xlUp).row).Sort Key1:=[K1], Order1:=xlAscending
lstKmsDiarios.List = Range("K1:O" & Cells(Rows.Count, "K").End(xlUp).row).Value 'rng.Cells.Value
End If
ActiveSheet.ShowAllData
Columns("K:O") = ""
End Sub
#
obs. falta setar manualmente nas propriedades da
ListBox:
1.
ColumnCount ~~~> 5
2.
ColumnWidths ~~~> 55 pt;65 pt;55 pt;55 pt;70 pt
Re: LISTBOX com dados FILTRADOS e ORDENADOS
Enviado: 29 Jan 2022 às 21:42
por JCabral
Boas Caro Osvaldo
Eu diria que essa solução estava quase perfeita, na fosse o problema das datas que me aparecem no formato "mm-dd-aaaa" e não atender ao meu ultimo requisito do tópico .
O problema é nem sempre ser possível colocar aqui a planilha "verdadeira" mas aquele ultimo requisito reflecte a necessidade da planilha real, ou seja será que não posso fazer o filtro no range dos dados sem copiar para outro local e depois, dos dados filtrados e ordenados, adicionar os dados à Listbox ? É que copiar par outro local vai mexer com muitos dados. E depois tem o problema da formatação da data.
Re: LISTBOX com dados FILTRADOS e ORDENADOS
Enviado: 30 Jan 2022 às 09:03
por osvaldomp
JCabral escreveu: ↑29 Jan 2022 às 21:42
... o problema das datas que me aparecem no formato "mm-dd-aaaa"
Aqui tanto na planilha quanto na ListBox as datas aparecem no formato dd/mm/aaaa.
... será que não posso fazer o filtro no range dos dados sem copiar para outro local
Pode sim, basta você manter a tabela ordenada e após aplicar o Filtro fazer um Loop pelas linhas visíveis e então carregá-las na ListBox via método AddItem, pois me parece que não é possível carregar em massa somente as linhas filtradas, por isso optei pelo uso de intervalo auxiliar, pois suponho que seja bem mais rápido do que o Loop.
É que copiar par outro local vai mexer com muitos dados.
O que você quer dizer com "mexer com muitos dados"? É que a quantidade de dados filtrados será grande? Se for isso, não vejo problemas, pois a operação é em massa e rápida.
Por outro lado, se você quis dizer que o uso do intervalo auxiliar irá interferir com dados existentes ou com fórmulas, então você pode utilizar outro intervalo ou até outra planilha. Não entendo qual é o impedimento para isso.
Ou "mexer com muitos dados" tem outro significado?
E depois tem o problema da formatação da data.
Como comentei acima, aqui sempre aparecem como dd/mm/aaaa.