patricktoulon
XLDnaute Barbatruc
bonjour a tous
je me suis fait une petite sub de tri par colonne (croissant ou décroissant) pour une listbox
en l’état elle fonctionne
mais il y a un truc qui me taraude et me fait des nœuds dans les cheveux
je suis obligé de faire un récursif du code (tri décroissant puis croissant) pour la trier en ordre croissant
sinon j'ai toujours l'index 0 qui reste en top
c'est un truc que je pige pas
le principe est simple c'est une double boucle imbriquée et elle démarre toute les deux a zéro
en commentaire vous verrez les anciennes lignes qui servaient a trier la listbox à 1 colonne et qui n'avait pas besoins de ce looping affreux
j'ai juste utilisé index pour mémoriser les lignes (I et A)entières au lieu de l'item(A,0)
que je replace dans une 3 eme boucle sur le nombre de colonne
bref le principe est on ne peut plus simple
le code
débloquez les lignes qui ont"*****" en commentaire pour que le tri croissant fonctionne
l'appel de la sub de tri
SortOrder ListBox1 , sens(1 ou 0) , colonne en base 1!!!!(1= colonne 0 de la listbox)
si quelqu'un peut m'expliquer pourquoi je suis obligé de faire cela, ça m’intéresse
je joins un petit fichier exemple
je me suis fait une petite sub de tri par colonne (croissant ou décroissant) pour une listbox
en l’état elle fonctionne
mais il y a un truc qui me taraude et me fait des nœuds dans les cheveux
je suis obligé de faire un récursif du code (tri décroissant puis croissant) pour la trier en ordre croissant
sinon j'ai toujours l'index 0 qui reste en top
c'est un truc que je pige pas
le principe est simple c'est une double boucle imbriquée et elle démarre toute les deux a zéro
en commentaire vous verrez les anciennes lignes qui servaient a trier la listbox à 1 colonne et qui n'avait pas besoins de ce looping affreux
j'ai juste utilisé index pour mémoriser les lignes (I et A)entières au lieu de l'item(A,0)
que je replace dans une 3 eme boucle sur le nombre de colonne
bref le principe est on ne peut plus simple
le code
débloquez les lignes qui ont"*****" en commentaire pour que le tri croissant fonctionne
VB:
'**********************************************************************************
'débloquez les lignes qui ont "*****" pour corriger l'erreur de l'item(0,colonne )!!!!!!!!!!!!!!!!!!!!!!!!!!!!
'**********************************************************************************
Sub SortOrder(LtBx, Optional sens As Long = 1, Optional col As Long = 1) 'sens=1 ordre croissant sens=0 ordre decroissant
Dim temp$, TbLA, TbLI, D&, A&, I&, Rev
col = col - 1
'If sens = 1 Then sens = 0: Rev = True '*****
're: '******
With LtBx
For I = 0 To .ListCount - 1
For A = 0 To .ListCount - 1
TbLA = Application.Index(.List(), A + 1, 0)
TbLI = Application.Index(.List(), I + 1, 0)
If sens = 1 Then
If .List(I, col) < .List(A, col) Then
'temp = .List(a, col): .List(a, col) = .List(i, col): .List(i, col) = temp'ancien tri sur colonne 0
For c = LBound(TbLA) To UBound(TbLA)
.List(I, c - 1) = TbLA(c): .List(A, c - 1) = TbLI(c)
Next
End If
Else
If .List(I, col) > .List(A, col) Then
'temp = .List(a, col): .List(a, col) = .List(i, col): .List(i, col) = temp'ancien tri sur colonne 0
For c = LBound(TbLA) To UBound(TbLA)
.List(I, c - 1) = TbLA(c): .List(A, c - 1) = TbLI(c)
Next
End If
End If
Next A
Next I
End With
'If Rev = True Then sens = 1: Rev = False: GoTo re '*****
End Sub
l'appel de la sub de tri
SortOrder ListBox1 , sens(1 ou 0) , colonne en base 1!!!!(1= colonne 0 de la listbox)
si quelqu'un peut m'expliquer pourquoi je suis obligé de faire cela, ça m’intéresse
je joins un petit fichier exemple
Pièces jointes
Dernière édition: