OVH Cloud OVH Cloud

Trier une collection

2 réponses
Avatar
Jacques
Bonjour,

J'ai créé une collection et je voudrais que celle-ci soit trié par ordre
alphabétique.
exemple :

Tabl = Array("xxxx", "gggg", "aaaa", "jjjj", "kkkk")
Set Tabl2 = CreateObject("Scripting.Dictionary")
i = 0
j = 0
For Each Item In Tabl
Tabl2.Add j, Tabl(i)
i = i + 1
j = j + 1
Next Item

'trier la collecion Tabl2


Comment faire ?

Jacques

2 réponses

Avatar
Yvan
Bonjour Jacques.

Il existe quantité d'algorithmes de tri disponibles.

Pour ma part, j'aime bien Quicksort, dont tu trouveras le principe et de
multiples versions sur le Net.

Tu peux essayer çà:


Public Sub Quicksort(ListeVal() As Variant, ByVal iMin As Long, ByVal iMax As
Long)
Dim VCourant As Variant, iHaut As Long, iBas As Long, i As Long

If iMin >= iMax Then Exit Sub
i = (iMax + iMin) / 2
VCourant = ListeVal(i)

ListeVal(i) = ListeVal(iMin)

iBas = iMin
iHaut = iMax
Debut:
While ListeVal(iHaut) > VCourant And iHaut > iBas
iHaut = iHaut - 1
Wend
If iHaut <= iBas Then
ListeVal(iBas) = VCourant
GoTo Suite
End If

ListeVal(iBas) = ListeVal(iHaut)
iBas = iBas + 1
While ListeVal(iBas) < VCourant And iBas < iHaut
iBas = iBas + 1
Wend
If iBas >= iHaut Then
iBas = iHaut
ListeVal(iHaut) = VCourant
GoTo Suite
End If
ListeVal(iHaut) = ListeVal(iBas)
GoTo Debut
Suite:
Quicksort ListeVal(), iMin, iBas - 1
Quicksort ListeVal(), iBas + 1, iMax
End Sub




Public Sub Test()
Dim Tabl() As Variant, i As Long
Tabl = Array("xxxx", "gggg", "aaaa", "jjjj", "kkkk")
Call Quicksort(Tabl, 0, UBound(Tabl, 1))
For i = 0 To UBound(Tabl, 1)
Debug.Print Tabl(i)
Next i
End Sub


@+

Yvan


"Jacques" a écrit dans le message de news:
432fa3a1$0$7855$
Bonjour,

J'ai créé une collection et je voudrais que celle-ci soit trié par ordre
alphabétique.
exemple :

Tabl = Array("xxxx", "gggg", "aaaa", "jjjj", "kkkk")
Set Tabl2 = CreateObject("Scripting.Dictionary")
i = 0
j = 0
For Each Item In Tabl
Tabl2.Add j, Tabl(i)
i = i + 1
j = j + 1
Next Item

'trier la collecion Tabl2


Comment faire ?

Jacques



Avatar
CB
Yvan wrote:
[...]
Tabl = Array("xxxx", "gggg", "aaaa", "jjjj", "kkkk")
Call Quicksort(Tabl, 0, UBound(Tabl, 1))
For i = 0 To UBound(Tabl, 1)
[...]

J'ai créé une collection et je voudrais que celle-ci soit trié par ordre
alphabétique.
exemple :
[...]


'trier la collecion Tabl2
Jacques



Je pense que Jacques veut trier son tableau associatif Tabl2, et non pas
son tableau tout court Tabl.

Ce n'est pas possible, de par la nature des tableaux associatifs.
Il faut d'abord recopier les clés dans un tableau classique :
Exemple :
Dim Dict As Object
'Créer le tableau associatif
Set Dict = CreateObject("Scripting.Dictionary")

Dim aKeys
Dict.Add "fruit", "Bon"
Dict.Add "cigarette", "Pas bon"
'Récupérer toutes les clés du tableau associatif :
aKeys = Dict.Keys

Puis trier aKeys avec l'algo proposé par Yvan par exemple
Puis te servir de aKeys pour parcourir Dict.
For i = 0 To UBound(aKeys)
Debug.Print Dict.Item(aKeys(i))
Next

Bye.
CB