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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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" <jj@free.fr> a écrit dans le message de news:
432fa3a1$0$7855$8fcfb975@news.wanadoo.fr...
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
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
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
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
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