[VBA] Besoin d'aide sur liste en cascade

Gordon33

XLDnaute Nouveau
Bonjour,

J'ai un fichier excel dans lequel je saisis des données via un Userform.
Dans la fenêtre, j'ai donc plusieurs item qui doivent être sélectionnés, ou saisis au clavier.
Je souhaite que le choix dans une liste ait des conséquences sur le contenu d'une 2ème liste dans cette même fenêtre Userform.
Par exemple :
1- l'utilisateur dans un premier combobox a le choix entre fruits, légumes, viandes, poissons
2- dans un second combobox du même UserForm, s'il a choisi fruits, ce second combobox propose une liste de fruits, s'il a choisi Légumes, ce second combobox propose une liste de légumes, ....

J'espère que cela vous paraît clair ?

Si quelqu'un peut me dire comment réaliser ceci.... Merci d'avance.
 
Dernière édition:

Gordon33

XLDnaute Nouveau
Re : [VBA] Trier les possibilités d'un Combobox en fonction d'autres choix

Bon, en fait, c'est pas si simple... pour un neuneu lambda.

Alors, voici mon fichier Excel en pj.
En fait, dans l'onglet Tables, vous trouverez en colonne F mes catégories de choses à manger (légumes, fruits...) et en colonne E les sortes de fruits, légumes pour reprendre la métaphore de mon exemple.

Dans le Userform du 1er onglet quand on clique sur "Nouvelle Modification Programme", je voudrais qu'après sélection d'une ligne, le choix des OP soit restreint aux OP de la ligne concernée.
J'ai beau copier coller la macro du lien donné ci-dessus, en remplaçant le nom de mes combobox et en remplaçant les noms de colonne, ça ne marche pas...

Est-ce que l'un d'entre vous peut m'aider ?

Pour info, j'ai testé avec le code de base ci-dessous :

Code:
Dim f
Private Sub UserForm_Initialize()
   Set f = Sheets("bd")
   Set mondico = CreateObject("Scripting.Dictionary")
   For Each c In f.Range("b2:b" & f.[B65000].End(xlUp).Row)
     mondico(c.Value) = ""
   Next c
   Me.ComboBox1.AddItem "(tous)"
   For Each c In mondico.keys
     Me.ComboBox1.AddItem c
   Next c
   Me.ComboBox1.ListIndex = 0
End Sub
Private Sub ComboBox1_Change()
  Me.ComboBox2.Clear
  For Each c In f.Range("a2:a" & f.[a65000].End(xlUp).Row)
    If c.Offset(0, 1) = Me.ComboBox1 Or Me.ComboBox1 = "(tous)" Then
       Me.ComboBox2.AddItem c
    End If
   Next c
End Sub
Private Sub ComboBox2_Change()
  ActiveCell = Me.ComboBox2
  Unload Me
End Sub

Je l'ai supprimé de mon fichier excel puisque ça ne marchait pas.
 

Pièces jointes

  • Suivi Modifications Programmes.xlsm
    54.5 KB · Affichages: 99
Dernière édition:

Gordon33

XLDnaute Nouveau
Re : [VBA] Besoin d'aide sur liste en cascade

Ah oui ! là, c'est le drame !
Merci pour les 2 fichiers, mais là, c'est un peu le syndrome de la poule ayant trouvé un couteau...
Autant je vois bien que la ComboBox fait ce que j'aimerais faire dans mon fichier, autant je n'en comprends pas la programmation, malgré la 1ère feuille. Ext-ce que vous pourriez m'en dire plus ?
 

Dranreb

XLDnaute Barbatruc
Re : [VBA] Besoin d'aide sur liste en cascade

Bonjour.
Certainement. Qu'est ce que vous ne comprenez pas de prime abord ?
Ce qui peut déstabiliser c'est qu'il n'y a aucun code dans l'UfCbxCasc de DémoOutIdx.xls pour gérer les ComboBox.
C'est normal, c'est parce que le module de classe ComboBoxCasc se charge de tout et vous prévient quand une combinaison de valeurs existantes a été choisie par l'opérateur (évènement Bingo)
Il suffit d'y ajouter (méthode Add) au début chaque ComboBox concerné par la chaine avec sa colonne d'une plage devant le garnir intelligemment en fonction des choix, un Actualiser et hop! c'est parti !
À +
 

Discussions similaires

Réponses
1
Affichages
396

Statistiques des forums

Discussions
312 198
Messages
2 086 133
Membres
103 128
dernier inscrit
pmordel@parisbrestconsult