Tri dans une list box

Résolu
luca62 Messages postés 56 Date d'inscription dimanche 26 décembre 2004 Statut Membre Dernière intervention 4 août 2005 - 29 juil. 2005 à 22:34
luca62 Messages postés 56 Date d'inscription dimanche 26 décembre 2004 Statut Membre Dernière intervention 4 août 2005 - 30 juil. 2005 à 09:17
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

Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
30 juil. 2005 à 00:47
à 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
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
29 juil. 2005 à 23:04
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
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
29 juil. 2005 à 23:27
il manque un petit Randomize à l'exemple de Gobillot
sinon, l'idée du Space(...), je trouve çà pas mal ;)
PCPT
0
luca62 Messages postés 56 Date d'inscription dimanche 26 décembre 2004 Statut Membre Dernière intervention 4 août 2005
29 juil. 2005 à 23:46
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
30 juil. 2005 à 00:54
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
0
luca62 Messages postés 56 Date d'inscription dimanche 26 décembre 2004 Statut Membre Dernière intervention 4 août 2005
30 juil. 2005 à 09:17
Merci merci à vous. Cela fonctionne comme je le voulais maintenant....

Bonne journée à vous.

Luca62.
0
Rejoignez-nous