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 SubJe 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.
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......