tri des valeurs d'une combobox

Herlay

XLDnaute Junior
Bonjour le Forum,

Je sais, je sais, beaucoup vont dire " sujet vu et revu". J'en ai trouvé plein de discussions sur le tri dans une combobox, mais je n'ai pas réussi à les appliquer à mon code.

Ma combobox (déclarée en New collection) est alimentée par le code suivant :

Code:
For Each cel1 In Sheets("Données").Range("A2:A" & Sheets("Données").Range("A65536").End(xlUp).Row)
   On Error Resume Next
   CollecNumCli.Add cel1.Value, CStr(cel1.Value)
Next cel1
For x = 1 To CollecNumCli.Count
    CB_numcli.AddItem CollecNumCli(x)
Next x

Le code supprime les doublons, mais ne tri pas les données (Numéros).
De plus cette combo est liée à une autre combo (Noms) qui elle est triée par ordre alpha, puisque les données sont déjà triées dans la feuille.

Si quelqu'un pouvait m'aider à résoudre ce tri dans l'affichage de la list.

Merci d'avance

Herlay
 

Herlay

XLDnaute Junior
Re : tri des valeurs d'une combobox

Re bonjour Le Forum, bonjour Jacques,

Merci pour ton lien, mais il est déjà mon livre de chevet depuis quelques jours !!!

j'ai essayé d'adapter le code
Code:
Private Sub UserForm_Initialize()
  Set f = Sheets("données")
  Dim temp()
  n = 0
  For i = 2 To f.[A65000].End(xlUp).Row
     If f.Cells(i, 1) <> "" Then
       n = n + 1
       ReDim Preserve temp(1 To n)
       temp(n) = f.Cells(i, 1)
     End If
   Next i
   Call tri(temp, LBound(temp), UBound(temp))
   Me.CB_numcli.List = temp
End Sub

Sub tri(a(), 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

le résultat fait bien le tri mais ne supprime plus les doublons.

Merci
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : tri des valeurs d'une combobox

Code:
Private Sub UserForm_Initialize()
   Set MonDico = CreateObject("Scripting.Dictionary")
   For Each c In Range([A2], [A65000].End(xlUp))
     If c.Value <> "" Then MonDico.Item(c.Value) = c.Value
   Next c
   temp = MonDico.items
   Call Tri(temp, LBound(temp), UBound(temp))
   Me.ComboBox1.List = temp
End Sub

Sub Tri(a, 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

http://boisgontierjacques.free.fr/fichiers/ListeSansDoublonsDictionaire.xls
Listes sans doublons triée

JB
 

Discussions similaires

Réponses
11
Affichages
346
Réponses
2
Affichages
175
Réponses
4
Affichages
231

Statistiques des forums

Discussions
312 453
Messages
2 088 555
Membres
103 881
dernier inscrit
malbousquet