XL 2016 Problème de DropDown d'une ComboBox (VBA)

crocrocro

XLDnaute Occasionnel
Bonjour à tous,

sur ma feuille de saisie (nommée Saisie), la colonne B (plage nommée SaisieCombo) se fait par l'intermédiaire d'une ComboBox dont la liste des Items correspond à une plage nommée (ListePlantes) de la feuille Catalogue.
Sur l'événement Worksheet_SelectionChange
Si la sélection en cours est une cellule unique appartenant à la plage de saisie par Combo, la Combobox est initialisée (mise aux dimensions de la cellule ... et visible).​
Sur l'événement ComboBox1_Change,
Si le texte de la ComboBox correspond exactement à un élément de la liste ListePlantes, la cellule active (superposée à la ComboBox) prend pour valeur le texte de la ComboBox sinon vide.​
Sur l'événement ComboBox1_GotFocus,
DropDown de la ComboBox​

J'ai le problème suivant :
- si j'effectue une saisie dans la ComboBox et que je valide ma saisie par la Touche Entrée (interceptée dans l'événement ComboBox1_KeyDown), je passe à la colonne suivante, fonctionnement normal
- si je sélectionne une cellule (de la plage en colonne B), par exemple B4, la Combobox s'affiche comme attendu comme ceci
1702995507548.png

Si je sélectionne avant toute autre action, une autre cellule (de la plage en colonne B), par exemple B15, la Combobox s'affiche en B15 mais le DropDown s'effectue en dessous de B4 (la sélection précédente) comme ceci
1702995583456.png

J'ai simplifié le code pour éliminer des causes potentielles, sans succès.
La solution au problème doit être évidente... mais je ne l'ai pas.
Merci d'avance à ceux qui se pencheront sur mon problème
 

Pièces jointes

  • ComboBox1.xlsm
    82.3 KB · Affichages: 2
Solution
Bonjour crocro,
Ajoute la ligne en gras
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Not Intersect(Range(MaPlageSaisie), Target) Is Nothing And Target.Count = 1 Then
Me.ComboBox1.Visible = False
et le reste de la macro

Bruno

youky(BJ)

XLDnaute Barbatruc
Bonjour crocro,
Ajoute la ligne en gras
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Not Intersect(Range(MaPlageSaisie), Target) Is Nothing And Target.Count = 1 Then
Me.ComboBox1.Visible = False
et le reste de la macro

Bruno
 

crocrocro

XLDnaute Occasionnel
Super !
Merci Bruno.
J'imagine que tu as déjà eu le problème car pas très intuitif de rendre la combo invisble puis la rendre visible tout de suite après
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If Not Intersect(Range(MaPlageSaisie), Target) Is Nothing And Target.Count = 1 Then
        Me.ComboBox1.Visible = False 'ajout à cause du pb du DropDown pas au bon endroit
        Me.ComboBox1.List = Sheets(F_Liste).Range(MaListe).Value
        Me.ComboBox1.Height = Target.Height + 3
        Me.ComboBox1.Width = Target.Width
        Me.ComboBox1.Top = Target.Top
        Me.ComboBox1.Left = Target.Left
        Me.ComboBox1.BackColor = Target.Interior.Color
        Me.ComboBox1.Font.Name = Target.Font.Name
        Me.ComboBox1.ForeColor = Target.Font.Color
        Me.ComboBox1.Font.Bold = Target.Font.Bold
        Me.ComboBox1.Font.Size = Target.Font.Size
        Me.ComboBox1 = Target.Value
        Me.ComboBox1.MatchEntry = fmMatchEntryComplete
        Me.ComboBox1.Visible = True
        Me.ComboBox1.Activate
    Else
        Target.Activate
        Me.ComboBox1.Visible = False
    End If

End Sub
 

Discussions similaires

Réponses
2
Affichages
306

Statistiques des forums

Discussions
312 206
Messages
2 086 220
Membres
103 158
dernier inscrit
laufin