tri des valeurs d'une combobox

  • Initiateur de la discussion Initiateur de la discussion Herlay
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
924
Retour