OVH Cloud OVH Cloud

classement alphabétique dans une combobox

2 réponses
Avatar
indy
Bonsoir,

J'ai rentré ce programme dans sub initialize, pour récupérer mes données
dans une combobox dans un userform, il me supprime bien les doublons, mais
il ne tri pas dans l'ordre alpabétique.......

J'ai vraiment du louper quelque chose....

Merci pour vos solutions.


Dim Table As Scripting.Dictionary
Dim i&, j&, Valide As Boolean, B As Variant

Set Table = New Scripting.Dictionary
j = 0
With Sheets("RECAP") '
For Each B In .Range("A2:A" & .Range("A1").End(xlDown).Row)
Valide = True
If IsError(B) Then
Valide = False ' on n'y met pas les valeurs d'erreur
ElseIf Len(B) = 0 Then
Valide = False
ElseIf Table.Exists(B.Value) Then
Valide = False
End If
If Valide Then Table.Add B.Value, j: j = j + 1 'rajoute
Next
End With
For i = 0 To Table.Count - 1
Debug.Print Table.Keys(i)
CBOCLT.AddItem (Table.Keys(i))
Next i
Set Table = Nothing ' Nettoyage

2 réponses

Avatar
JB
Bonsoir,

Liste avec doublons en colonne A:

Private Sub UserForm_Initialize()
Set MonDico = CreateObject("Scripting.Dictionary")
For Each c In Range([A2], [A65000].End(xlUp))
If Not MonDico.Exists(c.Value) Then MonDico.Add c.Value, c.Value
Next c
temp = MonDico.items
Call Tri(temp, LBound(temp), UBound(temp)) ' voir module mod_tri
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

Cordialement JB


Bonsoir,

J'ai rentré ce programme dans sub initialize, pour récupérer mes do nnées
dans une combobox dans un userform, il me supprime bien les doublons, mais
il ne tri pas dans l'ordre alpabétique.......

J'ai vraiment du louper quelque chose....

Merci pour vos solutions.


Dim Table As Scripting.Dictionary
Dim i&, j&, Valide As Boolean, B As Variant

Set Table = New Scripting.Dictionary
j = 0
With Sheets("RECAP") '
For Each B In .Range("A2:A" & .Range("A1").End(xlDown).Row)
Valide = True
If IsError(B) Then
Valide = False ' on n'y met pas les valeurs d'erreur
ElseIf Len(B) = 0 Then
Valide = False
ElseIf Table.Exists(B.Value) Then
Valide = False
End If
If Valide Then Table.Add B.Value, j: j = j + 1 'rajoute
Next
End With
For i = 0 To Table.Count - 1
Debug.Print Table.Keys(i)
CBOCLT.AddItem (Table.Keys(i))
Next i
Set Table = Nothing ' Nettoyage


Avatar
JB
http://cjoint.com/?jBxjRRGoBb

JB

Bonsoir,

J'ai rentré ce programme dans sub initialize, pour récupérer mes do nnées
dans une combobox dans un userform, il me supprime bien les doublons, mais
il ne tri pas dans l'ordre alpabétique.......

J'ai vraiment du louper quelque chose....

Merci pour vos solutions.


Dim Table As Scripting.Dictionary
Dim i&, j&, Valide As Boolean, B As Variant

Set Table = New Scripting.Dictionary
j = 0
With Sheets("RECAP") '
For Each B In .Range("A2:A" & .Range("A1").End(xlDown).Row)
Valide = True
If IsError(B) Then
Valide = False ' on n'y met pas les valeurs d'erreur
ElseIf Len(B) = 0 Then
Valide = False
ElseIf Table.Exists(B.Value) Then
Valide = False
End If
If Valide Then Table.Add B.Value, j: j = j + 1 'rajoute
Next
End With
For i = 0 To Table.Count - 1
Debug.Print Table.Keys(i)
CBOCLT.AddItem (Table.Keys(i))
Next i
Set Table = Nothing ' Nettoyage