Tri dans une list box [Résolu]

Signaler
Messages postés
56
Date d'inscription
dimanche 26 décembre 2004
Statut
Membre
Dernière intervention
4 août 2005
-
Messages postés
56
Date d'inscription
dimanche 26 décembre 2004
Statut
Membre
Dernière intervention
4 août 2005
-
Voilà le décor :

J'ai 42 nombres (à trois chiffres) à trié par ordre croissant. Ces 42 nombres sont définis par l'intermédiaire que 42 cases (lblBoules) et à chaque case est lié une boules (donc un nombre de 1 à 42 [X$(i)])
Donc exemple de phrase que j'obtient dans la liste box : 341 fois 42, 354 fois 4, ect ...
Le texte s'affiche correctement dans la liste box mais j'aimerais faire un tri que je n'arrive pas en l'occurence, sur ces fameux nombres à trois chiffres (lblboules) .... Est ce que vous pouvez me dire ou je me trompe... Merci. Voici mon code...

' Tri
Dim X$(42)
Dim Z$(42)
Dim Y(42)

For i = 0 To 41
X$(i) = lblBoules(i)
Y(i) = i + 1
Z$(i) = X$(i) & " fois " & Y(i)
lstTri.AddItem Z$(i)
Next i


' Tri par ordre croissant

For i = 0 To 40
For j = i + 1 To 41
If Val(lstTris.Itemdata.X$(i)) < Val(lstTris.Itemdata.X$(j)) Then
k = X$(i)
X$(i) = X$(j)
X$(j) = k
l = Y(i)
Y(i) = Y(j)
Y(j) = l
End If
Next j
Next i

For i = 0 To 41
Y(i) = i + 1
Z$(i) = X$(i) & " fois " & Y(i)
lstTri.AddItem Z$(i)
Next i

Voilà... Merci d'avance.

Luca62

6 réponses

Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
29
à moins de prendre une ListView

la ListBox n'a pas de tri descending

on peut pas non plus supprimer la propriété sorted

la solution c'est de prendre 2 ListBox



For i = List1.ListCount - 1 To 0 Step -1

List2.AddItem List1.List(i)

Next


Daniel
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 179 internautes nous ont dit merci ce mois-ci

Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
29
Pourquoi ne pas utiliser le tri de la ListBox



' faut mettre la propriété Sorted à True dans VB

' List1.Sorted = True





Dim i As Integer

Dim x As String

Dim lblboules(41) As String



'pour les besoins du test

For i = 0 To 41

lblboules(i) = Int(Rnd * 1000)

Next



For i = 0 To 41

x = lblboules(i)

List1.AddItem Space$(3 - Len(x)) & x & " fois " & (i + 1)

Next i


Daniel
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
43
il manque un petit Randomize à l'exemple de Gobillot
sinon, l'idée du Space(...), je trouve çà pas mal ;)
PCPT
Messages postés
56
Date d'inscription
dimanche 26 décembre 2004
Statut
Membre
Dernière intervention
4 août 2005

Merci, c'est un paramère des listes box que je ne connaissais pas. Mais y at-il moyen de classe du plus grand au plus petit au lieu du plus petit au plus grand ?

Merci.

Luca62.
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
43
non.
dans ce cas, tu dois trier un premier tableau, et tu incrémentes la list en partant de la fin

For i = Ubound(MonTableau) to 0 Step -1
List.AddItem Space$(3 - Len(Cstr(MonTableau(i)))) & MonTableau(i) & " fois " & (i + 1)
next i

PCPT
Messages postés
56
Date d'inscription
dimanche 26 décembre 2004
Statut
Membre
Dernière intervention
4 août 2005

Merci merci à vous. Cela fonctionne comme je le voulais maintenant....

Bonne journée à vous.

Luca62.