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
'**************************
Voir ci dessous (me dire si je dois faire un fichier exemple)
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
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
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: