ComboBox sur 2 colonnes

Bonjour à tous,

Comme quand on a de bonnes infos, on a tendance à en abuser, je reviens vous poser une petite question.

J’ai plusieurs UserForms dans mon fichier Excel (Ver. 2010) qui font à peu près ce que je souhaite, sauf celui appelé « Articles ».

J’arrive à sélectionné mes articles dans le ComboBox2 « articles » selon le choix effectué dans le ComboBox1 « Catégorie » (merci à banzai64 pour son aide…). Je voudrais que dans mon ComboBox2 s’affichent 2 colonnes avec le code et la désignation de l’article.

J’arrive à afficher deux colonnes dans mon ComboBox2 (pas très sorcier visiblement), par contre j’ai la colonne B et le numéro de ligne correspondant à chaque entrée, mais je n’arrive pas à comprendre la façon de lui dire que je veux les colonnes B et C dans ce ComboBox2. Du coup quand je clique sur mon bouton1 « Créer », l’article s’ajoute bien mais comment lui dire que la désignation qui serait en 2ème colonne du ComboBox2, doit être entrée en colonne B de la feuille « Articles ».

J’ai bien trouvé quelques exemples, mais je n’arrive pas à les appliquer à ma situation, je suis peut être parti sur quelque chose d’inexploitable au départ, je ne sais pas…

Si quelqu’un pouvait gentiment m’expliquer…

Merci bien.


Désolé mais pour une raison qui m'échappe, je n'arrive pas à insérer mon fichier...

Alors voilà le code...

Option Explicit
Dim f As Worksheet
Dim Mondico As Object
Dim j As Long, lig As Long
Dim i As Integer, k As Integer
Dim Ctrl As Control
Dim art As String, cat As String

Private Sub UserForm_Initialize()

 Me.StartUpPosition = 0
 Me.Top = Application.CentimetersToPoints(5)
 Me.Left = Application.CentimetersToPoints(15)

   Set f = Sheets("Articles")
   Set Mondico = CreateObject("Scripting.Dictionary")
   Mondico("(Catégorie)") = ""
   For j = 2 To f.Range("A" & Rows.Count).End(xlUp).Row
      Mondico(f.Range("A" & j).Value) = ""
   Next j
   With Me.ComboBox1
     .List = Application.Transpose(Mondico.keys)
     .ListIndex = 0
   End With
    With Me.ComboBox2
        .ColumnCount = 2
    End With

End Sub

Private Sub ComboBox1_Change()

   Me.ComboBox2.Clear
   If Me.ComboBox1.ListIndex = -1 Then Exit Sub
  With Me.ComboBox2
    For j = 2 To f.Range("B" & Rows.Count).End(xlUp).Row
      If f.Range("A" & j) = Me.ComboBox1 Or Me.ComboBox1.ListIndex = 0 Then
      .AddItem f.Range("B" & j)
      .List(.ListCount - 1, 1) = j
      End If
    Next j
    If .ListCount = 1 Then .ListIndex = 0
  End With
End Sub

Private Sub ComboBox2_Change()

  For i = 4 To 6
    Me.Controls("TextBox" & i) = ""
  Next i

  If Me.ComboBox2.ListIndex = -1 Then Exit Sub

  lig = Me.ComboBox2.List(Me.ComboBox2.ListIndex, 1)

  For i = 4 To 6
    Me.Controls("TextBox" & i) = f.Cells(lig, i)
  Next i

End Sub

Private Sub CommandButton1_Click()

Sheets("Articles").Unprotect "MCSF15"
Application.ScreenUpdating = False

    With Sheets("Articles")
    lig = .Cells(Rows.Count, 2).End(xlUp).Row + 1

            .Cells(lig, 1) = ComboBox1.Value
            .Cells(lig, 2) = ComboBox2.Value

        For k = 4 To 6
            .Cells(lig, k) = Me.Controls("TextBox" & k).Text
             Me.Controls("TextBox" & k).Text = ""
        Next k

    End With
    ComboBox1.ListIndex = -1
    ComboBox2.ListIndex = -1

Sheets("Articles").Protect "MCSF15", AllowFiltering:=True
Application.ScreenUpdating = True

MsgBox "Votre article a bien été créé.", vbInformation, "Création article"

End Sub

Je ne sais pas si c'est la valeur renvoyée qui t'intéresse "value". Si oui, la valeur renvoyée par la propriété value dépend de la propriété BoundColumn du contrôle (cela permet de choisir sa colonne comme valeur de sortie).

Bonjour le forum,

Merci psdi pour ta réponse. J'ai regardé sur l'aide vba, mais je ne comprends pas bien quoi faire de la propriété BoundColumn...

Cependant, j'ai réussi à faire afficher mes deux colonnes dans le ComboBox. Youpi !!!

Et là, 2 soucis :

1- L'affichage ne prend pas en compte toutes les cellules, c'est à dire que si le ComboBox1 est sur "Electricité", bien que j'ai 4 références, il ne me renvoie dans le ComboBox2 que les 3 premières. Comme s'il s'arrêtait à la prochaine catégorie sans regarder s'il y a d'autres correspondances...

2- Je n'arrive pas à lui expliquer que je veux qu'il repère la valeur de la première colonne de la ComboBox pour insérer les valeurs de la ligne correspondante dans les TextBox, mais c'est peut être à ce moment là que la propriété BoundColumn pourra m'être utile...

J'ai aussi compris pourquoi je ne pouvais pas insérer mon fichier, il était trop volumineux, j'en ai donc fait un spécial pour pouvoir l'insérer.

Merci de votre aide.

128gestion-stock.xlsm (30.64 Ko)

Bonjour le forum,

Voilà, après avoir cherché tout seul comme un grand, je suis arrivé à corriger mes petites erreurs....

Je joint donc mon fichier d'exemple, si ça peut servir......

637gestion-stock.xlsm (29.12 Ko)
Rechercher des sujets similaires à "combobox colonnes"