Vider Listbox cascade si Listbox précédent est vide - aide

thespeedy20

XLDnaute Occasionnel
Bonjour le Forum,
Bonjour à tous,

J'ai une première listebox avec des Noms, quand je sélectionne le nom, il indique dans la seconde listbox le nom des cours... ainsi de suite jusqu'à la listebox classe.

Quand je veux décocher le critère Jour, la listboxclasse ne se vide pas... par contre quand je décoche les degrés, la listboxjour se vide...
Listbox.JPG
 

Pièces jointes

  • Cascade_test.xlsm
    47.9 KB · Affichages: 16
Solution
Bonsoir à tous

des variables manquent dans vos macros, je vous conseille de le faire

sans trop changer votre projet, J'ai remarqué que dans la procédure Private Sub ListBoxJour_Change() ,vous avez cette ligne écrite comme ceci

VB:
        If dchoisis.exists(c.Value) And dchoisis2.exists(c.Offset(, 1).Value) And dchoisis3.exists(c.Offset(, 2).Value) Then mondico(c.Offset(, 9).Value) = "" ' And dchoisis4.exists(c.Offset(, 3).Value)

J'ai fait le changement suivant

VB:
        If dchoisis.exists(c.Value) And dchoisis2.exists(c.Offset(, 1).Value) And dchoisis3.exists(c.Offset(, 2).Value) And dchoisis4.exists(c.Offset(, 3).Value) Then mondico(c.Offset(, 9).Value) = ""


la procédure complète

VB:
Private Sub...

Rhysand

XLDnaute Junior
Bonsoir à tous

des variables manquent dans vos macros, je vous conseille de le faire

sans trop changer votre projet, J'ai remarqué que dans la procédure Private Sub ListBoxJour_Change() ,vous avez cette ligne écrite comme ceci

VB:
        If dchoisis.exists(c.Value) And dchoisis2.exists(c.Offset(, 1).Value) And dchoisis3.exists(c.Offset(, 2).Value) Then mondico(c.Offset(, 9).Value) = "" ' And dchoisis4.exists(c.Offset(, 3).Value)

J'ai fait le changement suivant

VB:
        If dchoisis.exists(c.Value) And dchoisis2.exists(c.Offset(, 1).Value) And dchoisis3.exists(c.Offset(, 2).Value) And dchoisis4.exists(c.Offset(, 3).Value) Then mondico(c.Offset(, 9).Value) = ""


la procédure complète

VB:
Private Sub ListBoxJour_Change()

     Dim mondico As Variant, i As Integer, c As Range
    
   Set dchoisis4 = CreateObject("Scripting.Dictionary")
   For i = 0 To Me.ListBoxJour.ListCount - 1
   If Me.ListBoxJour.Selected(i) = True Then dchoisis4(Me.ListBoxJour.List(i, 0)) = ""
   Next i
   If dchoisis4.Count > 0 Then Me.RésultatListBoxJour.List = dchoisis4.keys Else Me.RésultatListBoxJour.Clear
    
     'ajouter la classe
    Me.ListBoxClasse.Clear
    
    Set mondico = CreateObject("Scripting.Dictionary")
    For Each c In Range(f.[A2], f.[A65000].End(xlUp))
        If dchoisis.exists(c.Value) And dchoisis2.exists(c.Offset(, 1).Value) And dchoisis3.exists(c.Offset(, 2).Value) And dchoisis4.exists(c.Offset(, 3).Value) Then mondico(c.Offset(, 9).Value) = ""
    Next c
    If mondico.Count > 0 Then Me.ListBoxClasse.List = mondico.keys Else Me.ListBoxClasse.Clear
      
End Sub
 

Rhysand

XLDnaute Junior
Bonjour à tous,

chaque fois que vous avez des questions ou avez besoin d'aide, n'hésitez pas à demander, il y aura toujours quelqu'un ici sur le forum pour vous aider

à vous de poursuivre votre projet et de le créer comme vous le souhaitez

et ainsi vous apprenez VBA...
 

Discussions similaires

Réponses
33
Affichages
2 K

Statistiques des forums

Discussions
312 153
Messages
2 085 799
Membres
102 980
dernier inscrit
brossadan