Tri liste de pays par ordre alphabetique dans un objet

Résolu/Fermé
Jojos54 Messages postés 15 Date d'inscription jeudi 28 mai 2015 Statut Membre Dernière intervention 5 novembre 2015 - 4 nov. 2015 à 17:07
Jojos54 Messages postés 15 Date d'inscription jeudi 28 mai 2015 Statut Membre Dernière intervention 5 novembre 2015 - 5 nov. 2015 à 11:36
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,

A voir également:

1 réponse

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
5 nov. 2015 à 08:30
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
0
Jojos54 Messages postés 15 Date d'inscription jeudi 28 mai 2015 Statut Membre Dernière intervention 5 novembre 2015
5 nov. 2015 à 09:39
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 ligne
Call tri(TMP, LBound(TMP, 1), UBound(TMP, 1)) 'tri alphabétique

tableau ou type défini par l'utilisateur attendu
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701 > Jojos54 Messages postés 15 Date d'inscription jeudi 28 mai 2015 Statut Membre Dernière intervention 5 novembre 2015
5 nov. 2015 à 09:51
Re,

remplacez

Sub tri(a() As Double, gauc, droi) ' Quick sort


par

Sub tri(a As Variant, gauc As Integer, droi As Integer)
0
Jojos54 Messages postés 15 Date d'inscription jeudi 28 mai 2015 Statut Membre Dernière intervention 5 novembre 2015
Modifié par Jojos54 le 5/11/2015 à 11:03
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 incompatible
Sub 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
0
Jojos54 Messages postés 15 Date d'inscription jeudi 28 mai 2015 Statut Membre Dernière intervention 5 novembre 2015
5 nov. 2015 à 11:36
bon j'ai redéfini mes variable et ça marche nickel pour info donc juste modifier mon sub tri() en déclarant

Dim ref
Dim g As Long
Dim d As Long
Dim temp

Merci de ton aide f89009
0