Tri liste de pays par ordre alphabetique dans un objet [Résolu/Fermé]

Signaler
Messages postés
15
Date d'inscription
jeudi 28 mai 2015
Statut
Membre
Dernière intervention
5 novembre 2015
-
Messages postés
15
Date d'inscription
jeudi 28 mai 2015
Statut
Membre
Dernière intervention
5 novembre 2015
-
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,

1 réponse

Messages postés
15272
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
13 août 2020
1 328
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
Messages postés
15
Date d'inscription
jeudi 28 mai 2015
Statut
Membre
Dernière intervention
5 novembre 2015

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
Messages postés
15272
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
13 août 2020
1 328 >
Messages postés
15
Date d'inscription
jeudi 28 mai 2015
Statut
Membre
Dernière intervention
5 novembre 2015

Re,

remplacez

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


par

Sub tri(a As Variant, gauc As Integer, droi As Integer)
Messages postés
15
Date d'inscription
jeudi 28 mai 2015
Statut
Membre
Dernière intervention
5 novembre 2015

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
Messages postés
15
Date d'inscription
jeudi 28 mai 2015
Statut
Membre
Dernière intervention
5 novembre 2015

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