Tri de tableau alphanumérique

nickam Messages postés 2 Date d'inscription mardi 21 décembre 2004 Statut Membre Dernière intervention 22 décembre 2004 - 21 déc. 2004 à 21:45
nickam Messages postés 2 Date d'inscription mardi 21 décembre 2004 Statut Membre Dernière intervention 22 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

Nick

4 réponses

cs_developper_man Messages postés 13 Date d'inscription mardi 30 septembre 2003 Statut Membre Dernière intervention 22 février 2012
22 déc. 2004 à 00:19
oui c'est normal, parce que c'est un tri de texte et pas des nombre

alors si tu veut avoir ce type de tri
1
2a
15
22
30b
99
99a
100L

il faut separer le texte avec les chifre et trier
je vais essayer de faire la fonction
a+

noureddine el ghaouti
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
22 déc. 2004 à 00:50
une proposition pour avoir la valeur numérique:

If ("100L") < ("15") Then MsgBox "100L inférieur à 15"

If Val("100L") > Val("15") Then MsgBox "100L supérieur à 15"

Daniel
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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)
0
nickam Messages postés 2 Date d'inscription mardi 21 décembre 2004 Statut Membre Dernière intervention 22 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
0
Rejoignez-nous