Trier un tableau multicolonnes avec un contrôle listbox

Soyez le premier à donner votre avis sur cette source.

Snippet vu 11 723 fois - Téléchargée 28 fois

Contenu du snippet

Tout d'abord voilà le premier vrai code que je psote, alors soyez indulgents... =)
Ce code est en fait assez simple, il se contente de lit un tableau à plusieurs dimensions, extrait une des colonnes et la range dans un listbox DONT LA PROPRIÉTÉ SORTED EST A 1, puis la récupère et la remet dans le tableau, en faisant attention que les lignes du tableau initial restent conservées.
Mon code ne prend pas en charge la création du tableau, pour la simple et bonne raison qu'à l'origine j'ai écris ce code qd je ravailais sur les fichiers, donc je récupérais des données dans un fichier pour les écrire dans le tableau.

Source / Exemple :


'Déclaration des variables utilisées
Dim i, j, k As Integer
Dim table(10, 4) As String
Dim enlever As String
Dim temp As String

'On extrait la troisième colonne du tableau et on la range
'dans la listbox nommé list1
'   Celui-ci ayant sa propriété fixe "sorted" à "True", les éléments
'   seront classés par ordre alphabétique
For i = 0 To UBound(table) - 1
    List1.AddItem (table(i, 3) & i)
    i = i + 1
Next i

'On va maintenant réinjecter les éléments dans le tableau
'en prenant soin que les lignes tu tableau initial soient conservées
'   La variable temp est utile si la place de la ligne reste la même après le tri
For i = 0 To UBound(table) - 1
        If i < 10000 Then enlever = Right(List1.List(i), 4) And k = 4
        If i < 1000 Then enlever = Right(List1.List(i), 3) And k = 2
        If i < 100 Then enlever = Right(List1.List(i), 2) And k = 2
        If i < 10 Then enlever = Right(List1.List(i), 1) And k = 1
    
    temp = table(Val(enlever), 1)
    table(i, 1) = temp
    temp = table(Val(enlever), 2)
    table(i, 2) = temp
    temp = Left(List1.List(i), Len(List1.List(i)) - k)
    table(i, 3) = temp
    temp = table(Val(enlever), 4)
    table(i, 4) = table(Val(enlever), 4)
Next i

'Afin de pouvoir trier une seconde fois sans quitter le prog
'il faut vider la listbox
For i = 0 To UBound(table) - 1
    List1.RemoveItem (0)
Next i

Conclusion :


COmme vous pouvez le voir le code est simple à comprendre, quoiqu'un minimum à savoir sur les listbox et leur propriétés est le bienvenu
J'attends vos critiques, car je sais que l'on doit pouvoir faire mieux, car c'est toujours possible =)

@ bientôt
DaCaillou

A voir également

Ajouter un commentaire

Commentaires

Messages postés
4030
Date d'inscription
mardi 13 mai 2003
Statut
Modérateur
Dernière intervention
23 décembre 2008
21
Un truc con : Et si UBound(table)>=1000000 ?

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.