Alimentation Combobox
Bonjour à tous,
j'ai une Combobox dans une userform.
Je souhaiterais alimenter celle-ci avec deux colonnes excel de deux feuilles différentes.
1ere colonne: feuille1/ligne 3/colonne A jusqu'à ligne 9999
2eme colonne: feuille2/ligne 3/colonne B jusqu'à ligne 9999
Le tout sans doublons numérique et dans l'ordre croissant.
Pouvez vous m'aider.
cordialement,
Merci à vous tous
Bonjour,
Dim f, dico
Private Sub UserForm_Initialize()
Set f = Sheets("BD")
Set dico = CreateObject("Scripting.Dictionary")
For Each c In f.Range("A2:A" & f.[A65000].End(xlUp).Row)
dico(c.Value) = ""
Next c
Set f = Sheets("BD2")
For Each c In f.Range("B2:B" & f.[B65000].End(xlUp).Row)
dico(c.Value) = ""
Next c
temp = dico.keys
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
CEUZIN
Bonjour à tous,
Je me suis peut etre mal exprimer la première fois.
Le code publier par ceuzin fonctionne bien mais ne me suffit pas.
Je me précise un peu plus
j'ai une Combobox dans une userform.
Je souhaiterais alimenter celle-ci avec deux colonnes excel de deux feuilles différentes.
1ere colonne: feuille1/ligne 3/colonne A jusqu'à ligne 9999
2
4
1
3
2eme colonne: feuille2/ligne 3/colonne B jusqu'à ligne 9999
En attente
1
2
3
4
5
6
7
8
9
Le tout sans doublons numérique mais vraiment sans les doublons et dans l'ordre croissant.
je souhaiterais que la combobox me fasse apparaitre seulement
5
6
7
8
9
Pouvez vous m'aider.
cordialement,
Merci à vous tous
Bonsoir,
Dim f, dico
Private Sub UserForm_Initialize()
Set f = Sheets("BD")
Set dic1 = CreateObject("Scripting.Dictionary")
For Each c In f.Range("A2:A" & f.[A65000].End(xlUp).Row)
dic1(CStr(c.Value)) = ""
Next c
Set f = Sheets("BD2")
Set dic2 = CreateObject("Scripting.Dictionary")
For Each c In f.Range("B2:B" & f.[B65000].End(xlUp).Row)
tmp = CStr(c.Value)
If Not dic1.exists(tmp) Then dic2(tmp) = ""
Next c
temp = dic2.keys
Tri temp, LBound(temp), UBound(temp)
Me.ComboBox1.List = temp
End Sub
Ceuzin
Bonjour,
Merci pour l 'exemple, mais cela ne fonctionne toujours pas comme je le souhaiterais.
Exemple si dans la liste 1 une je mets
1
52
10
4
6
30
et dans la liste 2
1
2
3
4
5
7
6
8
9
56
le choix me donne
2
3
5
56
7
8
9
au lieu de 2 - 3 - 5 - 7 - 8 - 10 - 30 - 52 - 56
Pouvez vous m'aidez à améliorer le tri....
Merci
cdlt
Greg
Bonjour,
Dim f, dico
Private Sub UserForm_Initialize()
Set f = Sheets("BD")
Set dic1 = CreateObject("Scripting.Dictionary")
For Each c In f.Range("A2:A" & f.[A65000].End(xlUp).Row)
dic1(c.Value) = ""
Next c
Set f = Sheets("BD2")
Set dic2 = CreateObject("Scripting.Dictionary")
For Each c In dic1.keys: dic2(c) = "": Next
For Each c In f.Range("B2:B" & f.[B65000].End(xlUp).Row)
tmp = c.Value
If Not dic1.exists(tmp) Then dic2(tmp) = "" Else dic2.Remove (tmp)
Next c
temp = dic2.keys
Tri temp, LBound(temp), UBound(temp)
Me.ComboBox1.List = temp
End Sub
CEUZIN
Bonjour,
ton fichier fonctionne très bien mais quand j'essaie de l'appliquer à mon cas. cela ne fonctionne plus.
J'ai donc intégrer mon cas dans ton fichier.
feuille BD1 colonne AK ligne 10
feuille BD2 colonne AH ligne 4
Il faudrait que dans le tri, il me reste: En attente-21-32-33-34-35-36-37-44-45-46-47-48-49-50-53-58-59-60-65-66-67-68-69-70-71-72-73-74-76-77-79-80-82-92-93-94-95-96-99-102-106-108-109-110-111-112-113-114-115-116-117-118-119-120-121-122-123-127-128-129-130-131-133-135-136...etc jusqu'a 256
Cette liste doit se réduire au fur et à mesure que les personne remplisse les groupes sur BD1.
Est-ce que c'est possible?
Merci d'avance pour votre aide.
Cordialement
Greg