Réaliser dans un userform une combobox dynamique

Résolu/Fermé
whouann Messages postés 5 Date d'inscription mardi 3 septembre 2013 Statut Membre Dernière intervention 5 septembre 2013 - 3 sept. 2013 à 22:43
 foo - 5 sept. 2013 à 19:46
Bonjour,
Je souhaite réaliser dans un userform une combobox dont le contenu dépend d'une autre.
Exemple:
Feuille excel:
colonneA ColonneB
NOM Prénom
Dupont Pierre
Durant Phillippe
Dupont Marc
... ...

Je souhaite que la première combobox me propose les noms de la colonne A
(Ca je sais faire)
Je souhaiterais que la deuxième combobox me propose les prénoms de la colonne B
Mais uniquement les prénoms pierre et marc si je choisi Dupont dans la première,
et uniquement Phillippe si je choisi Durant.

En espérant être clair.
Je n'ai pas trouvé de réponse sur le forum
Merci d'avance
Whouann

6 réponses

Bonjour,

En fait tu souhaites tout simplement filtrer sur un NOM

Pour alimenter ta combobox je suppose que tu as mis ton code dans L'initalisation du userform comme dans l'exemple ci-dessous :

Sub UserForm_Initialize()
Dim Nb_Lgn As Long, y As Byte

Nb_Lgn = Sheets("Feuil1").Cells(Rows.Count, 1).End(xlUp).Row

For y = 2 To Nb_Lgn
Manitou.ComboBox1.AddItem Sheets("Feuil1").Cells(y, 1) 'Alimente le NOM
Manitou.ComboBox2.AddItem Sheets("Feuil1").Cells(y, 2) 'Alimente le Prénom
Next i
End Sub


Pour le Filtrage il suffit de démarrer une macro au changement de contenu de la Combobox1

Sur ton userform double click sur ton ComboBox1, il génèrera automatique la macro ComboBox_Change

Copie ensuite le code suivant :

Sub ComboBox1_Change()
Dim Nb_Lgn As Long, y As Byte, NOM_Lgn As Variant
UserForm1.ComboBox2.Clear 'Vide la ComboBox2

Nb_Lgn = Sheets("Feuil1").Cells(Rows.Count, 1).End(xlUp).Row

For y = 2 To Nb_Lgn
NOM_Lgn = Sheets("Feuil1").Cells(y, 1)

If NOM_Lgn = UserForm1.ComboBox1 Then
UserForm1.ComboBox2.AddItem Sheets("Feuil1").Cells(y, 2)
End If
Next i
End Sub


Voilà,

A chaque changement de Nom dans ta combobox1, il videra le contenu de la ComboBox2 et alimentera uniquement les prénoms dont le Nom sera identique à ta sélection.

Si tu as renommé ton Userform, penses à remplacer tout les Userform1 par le nom que tu lui a donné.
0
whouann Messages postés 5 Date d'inscription mardi 3 septembre 2013 Statut Membre Dernière intervention 5 septembre 2013
5 sept. 2013 à 15:52
Petit pb,
je viens de mettre ton code en application, mais un message d'eereur apparait lorsque je le lance:
"erreur d'exécution '438'
Propriété ou méthode non gérée par cet objet"

Merci encore de ton aide


Voici le code tel que je l'ai transcrit:

Private Sub ComboBoxetape1_Change()
'combobox1 correspond à comboboxetape1
'combobox2 correspond à comboxpanne1
'userform1 correspond à userformerca
'j'ai décallé de 1 les valeurs car je n'ai pas de ligne correspondant au titre des colonnes

Dim Nb_Lgn As Long, y As Byte, NOM_Lgn As Variant

UserFormerca.ComboBoxpanne1.Clear

Nb_Lgn = Sheets("base").Cells(Rows.Count, 2).End(xlUp).Row

For y = 1 To Nb_Lgn
NOM_Lgn = Sheets("base").Cells(y, 2)
If NOM_Lgn = UserFormerca.ComboBoxetape1 Then
UserFormerca.ComboBoxpanne1.AddItem Sheets("base").Cells(y, 3)
End If
Next y


End Sub



Private Sub UserForm_Initialize()

Dim Nb_Lgn As Long, y As Byte

Nb_Lgn = Sheets("base").Cells(Rows.Count, 2).End(xlUp).Row

For y = 1 To Nb_Lgn
Manitou.ComboBoxetape1.AddItem Sheets("base").Cell(y, 2)
Manitou.ComboBoxpanne1.AddItem Sheets("base").Cell(y, 3)
Next y


TextBoxdate.Value = Format(Now(), "dd/mm/yyyy")
TextBoxcodeproduit.Value = ""
ComboBoxetape1.Enabled = True
ComboBoxetape2.Enabled = False
ComboBoxetape3.Enabled = False
ComboBoxetape4.Enabled = False
ComboBoxetape5.Enabled = False
ComboBoxetape6.Enabled = False
ComboBoxpanne1.Enabled = True
ComboBoxpanne2.Enabled = False
ComboBoxpanne3.Enabled = False
ComboBoxpanne4.Enabled = False
ComboBoxpanne5.Enabled = False
ComboBoxpanne6.Enabled = False
ComboBoxcause1.Enabled = False
ComboBoxcause2.Enabled = False
ComboBoxcause3.Enabled = False
ComboBoxcause4.Enabled = False
ComboBoxcause5.Enabled = False
ComboBoxcause6.Enabled = False
TextBoxquantite1.Enabled = False
TextBoxquantite2.Enabled = False
TextBoxquantite3.Enabled = False
TextBoxquantite4.Enabled = False
TextBoxquantite5.Enabled = False
TextBoxquantite6.Enabled = False

End Sub
0
whouann Messages postés 5 Date d'inscription mardi 3 septembre 2013 Statut Membre Dernière intervention 5 septembre 2013
5 sept. 2013 à 16:22
pour plus de clarté voici mon fichier:
https://www.cjoint.com/?CIfqwa9X1HZ
0
Bonjour

Voila un modele de combobox

http://cjoint.com/?3IekTafACGK

A+

Maurice
0
whouann Messages postés 5 Date d'inscription mardi 3 septembre 2013 Statut Membre Dernière intervention 5 septembre 2013
4 sept. 2013 à 17:08
Super,
merci beaucoup à tous pour la qualité et la rapidité de vos réponses.
Je teste cela dés que possible.
Encore merci
Whouann
0
Bonjour

voila la rectif

Dim Nb_Lgn As Long, Lig As Byte

Nb_Lgn = Feuil12.Range("B" & Rows.Count).End(xlUp).Row

For Lig = 1 To Nb_Lgn
ComboBoxetape1.AddItem Feuil12.Cells(Lig, 2)
ComboBoxpanne1.AddItem Feuil12.Cells(Lig, 3)
Next

A+
Maurice
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
whouann Messages postés 5 Date d'inscription mardi 3 septembre 2013 Statut Membre Dernière intervention 5 septembre 2013
5 sept. 2013 à 18:46
Ca marche, et dernière question:
comment retirer les doublons du menu déroulant?
Merci pour le temps accordé, ca fait plaisir.
Whouann
0
Bonjour

Combobox sans doublons

ComboBoxetape1.Clear
For i = 1 To Feuil12.Range("B" & Rows.Count).End(xlUp).Row
ComboBoxetape1 = Feuil12.Range("B" & i)
If ComboBoxetape1.ListIndex = -1 Then ComboBoxetape1.AddItem Feuil12.Range("B" & i)
Next i
ComboBoxetape1.ListIndex = -1

A+
Maurice
0