Microsoft 365 Afficher une listbox si sélection dans une autre

  • Initiateur de la discussion Initiateur de la discussion cgpa
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

cgpa

XLDnaute Occasionnel
Bonjour Le Forum,

Il y a beaucoup de post pour l'alimentation d'une listbox par rapport à une autre, mais je ne trouve pas de situation qui réponde à la mienne car elle ne porte pas sur l'alimentation, mais uniquement sur l'affichage. J'aimerais que trois listbox s'affichent uniquement si un choix est activé dans une première listbox (donc qu'elles n'apparaissent pas si le choix n'est pas fait).

Deuxième question: je parviens bien à effacer le contenu d'une listbox à partir d'un bouton, mais cela ne fonctionne pas sur une listbox à choix multiple.

Je précise que je tâtonne par essais avec le vba et cherche surtout à comprendre son fonctionnement.
J'ai posté une version allégée de mon fichier.

Si une bonne âme pouvait y trouver une solution, ce serait sympa.
Merci d'avance!
 

Pièces jointes

Bonjour

poru l'affichage des Listbox, il "suffit" de le gerer à l'initialize et au clic sur ta listbox1

VB:
Private Sub ListBox1_Click()
With Me
    .ComboBox1.Text = Format(.ListBox1.List(.ListBox1.ListIndex, 1), "### ##0.00")
    .ListBox2.Visible = True
    .ListBox3.Visible = True
    .ListBox5.Visible = True
End With

End Sub

Private Sub UserForm_Initialize()
 
Me.TextBox12.Value = Feuil1.Range("B50000").End(xlUp) + 1 'indique que le numéro automatique est le dernier de la colonne B de la feuille 1 (Ventes) + 1 unité
With Me
    With .ListBox1
        .ColumnCount = 2
        .ColumnWidths = "1;0"
        .List = Range("t_Articles").ListObject.DataBodyRange.Value
    End With
    .ListBox2.Visible = False
    .ListBox3.Visible = False
    .ListBox5.Visible = False
      '.ComboBox2.List = Range("t_Paiements").ListObject.DataBodyRange.Value
End With

End Sub
 
Bonjour Le Forum,

Il y a beaucoup de post pour l'alimentation d'une listbox par rapport à une autre, mais je ne trouve pas de situation qui réponde à la mienne car elle ne porte pas sur l'alimentation, mais uniquement sur l'affichage. J'aimerais que trois listbox s'affichent uniquement si un choix est activé dans une première listbox (donc qu'elles n'apparaissent pas si le choix n'est pas fait).

Deuxième question: je parviens bien à effacer le contenu d'une listbox à partir d'un bouton, mais cela ne fonctionne pas sur une listbox à choix multiple.

Je précise que je tâtonne par essais avec le vba et cherche surtout à comprendre son fonctionnement.
J'ai posté une version allégée de mon fichier.

Si une bonne âme pouvait y trouver une solution, ce serait sympa.
Merci d'avance!
Bonjour,
Une proposition en PJ
La listbox3 n'a plus lieu d'être affiché s'il n'y a pas de sélection en listbox 5 sur les 2 dernier item, non ??
 

Pièces jointes

pour l'autre problème.
utilise plutot les évènements _Change (au lieu de _click) pour tes listbox
VB:
Private Sub ListBox5_change() 'On affiche la ListBox3 si et seulement si sélection d'un des deux derniers Item de la Listbox 5.
With Me
    With .ListBox3
         .Visible = Not Me.ListBox5.ListIndex < 2
        For i = 0 To .ListCount - 1
             .Selected(i) = False 'on désélectionne la liste
        Next
    End With
End With
End Sub
'PROBLEME B: j'ai essayé de dupliquer ce code pour que les listbox 2-3-5 ne s'affichent que s'il y a un clic sur la listbox1 mais cela ne va pas.



Private Sub ListBox1_change()
With Me
    .ComboBox1.Text = Format(.ListBox1.List(.ListBox1.ListIndex, 1), "### ##0.00")
    .ListBox2.Visible = True
    .ListBox3.Visible = True
    .ListBox5.Visible = True
End With

End Sub
 
Bonjour

poru l'affichage des Listbox, il "suffit" de le gerer à l'initialize et au clic sur ta listbox1

VB:
Private Sub ListBox1_Click()
With Me
    .ComboBox1.Text = Format(.ListBox1.List(.ListBox1.ListIndex, 1), "### ##0.00")
    .ListBox2.Visible = True
    .ListBox3.Visible = True
    .ListBox5.Visible = True
End With

End Sub

Private Sub UserForm_Initialize()
 
Me.TextBox12.Value = Feuil1.Range("B50000").End(xlUp) + 1 'indique que le numéro automatique est le dernier de la colonne B de la feuille 1 (Ventes) + 1 unité
With Me
    With .ListBox1
        .ColumnCount = 2
        .ColumnWidths = "1;0"
        .List = Range("t_Articles").ListObject.DataBodyRange.Value
    End With
    .ListBox2.Visible = False
    .ListBox3.Visible = False
    .ListBox5.Visible = False
      '.ComboBox2.List = Range("t_Paiements").ListObject.DataBodyRange.Value
End With

End Sub
Merci Vgendron, je pourrai adapter sur mes fichiers.
 
Bonjour,
la réponse dans ton fichier (joint)
Cela répond il à tes attentes?
Cdt
nb : je te laisse reorganiser l'esthétisme de ton UF que j'ai un peu massacré.
Frédéric
Merci Frédéric, c'est parfaitement le résultat attendu. Il s'agissait d'un fichier d'essai: je vais pouvoir adapter mon fichier de base grâce à ton code et aux aides de vgendron et Frédéric également. C'est quand même bien de pouvoir apprendre ainsi. Merci à tous!
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
16
Affichages
868
Réponses
3
Affichages
92
Retour