Tri liste de pays par ordre alphabetique dans un objet
Résolu
Jojos54
Messages postés
15
Statut
Membre
-
Jojos54 Messages postés 15 Statut Membre -
Jojos54 Messages postés 15 Statut Membre -
Bonjour,
j'ai une fonction qui me récupere une liste de pays sans doublon à partir d'une feuille excel. Je recupère cette liste et l'intègre dans une combobox
Cependant je n'arrive pas à trier ma liste par ordre alphabetique
Ci dessous le code actuel qui fonctionne mais sans tri
Private Sub Liste_country2() 'à l'initialisation de l'UserForm
Dim i, As Long 'déclare la variable I (Incrément)
Dim d As Object 'déclare la variable D (Dictionnaire)
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TC As Variant 'déclare la variable TC (Tableau de Cellules)
Set O = Sheets("work orders temp") 'définit l'onglet O
TC = O.Range("H5:H" & O.Range("H65000").End(xlUp).Row)
Set d = CreateObject("Scripting.Dictionary") 'définit le dictionanire D
For i = 1 To UBound(TC) 'boucle sur toutes les lignes I du tableau de cellules TC (en partant de la seconde)
d(TC(i, 1)) = "" 'alimente le dictionnaire D
Next i 'prochaine ligne de la boucle
Me.ComboBox8.list = d.keys 'alimente la Combobox8 avec la liste des éléments du dictionnaire D sans doublons
end sub
J'ai vu a plusieurs endroit des fonctions de Tri quicksort shellsort, mais je n'arrive pas à les appliquer pour info le lien http://boisgontierjacques.free.fr/pages_site/tableaux.htm#filtrecoltab
Merci de votre aide,
j'ai une fonction qui me récupere une liste de pays sans doublon à partir d'une feuille excel. Je recupère cette liste et l'intègre dans une combobox
Cependant je n'arrive pas à trier ma liste par ordre alphabetique
Ci dessous le code actuel qui fonctionne mais sans tri
Private Sub Liste_country2() 'à l'initialisation de l'UserForm
Dim i, As Long 'déclare la variable I (Incrément)
Dim d As Object 'déclare la variable D (Dictionnaire)
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TC As Variant 'déclare la variable TC (Tableau de Cellules)
Set O = Sheets("work orders temp") 'définit l'onglet O
TC = O.Range("H5:H" & O.Range("H65000").End(xlUp).Row)
Set d = CreateObject("Scripting.Dictionary") 'définit le dictionanire D
For i = 1 To UBound(TC) 'boucle sur toutes les lignes I du tableau de cellules TC (en partant de la seconde)
d(TC(i, 1)) = "" 'alimente le dictionnaire D
Next i 'prochaine ligne de la boucle
Me.ComboBox8.list = d.keys 'alimente la Combobox8 avec la liste des éléments du dictionnaire D sans doublons
end sub
J'ai vu a plusieurs endroit des fonctions de Tri quicksort shellsort, mais je n'arrive pas à les appliquer pour info le lien http://boisgontierjacques.free.fr/pages_site/tableaux.htm#filtrecoltab
Merci de votre aide,
1 réponse
-
Bonjour,
Private Sub Liste_country2() 'à l'initialisation de l'UserForm Dim i As Long 'déclare la variable I (Incrément) Dim d As Object 'déclare la variable D (Dictionnaire) Dim O As Worksheet 'déclare la variable O (Onglet) Dim TC As Variant 'déclare la variable TC (Tableau de Cellules) Dim TMP Set O = Sheets("work orders temp") 'définit l'onglet O TC = O.Range("H5:H" & O.Range("H65000").End(xlUp).Row) Set d = CreateObject("Scripting.Dictionary") 'définit le dictionanire D For i = 1 To UBound(TC) 'boucle sur toutes les lignes I du tableau de cellules TC (en partant de la seconde) d(TC(i, 1)) = "" 'alimente le dictionnaire D Next i 'prochaine ligne de la boucle '----------------------------- TMP = d.keys 'Table sans doublon Call tri(TMP, LBound(TMP, 1), UBound(TMP, 1)) 'tri alphabétique '---------------------------- Me.ComboBox8.List = TMP 'alimente la Combobox8 avec la liste des éléments du dictionnaire D sans doublons End Sub-
Bonjour, merci pour ta réponse,
Actuellement je n'ai pas la fonction tri,
J'ai tenté de copié celle-ci dans mon code
Sub tri(a() As Double, gauc, droi) ' Quick sort
ref = a((gauc + droi) \ 2)
g = gauc: d = droi
Do
Do While a(g) < ref: g = g + 1: Loop
Do While ref < a(d): d = d - 1: Loop
If g <= d Then
temp = a(g): a(g) = a(d): a(d) = temp
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call tri(a, g, droi)
If gauc < d Then Call tri(a, gauc, d)
End Sub
mais j'ai une incompatibilté de type alors au niveau de la ligneCall tri(TMP, LBound(TMP, 1), UBound(TMP, 1)) 'tri alphabétique
tableau ou type défini par l'utilisateur attendu -
Donc la fonction tri demarre bien comme il faut cependant j'ai une erreur plus tard lors de l'exécution de la fonction
type d'argument byref incompatibleSub tri(a As Variant, gauc As Integer, droi As Integer) ' Quick sort
Dim ref
Dim g, d As Integer
Dim temp
ref = a((gauc + droi) \ 2)
g = gauc: d = droi
Do
Do While a(g) < ref: g = g + 1: Loop
Do While ref < a(d): d = d - 1: Loop
If g <= d Then
temp = a(g): a(g) = a(d): a(d) = temp
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call tri(a, g, droi) 'erreur ici sur g
If gauc < d Then Call tri(a, gauc, d)
End Sub -
-