Réaliser dans un userform une combobox dynamique

Résolu
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

  1. 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é.
    1. 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
  2. Bonjour

    Voila un modele de combobox

    http://cjoint.com/?3IekTafACGK

    A+

    Maurice
    1. Super,
      merci beaucoup à tous pour la qualité et la rapidité de vos réponses.
      Je teste cela dés que possible.
      Encore merci
      Whouann
      1. 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
        1. Ca marche, et dernière question:
          comment retirer les doublons du menu déroulant?
          Merci pour le temps accordé, ca fait plaisir.
          Whouann
          1. 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