Réaliser dans un userform une combobox dynamique
Résolu
whouann
Messages postés
5
Date d'inscription
Statut
Membre
Dernière intervention
-
foo -
foo -
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
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
A voir également:
- Combobox vba liste déroulante dynamique
- Liste déroulante excel - Guide
- Liste déroulante en cascade - Guide
- Tableau croisé dynamique - Guide
- Liste déroulante google sheet - Accueil - Guide bureautique
- Liste code ascii - Guide
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é.
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é.
Super,
merci beaucoup à tous pour la qualité et la rapidité de vos réponses.
Je teste cela dés que possible.
Encore merci
Whouann
merci beaucoup à tous pour la qualité et la rapidité de vos réponses.
Je teste cela dés que possible.
Encore merci
Whouann
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
https://www.cjoint.com/?CIfqwa9X1HZ