XL 2010 Tri ListView

ChTi160

XLDnaute Barbatruc
Bonjour ,
Je me suis amusé ce jour à la réalisation d'une ListView et je me suis intéressé au tri de certaines de ses Colonnes , c'est posé le problème du contenu de ces Colonnes à trier , tantôt des Chiffres en Texte ,des Dates au Format "dd/mm/yyyy" , des Prix etc.
j'ai donc bidouillé cette procédure qui permet dans la Limite de ce que j'avais à traiter exemple n° de Lignes de 0 à 99000 idem pour les Chiffres Prix 0.00 à 99000.00 € des Dates jusqu’à 99000 Lol (c'était pratique !)
Cette procédure pouvant être adaptée à de plus grandes valeurs (Ex : Format(chiffres "000000")!
je vous mets donc la procédure que j'ai utilisée si elle peut servir (ne pas hésiter si besoin d'info)
Aucune prétention juste une envie de partage (je ne suis personnellement pas intéressé) Lol
je joins une procédure , qui permet dans le cas des colonnes de ListView de simuler depuis une procédure
le Click sur un entête de Colonne (ColumnHeader) après avoir mis a public la Procédure
Public Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
'**************************
VB:
'on simule un Click sur l’entête de la  Colonne 1(0) de la LisView1 pour tri .
Set ColumnHeader = .ColumnHeaders([B]1[/B]) 'Ici on affecte la Colonne qui va être triée
       Userform1.ListView1_ColumnClick (ColumnHeader)
'**************************
Voir ci dessous (me dire si je dois faire un fichier exemple)
VB:
Public Sub ListView1_ColumnClick (ByVal ColumnHeader As MSComctlLib.ColumnHeader)
  Dim i As Integer, j As Integer
  Dim Idx As Byte
  Dim LstVItem As MSComctlLib.ListItem
  Dim LstVsItem As MSComctlLib.ListSubItem
‘Permet dans ce cas de figure le tri de valeurs  entières  de 0 à 99000 (pourrait être adaptée) Lol
‘Ou De  Dates , ou  de  Prix si inférieur ou égaux a 99000
  Idx = ColumnHeader.Index - 1 'On récupère l'index de la Colonne sélectionnée
With Userform1
  With ListView1
  .Sorted = False
  .SortKey = Idx
If Idx = 0 Or Idx = 3 Or Idx = 6 Then
  'Boucle sur toutes les lignes
  For i = 1 To .ListItems.Count 'Pour Chaque ligne de la ListView
  Set LstVItem = .ListItems(i) 'On récupère la Ligne par sa première Colonne (0)
  'Passage des données au format "00000"
  With LstVItem 'avec cette Cellule
  If Idx = 0 Then 'si le tri se fait sur la première colonne (0)
   .Tag = CStr(.Text) 'On récupère la valeur dans le Tag de la Cellule
   .Text = Format (.Text, "00000") 'on formate la valeur de la cellule
  ElseIf Idx = 3 Or Idx = 6 Then 'si le tri se fait sur les colonnes ( 3 ou 6)
  Set LstVsItem = .ListSubItems(Idx) 'On récupère la cellule "3 ou 6" de la Ligne
  With LstVsItem 'avec cette cellule
  .Tag = CStr(.Text) 'On récupère la valeur dans le « .Tag » de la Cellule
  .Text = Format (.Text, "00000") 'on formate la valeur de la cellule
  End With
  End If
  End With
  Next i
  End If
  ' -----  Application du tri -----------
  If .SortOrder = lvwAscending Then
  .SortOrder = lvwDescending
  Else
  .SortOrder = lvwAscending
  End If
  .Sorted = True
  '--------------------------------------
  'Boucle sur toutes les lignes
  For i = 1 To .ListItems.Count  'Pour Chaque ligne de la ListView
  Set LstVItem = .ListItems(i) 'On récupère la Ligne par sa première Colonne (0)
  'Passage des données au format initial
   With LstVItem 'avec cette cellule
  If Idx = 0 Then 'si le tri se fait sur la première colonne (0)
   .Text = .Tag 'On récupère le valeur initiale
  ElseIf Idx = 3 Or Idx = 6 Then 'si le tri se fait sur les colonnes ( 3 ou 6)
   Set LstVsItem = .ListSubItems(Idx) 'On récupère la cellule "3 ou 6" de la Ligne
   With LstVsItem 'avec cette cellule
   .Text = .Tag 'On récupère la valeur initiale depuis la propriété « .Tag »
   End With
  End If
Lien du fil ou j'ai déposé le fichier Source de ce Code !
https://www.excel-downloads.com/threads/listview-filtre-multi-critère-mutli-type.202771/page-2
il n'est pas évident de trouver ce genre de traitements des données de ListView sur le Net !
Bonne fin de Journée
Amicalement
Jean marie
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16