Trier croissant listbox [Résolu]

Messages postés
69
Date d'inscription
mercredi 5 janvier 2005
Dernière intervention
15 septembre 2005
- 5 janv. 2005 à 19:34 - Dernière réponse :
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Dernière intervention
31 mars 2015
- 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
Afficher la suite 

14 réponses

Meilleure réponse
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Dernière intervention
31 mars 2015
- 6 janv. 2005 à 00:07
3
Merci
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

Merci Gobillot 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Dernière intervention
31 mars 2015
- 5 janv. 2005 à 19:38
0
Merci
et en mettant la propriété Sorted à True ?

Daniel
Messages postés
69
Date d'inscription
mercredi 5 janvier 2005
Dernière intervention
15 septembre 2005
- 5 janv. 2005 à 19:42
0
Merci
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?
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Dernière intervention
31 mars 2015
- 5 janv. 2005 à 19:53
0
Merci
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
Messages postés
69
Date d'inscription
mercredi 5 janvier 2005
Dernière intervention
15 septembre 2005
- 5 janv. 2005 à 19:59
0
Merci
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
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Dernière intervention
31 mars 2015
- 5 janv. 2005 à 20:06
0
Merci
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
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Dernière intervention
31 mars 2015
- 5 janv. 2005 à 20:19
0
Merci
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
Messages postés
3758
Date d'inscription
mardi 23 septembre 2003
Dernière intervention
13 mars 2006
- 5 janv. 2005 à 20:30
0
Merci
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
Messages postés
69
Date d'inscription
mercredi 5 janvier 2005
Dernière intervention
15 septembre 2005
- 5 janv. 2005 à 20:43
0
Merci
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 ..
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Dernière intervention
31 mars 2015
- 5 janv. 2005 à 21:00
0
Merci
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
Messages postés
3758
Date d'inscription
mardi 23 septembre 2003
Dernière intervention
13 mars 2006
- 5 janv. 2005 à 21:18
0
Merci
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
Messages postés
35
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
19 avril 2005
- 6 janv. 2005 à 11:22
0
Merci
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!!!)
Messages postés
69
Date d'inscription
mercredi 5 janvier 2005
Dernière intervention
15 septembre 2005
- 6 janv. 2005 à 13:14
0
Merci
Je vous remercie pour toutes vos réponses, elles m'ont beaucoup aidées pi j'ai appris des trucs aussi

tcho @ bientot ...

Lilie
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Dernière intervention
31 mars 2015
- 17 juin 2005 à 16:38
0
Merci
merci lilie

Daniel

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.