trier une listbox multicolonnes ?

papapaul

XLDnaute Impliqué
Bonjour forum, :)
Dans un USF, j'ai une listbox3 à 2 colonnes. Les données récupérées
ne sont pas triées. J'ai mis un bouton tri avec le code ci-dessous
mais ca fait le tri que sur la première colonne de la listbox.
Comment faire pour que ca tri les 2 colonnes
comme quand dans excel on fait :
Données, Trier, Etendre la sélection

A tous Merci d'avance


Private Sub CommandButton1_Click()
With ListBox3
For I = 0 To .ListCount - 1
For J = 0 To .ListCount - 1
If IsNumeric(.List(I)) Then
ListI = CDbl(.List(I))
Else
ListI = .List(I)
End If
If IsNumeric(.List(J)) Then
ListJ = CDbl(.List(J))
Else
ListJ = .List(J)
End If
If ListI < ListJ Then
temp = .List(I)
.List(I) = .List(J)
.List(J) = temp
End If
Next J
Next I
End With
End Sub
 

skoobi

XLDnaute Barbatruc
Re : trier une listbox multicolonnes ?

Bonjour papapaul,

En bleu les ajouts, à tester:

Code:
        If ListI < ListJ Then
          temp = .List(I)
[B][COLOR=Blue]          temp2 = .List(I, 1)[/COLOR][/B]
          .List(I) = .List(J)
          .List(J) = temp
[B][COLOR=Blue]          .List(I, 1) = .List(J, 1)
          .List(J, 1) = temp2[/COLOR][/B]
        End If
 

papapaul

XLDnaute Impliqué
Re : trier une listbox multicolonnes ?

:) Skoobi, 1 fois de +, je suis sur le C..:eek:
Ca a l'air si simple, comment fais tu ??
En tout cas, j'ai testé, apparemment, c'est tout à fait ça !!
Ca fait des jours et des nuits que je patauge lamentablement
et hop, te voila !!:D
Plus que 10 000 mercis.
Plus que content je suis,
Longue vie à toi et au Forum.
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : trier une listbox multicolonnes ?

Bonjour,

Tri ListBox rapide

http://boisgontierjacques.free.fr/fichiers/Formulaire/FormTriListBox.xls

Code:
Private Sub LTriNom_Click()
   Dim a()
   a = Me.ListBox1.List
   NbCol = UBound(a, 2) - LBound(a, 2) + 1
   Call tri(a(), LBound(a), UBound(a), NbCol, 0)
   Me.ListBox1.List = a
End Sub

Sub tri(a(), gauc, droi, NbCol, colTri)        ' Quick sort
 ref = a((gauc + droi) \ 2, colTri)
 g = gauc: d = droi
 Do
     Do While a(g, colTri) < ref: g = g + 1: Loop
     Do While ref < a(d, colTri): d = d - 1: Loop
     If g <= d Then
       For c = 0 To NbCol - 1
         temp = a(g, c): a(g, c) = a(d, c): a(d, c) = temp
       Next
       g = g + 1: d = d - 1
     End If
 Loop While g <= d
 If g < droi Then Call tri(a, g, droi, NbCol, colTri)
 If gauc < d Then Call tri(a, gauc, d, NbCol, colTri)
End Sub

JB
Formation Excel VBA JB
 
Dernière édition:

papapaul

XLDnaute Impliqué
Re : trier une listbox multicolonnes ?

:) Bonjour Boisgontier, merci beaucoup,

Je viens d'essayer, ca marche aussi !!
Faut juste mettre les codes dans mon bouton
qui demande le tri.

Petite question quand même :
Cette écriture est trop complexe pour moi,:confused:
je n'utilise pratiquement jamais les : loop, do while etc..
Ma listbox n'a que 2 colonnes,
ta méthode fonctionne.
Cela fonctionnera t'il si il y en a 5 ou 6 ou + ?

Je vais essayer mais il va me falloir du temps.

Amitiés;)
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : trier une listbox multicolonnes ?

Bonjour,

Sur l'exemple en PJ, il y a 3 colonnes.
Il faut spécifier la colonne de tri (0,1,2,...) dans

Call tri(a(), LBound(a), UBound(a), NbCol, 1)

Code:
Private Sub LTriVille_Click()
   Dim a()
   a = Me.ListBox1.List
   NbCol = UBound(a, 2) - LBound(a, 2) + 1
   Call tri(a(), LBound(a), UBound(a), NbCol, [B][COLOR="Red"]1[/COLOR][/B])
   Me.ListBox1.List = a
End Sub


JB
 

Pièces jointes

  • FormTriListBox.zip
    43.1 KB · Affichages: 350

papapaul

XLDnaute Impliqué
Re : trier une listbox multicolonnes ?

:) Bonjour Boisgontier, Forum
Matinal et génial.
Je comprends mieux
Je suis vraiment plus qu'impressionné:eek:
et un peu effrayé par le boulot qui m'attends
pour arriver à faire de tels prodiges.

Merci encore ;)
 

ChTi160

XLDnaute Barbatruc
Re : trier une listbox multicolonnes ?

Salut Papapaul
Bonjour le Fil
Bonjour le Forum

Arff du très beau travail ,comme dab lol

je me suis dis pourquoi ,ne pas trier les données dans la feuille plutôt que dans la listbox
Si l'on connait la colonne de tri ,on tri les données dans le feuille source puis on charge la listbox ,vous allez me dire trop simple ARfffffffffffffff !!!!!! Lol

Bonne journée à tous

Ps : Un merci particulier à JB qui m'apporte , comme à beaucoup de quoi avancer
 

papapaul

XLDnaute Impliqué
Re : trier une listbox multicolonnes ?

Bonjour Chti,:)
Et oui, trop simple, c'est que ma listbox en question
est alimenté par une sélection manuelle dans
une autre listbox. Cette autre listbox est elle-même
alimentée par une recherche dans 1 ou +ieurs feuilles.
1 tri préalable sur les feuilles serait donc inutile.
Le but du jeu est de trier le résultat de la listbox
finale et de recopier le résultat dans une nouvelle feuille,
pour éventuellement imprimer ou faire des RecherchesV,
concaténer, etc...
Grace à skoobi, JB et tout le forum, j'ai réussi. :p

Moi et mes Usines à Gaz, je te raconte pas.:eek:

Mais quand ça tourne, quel pied §§§
Bonne journée.;)
 

Discussions similaires

Réponses
4
Affichages
234
Réponses
17
Affichages
924

Statistiques des forums

Discussions
312 544
Messages
2 089 452
Membres
104 167
dernier inscrit
nourisebai