nickam
Messages postés2Date d'inscriptionmardi 21 décembre 2004StatutMembreDernière intervention22 décembre 2004
-
21 déc. 2004 à 21:45
nickam
Messages postés2Date d'inscriptionmardi 21 décembre 2004StatutMembreDernière intervention22 décembre 2004
-
22 déc. 2004 à 09:13
Bonjour,
Je suis débutant dans le milieu de la programmation VB et j'ai besoin d'aide pour résoudre une problème insurmopntable. Mon problème est que j'ai un tableau contenant des valeurs alphanumériques tel que :
1
2a
15
22
30b
99
99a
100L
bref, les valeurs sont des nombres (entre 1 et 1000) suivi, dans certains cas, d'une lettre.
Je désire avoir une fonction qui me permet de mettre en ordre croissant ces valeurs, comme il est présenté dans la liste ci-haut et que cette fonction me retoutrne le tableau classé. Je n'ai pas besoin que la fonction soit sensible aux majuscules.
La plupart des tri que j'ai trouvé me donne ce genre de résultats:
1
100L
15
22
2a
30b
99
99a
Est-ce que quelqu'un à deja rencontrer se genre de problème ou bien qu'il aurait une solution pour moi?
Merci à tous
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 22 déc. 2004 à 04:09
Salut nickam
Je suppose que tes données sont dans un tableau.
Une solution toute simple consiste à données ces données à digérer à une ListBox :
Tu places une ListBox sur ta feuille.
Tu la rends invisible en mode run en mettant sa propriété
ListBox.Visible = False
Quand tu veux trier tes données, tu les écris dedans :
ListBox.Clear ' vide la liste
ListBox.Sorted = False ' fais gagner du temps
For r = 1 to NbDeValeurs
ListBox.AddItem CStr(Tableau(r))
Next r
Ensuite, tu ordonnes à la liste de se classer :
ListBox.Sorted = True
DoEvents ' lui donne le temps de le faire
Il n'y a plus qu'à récupérer les données dans le tableau, dans l'ordre du classement :
' Vide le tableau
Redim Tableau(ListBox.ListCount - 1) ' -1 car le 1er est l'index 0
For r = 0 to ListBox.ListCount - 1
Tableau (r+1) = ListBox.List(r)
Next r
Vala
Jack
NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
nickam
Messages postés2Date d'inscriptionmardi 21 décembre 2004StatutMembreDernière intervention22 décembre 2004 22 déc. 2004 à 09:13
merci ça marche!!!. J'ai utilisé la fonction que j'avais deja et je l'ai modifié grace à la proposition de Gobillot.
Merci beaucoup à tous.
voici la fonction que j'ai utilisé:
Public Function sortarray(ByRef TheArray As Variant)
Dim sorted As Boolean
Dim x As Integer
Dim temp As Variant
sorted = False
Do While Not sorted
sorted = True
For x = 0 To UBound(TheArray) - 1
If Val(TheArray(x)) > Val(TheArray(x + 1)) Then
temp = TheArray(x + 1)
TheArray(x + 1) = TheArray(x)
TheArray(x) = temp
sorted = False
End If
Next x
Loop
End Function