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
33
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
33
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
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Membre
Dernière intervention
3 février 2018
49
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
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Membre
Dernière intervention
3 février 2018
49
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