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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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
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
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
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
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