Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
  • Avatar do usuário
#68910
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
Você não está autorizado a ver ou baixar esse anexo.
Editado pela última vez por JCabral em 03 Fev 2022 às 06:50, em um total de 1 vez.
#68915
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 ?
JCabral agradeceu por isso
#68916
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
#68942
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 todos
Sub 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
JCabral agradeceu por isso
#68948
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.
#68952
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.
JCabral agradeceu por isso
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord