XL 2019 ListBox qui ne s'affiche plus au 2ème clic bouton

jmh1

XLDnaute Occasionnel
Bonjour à tous,

J'ai un UF avec une listbox qui est masquée à l'initialisation.
lorsque je clique sur un commandbutton dans ce UF, la listbox s'affiche.
Au clic sur cette listbox (sub listbox_click), la valeur sélectionnée est copiée dans un labelbox et cette listbox se remasque. Jusque là tout va bien.

Le problème est que quand je reclique sur le commandbutton, le listbox n'apparait plus. en passant en mode pas à pas, je constate que le code du commandbutton s'exécute correctement mais le code continue et exécute le listbox_click donc masque aussitôt la listbox.

Comment éviter que ma listbox s'affiche au second clic sur le commandbutton.

j'espère avoir été assez clair dans mes explications

Ci-dessous, mon code :

VB:
Private Sub BtChangeCpte_Click()

If Lr2 = 3 Then
    MsgBox "Il n'y a pas d'autres comptes disponibles dans l'application !", vbExclamation, "Erreur changement de compte"
    Exit Sub
End If

'Masquage de la liste changement de compte
Me.ListBoxCpte.Visible = True

ListBoxCpte.List = Range("C3:C" & Lr2).Value

End Sub

Private Sub ListBoxCpte_Click()

Me.LabelCpte.Caption = ListBoxCpte.text
ListBoxCpte.Visible = False

End Sub

Merci de votre collaboration.
 

jmh1

XLDnaute Occasionnel
Bonjour Staple1600

C'est ce que je veux, quand je clique sur le bouton, la listbox s'affiche et quand je clique sur la listbox, je récupère la valeur et la listbox se masque.

Ce que je ne comprend pas, c'est qu'au premier clic sur le bouton, tout fonctionne mais si je veux refaire la même opération, le code de la listbox est activé aussitôt alors que je ne clique pas sur celle-ci.
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,

VB:
Private Sub CommandButton1_Click()
   'Affichage de la liste changement de compte
   Me.ListBox1.Visible = True
   ListBox1.ListIndex = -1
   ListBox1.List = Worksheets("Feuil1").Range("A1:A3").Value
End Sub

Pourquoi ?

Quand un élément est sélectionné dans la listbox, si vous redéfinissez la liste de la listbox, le contrôle essaye de resélectionner l'élément qui était sélectionné. S'il peut le faire, il active la procédure Click de la listbox (qui cache la listbox).

Quand vous lancez la première fois l'userform, la listbox n'a aucun élément sélectionné, donc ce contrôle ne cherche pas à sélectionner un élément précédemment sélectionné, donc ne lance pas la procédure Click de la Listbox donc laisse la listbox affichée.

Ceci n'est plus vrai ensuite puisque la listbox aura un élément de sa liste sélectionné (celui sélectionné au coup d'avant)

ListBox1.ListIndex = -1 permet de ne sélectionner aucun élément de la liste. Donc on peut ensuite modifie modifier la liste listbox1 sans risque de déclencher la procédure évènementielle Click de la listbox..
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonsoir le fil

J'aime pas les cliques ;)
VB:
Private Sub CommandButton1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
With ListBox1
    .Visible = -1
    .ListIndex = -1
End With
End Sub

Private Sub ListBox1_Click()
Me.Label1.Caption = ListBox1.Text
ListBox1.Visible = False
End Sub

Private Sub UserForm_Initialize()
ListBox1.List = Array("Essai1", "Essai2", "Essai3")
ListBox1.Visible = Len(ListBox1.Text)
End Sub
Bref tout pareil* que mes camarades
C'était juste histoire de...
(confinement oblige)
*: sauf pour remplir la listbox
 

Discussions similaires

Statistiques des forums

Discussions
312 199
Messages
2 086 160
Membres
103 148
dernier inscrit
lulu56