Bonsoir,
Dans mon document Excel, je recherche à faire apparaître une liste déroulante sur certaines plages de données lorsque l'on clique sur l'une des cellules concernées.
Je sais m'y prendre hors VBA, mais je ne sais pas le faire en passant par VBA, c'est pourquoi je me tourne à nouveau vers vous.
Dans mes recherches, je me suis souvenu d'un code qu'avait proposé @Boisgontierjacques ; que j'ai conservé dans un coin persuadé que ça me serait utile. Et en effet, ce qu'il proposait me semble tout à fait convenir !
Le gros problème, c'est que je peine à comprendre ce code. Et le peu de ce que je comprend, je ne parviens pas à le faire fonctionner pour le moment.
Voici le code qu'il avait proposé dans son document :
Dim f, a(), choix1()
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect([a2:a100], Target) Is Nothing And Target.Count = 1 Then
Set f = Sheets("BD")
choix1 = f.Range("a2:b" & f.[a65000].End(xlUp).Row).Value
Me.ComboBox1.List = choix1
Me.ComboBox1.Height = Target.Height + 3
Me.ComboBox1.Width = Target.Width
Me.ComboBox1.Top = Target.Top
Me.ComboBox1.Left = Target.Left
Me.ComboBox1 = Target
Me.ComboBox1.Visible = True
Me.ComboBox1.Activate
Else
Me.ComboBox1.Visible = False
End If
End Sub
Private Sub ComboBox1_Change()
If Me.ComboBox1.ListIndex = -1 Then
Dim b()
clé = UCase(Me.ComboBox1) & "*"
n = 0
For i = LBound(choix1) To UBound(choix1)
If UCase(choix1(i, 1)) Like clé Then
n = n + 1: ReDim Preserve b(1 To 2, 1 To n)
b(1, n) = choix1(i, 1): b(2, n) = choix1(i, 2)
End If
Next i
If n > 0 Then
ReDim Preserve b(1 To 2, 1 To n)
Me.ComboBox1.Column = b
End If
Me.ComboBox1.DropDown
End If
End Sub
Private Sub ComboBox1_Click()
ActiveCell.Value = Me.ComboBox1
ActiveCell.Offset(, 1) = ComboBox1.Column(1)
End Sub
Private Sub ComboBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
choix1 = f.Range("a2:a" & f.[a65000].End(xlUp).Row).Value
Me.ComboBox1.DropDown
End Sub
Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then
ActiveCell.Offset(1).Select
End If
End Sub
Le document Excel qu'il a partagé est également joint à ce post ("Synonymes").
Dans mon cas, j’essaie d'adapter ce code pour faire ceci :
- Dans la colonne [J] de la feuille 'A' ; dans les colonnes [J] et [L] de la feuille 'B' : ouvrir une liste de choix pour une saisie automatique.
- Cette liste de choix sera disponible ici : feuille 'BD Listes' (Colonnes [A:B])
Sauriez-vous comment je peux m'y prendre ?
Pour le moment je n'ai que des erreurs, mais si j'arrive à un résultat quelconque je vous en fait part !
Merci de votre attention,
Bonne soirée !