Trier croissant listbox

Résolu
liliesma Messages postés 69 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 15 septembre 2005 - 5 janv. 2005 à 19:34
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 - 17 juin 2005 à 16:38
Je débute seulement dans la programmation (je suis en 1ère année de BTS IG) et j'ai un TP de VB à faire, mais je n'arrive pas a faire un tri croissant dans une listbox de nombres choisis aléatoirement. Merci de m'aider...
Lilie

14 réponses

Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
6 janv. 2005 à 00:07
si je récapitule, il y a 3 ListBox et 2 boutons, la première ListBox n'est pas triée donc les nombres aléatoires apparaissent dans le désordre, ensuite en appuyant sur le premier bouton les nombres apparaissent en ordre décroissant dans la deuxième ListBox et si on appuie sur le deuxième bouton ils apparaissent en ordre croissant dans le troisième ListBox.
ici les nombres sont en doubles, les propriétés Sorted sont à False, aucune table n'est utilisée, le tri se fait par insertion directe dans la ListBox réceptrice

Private Sub Form_Load()
Dim i As Integer
Dim x As Double
For i = 1 To 100
x = Rnd * 15
List1.AddItem x
Next
End Sub


Private Sub Command1_Click()
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim x As Double
List2.Clear
List2.AddItem List1.List(0)
For i = 1 To List1.ListCount - 1
x = List1.List(i)
For j = 0 To List2.ListCount - 1
If x > List2.List(j) Then
x = List2.List(List2.ListCount - 1)
For k = List2.ListCount - 1 To j + 1 Step -1
List2.List(k) = List2.List(k - 1)
Next
List2.List(j) = List1.List(i)
Exit For
End If
Next
List2.AddItem x
' DoEvents
Next
End Sub


Private Sub Command2_Click()
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim x As Double
List3.Clear
List3.AddItem List1.List(0)
For i = 1 To List1.ListCount - 1
x = List1.List(i)
For j = 0 To List3.ListCount - 1
If x < List3.List(j) Then
x = List3.List(List3.ListCount - 1)
For k = List3.ListCount - 1 To j + 1 Step -1
List3.List(k) = List3.List(k - 1)
Next
List3.List(j) = List1.List(i)
Exit For
End If
Next
List3.AddItem x
' DoEvents
Next

End Sub

Daniel
3
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
5 janv. 2005 à 19:38
et en mettant la propriété Sorted à True ?

Daniel
0
liliesma Messages postés 69 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 15 septembre 2005
5 janv. 2005 à 19:42
en fait mon TP se décompose en 3 colonnes, dans la 1ère les nombres sont rentrés aléatoirement avec la fonction rnd, la 2ème le tri se fait décroissant à l'aide d'un bouton de commande et la 3ème le tri est croissant également à l'aide d'un bouton de commande...
mais la propriété Sorted ne se fait elle pas que dans une seule colonne?
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
5 janv. 2005 à 19:53
je crois bien que si
mais est ce que t'as déjà fait les tris dans les autres colonnes ?
et comment as tu fait ta ListBox multi colonnes ?
est tu obligé d'utiliser une ListBox ou peut tu prendre une ListView ?

Daniel
0

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

Posez votre question
liliesma Messages postés 69 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 15 septembre 2005
5 janv. 2005 à 19:59
on a vu que les listbox... j'ai créé 3 listboxles 2 listbox de tri sont vide, j'ai juste ma 1ère listbox qui est rempli avec ces fameux nombre aléatoire...
pour ce qui est de la propriété sorted, elle ne marche pa dans mon cas, car elle ne me trie que le premier chiffre ex :
15.568
24.56
5.169
51.27
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
5 janv. 2005 à 20:06
est ce que tu peux rajouter un nombre d'espaces ou de zéros devant chaque chiffre de façon à avoir le même nombre de caractères avant le point décimal.
ça dépend de ce que ton TP impose

Daniel
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
5 janv. 2005 à 20:19
je vois quelque chose comme çà:

Dim i As Integer
Dim x As Single

For i = 1 To 100
x = Rnd * 9999
List1.AddItem Format$(x, "0000.000")
Next

ou comme çà;

For i = 1 To 100
x = Rnd * 9999
List1.AddItem Space$(5 - Len(Str$(Int(x)))) & x
Next

Daniel
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 20
5 janv. 2005 à 20:30
Salut,

La propriété sorted d'une listbox trie du texte et non des chiffres, donc dans ton exemple, c'est bien trié vu par la listbox.
Le mieux est de trier avant d'inscrire dans la listbox..
Par ex, ranger tes valeurs aléatoires dans un tableau numérique que tu trieras avant de remplir la liste.

Cordialement, CanisLupus
0
liliesma Messages postés 69 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 15 septembre 2005
5 janv. 2005 à 20:43
Gobillot : ta première solution me semble faisable, mais pourquoi multiplie tu 9999 ? et puis le pb de réglé le format, c'est qu'il n'y a pa de format, il peut aussi bien y avoir 2 chiffres après la virgule que 5 ou 7...

CanisLupus : ta solution ne peut pas m'aidé, car il faut que dans ma première liste apparaisse les nombres dans le déosrdre...

je sais tout ça n'est pas très clair... masi je vous remercie de tenter de m'aider malgré tout ..
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
5 janv. 2005 à 21:00
j'ai pris 9999 pour exemple mais tu peux mettre ce que tu veux
avec Rnd tu peux pas avoir plus de 7 décimales mais ça dépend aussi par quoi tu multiplie.
Rnd*9999 ne dépassera jamais 9999 donc 4 chiffres devant suffisent

pour supprimer les zéros inutiles derrière:
List1.AddItem Format$(x, "0000.#######")

Daniel
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 20
5 janv. 2005 à 21:18
Si tes valeurs sont de type double, essaies ça :

Private Sub Command1_Click()
Dim tmp As String
Dim a As Integer
Dim b As Integer


For a = 0 To List1.ListCount - 2
For b = a + 1 To List1.ListCount - 1
If CDbl(List1.List(b)) < CDbl(List1.List(a)) Then
tmp = List1.List(a)
List1.List(a) = List1.List(b)
List1.List(b) = tmp
End If
Next
Next


End Sub

Comme ça, tu afficheras tes valeurs dans le désordre et elles ne seront triées que sur le clic du bouton.

Cordialement, CanisLupus
0
sakapatate Messages postés 35 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 19 avril 2005
6 janv. 2005 à 11:22
lulu

moi je pense ke le mieu c de mettre tes valeurs ds un tableau et de les trier!
une fois ke tas fait le tri tu les affiches dans la listbox!

l'avantage c ke tu utilises une procédure de tri! ensuite pour l'affichage c tout simple: tu affiche ton tableau soit dans un sens soit dans l'autre (tu utilises qu'une seule fois la procédure de tri!!!)
0
liliesma Messages postés 69 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 15 septembre 2005
6 janv. 2005 à 13:14
Je vous remercie pour toutes vos réponses, elles m'ont beaucoup aidées pi j'ai appris des trucs aussi

tcho @ bientot ...

Lilie
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
17 juin 2005 à 16:38
merci lilie

Daniel
0
Rejoignez-nous