Listes déroulantes intégrées en cascade

Spitnolan08

XLDnaute Barbatruc
Bonjour à tous,

Passionné d'Excel j'ai déjà réalisé de nombreuses applications en VBA pour utilisation perso ou pro mais à mon humble niveau, c'est à dire avec un langage pas toujours très conventionnel et surtout des codes à rallonge quand je vois les codes hyper condensés mis en ligne par les habitués... mais bon je me débrouille dans mon charabia!

Cependant je suis souvent confronté à des pb qui me prennent des jours à résoudre quand j'y arrive...
Et là je ne sais pas du tout faire. :rolleyes: J'ai parcouru de très nombreuses pages du forum mais n'ai rien trouvé qui correspond à ma recherche : il s'agit de remplacer une succession de combobox fonctionnant en cascade par une seule combobox intégrant elle même une cascade mise à jour automatiquement lors de la selection d'une ligne de la liste précédente.
En espérant que c'est réalisable!!!!!!!!!!!!!!!!!!!!!!!

Ce n'est pas clair ? :D
C'est normal! ;)
C'est pourquoi je vous joint un fichier Excel expliquant en image ce que je veux obtenir. (Nota : Ce fichier ne contient aucun code)

Merci de votre aide
 

Pièces jointes

  • Spitnolan08.xls
    32 KB · Affichages: 271
  • Spitnolan08.xls
    32 KB · Affichages: 269
  • Spitnolan08.xls
    32 KB · Affichages: 270

myDearFriend!

XLDnaute Barbatruc
Re : Listes déroulantes intégrées en cascade

Bonsoir le fil, Xion, 13GIBE59, le Forum,

Sinon, tu trouveras ci-joint l'exemple précédent sur 5 niveaux comme tu le souhaites.

La procédure principale est devenue celle-ci :

Code:
[COLOR=GRAY][B][I]DANS LE MODULE DE CODE DU USERFORM[/I][/B][/COLOR]

[COLOR=NAVY]Private Sub[/COLOR] AfficheMenu()
[COLOR=GREEN]'myDearFriend!  -   www.mdf-xlpages.com[/COLOR]
[COLOR=NAVY]Dim[/COLOR] Plage1 [COLOR=NAVY]As[/COLOR] Range, Plage2 [COLOR=NAVY]As[/COLOR] Range, Plage3 [COLOR=NAVY]As[/COLOR] Range, Plage4 [COLOR=NAVY]As[/COLOR] Range
[COLOR=NAVY]Dim[/COLOR] Cel1 [COLOR=NAVY]As[/COLOR] Range, Cel2 [COLOR=NAVY]As[/COLOR] Range, Cel3 [COLOR=NAVY]As[/COLOR] Range, Cel4 [COLOR=NAVY]As[/COLOR] Range
    DetruireMenu
    [COLOR=GREEN]'Définir la Plage1 d'éléments cible (niveau 2)[/COLOR]
    [COLOR=NAVY]Set[/COLOR] Plage1 = ElmtsCible(ComboBox1.Value, 2)
    [COLOR=GREEN]'Créer le menu déroulant[/COLOR]
    [COLOR=NAVY]With[/COLOR] Application.CommandBars.Add("MonMenu", msoBarPopup, , [COLOR=NAVY]True[/COLOR])
        [COLOR=NAVY]For Each[/COLOR] Cel1 [COLOR=NAVY]In[/COLOR] Plage1
            [COLOR=GREEN]'Ajouter chaque élément au menu déroulant[/COLOR]
            [COLOR=NAVY]With[/COLOR] .Controls.Add(msoControlPopup)
                .Caption = Replace(Cel1.Text, "'", " ")
                .OnAction = "'Niv2 """ & .Caption & """'"
                [COLOR=GREEN]'Définir la Plage1 d'éléments cible suivante (niveau 3)[/COLOR]
                [COLOR=NAVY]Set[/COLOR] Plage2 = ElmtsCible(.Caption, 3)
                [COLOR=NAVY]For Each[/COLOR] Cel2 [COLOR=NAVY]In[/COLOR] Plage2
                    [COLOR=GREEN]'Ajouter chaque élément au menu déroulant[/COLOR]
                    [COLOR=NAVY]With[/COLOR] .Controls.Add(msoControlPopup)
                        .Caption = Replace(Cel2.Text, "'", " ")
                        .OnAction = "'Niv3 """ & .Caption & """'"
                        [COLOR=GREEN]'Définir la Plage1 d'éléments cible suivante (niveau 4)[/COLOR]
                        [COLOR=NAVY]Set[/COLOR] Plage3 = ElmtsCible(.Caption, 4)
                        [COLOR=NAVY]For Each[/COLOR] Cel3 [COLOR=NAVY]In[/COLOR] Plage3
                            [COLOR=GREEN]'Ajouter chaque élément au menu déroulant[/COLOR]
                            [COLOR=NAVY]With[/COLOR] .Controls.Add(msoControlPopup)
                                .Caption = Replace(Cel3.Text, "'", " ")
                                .OnAction = "'Niv4 """ & .Caption & """'"
                                [COLOR=GREEN]'Définir la Plage1 d'éléments cible suivante (niveau 5)[/COLOR]
                                [COLOR=NAVY]Set[/COLOR] Plage4 = ElmtsCible(.Caption, 5)
                                [COLOR=NAVY]For Each[/COLOR] Cel4 [COLOR=NAVY]In[/COLOR] Plage4
                                    [COLOR=GREEN]'Ajouter chaque élément au menu déroulant[/COLOR]
                                    [COLOR=NAVY]With[/COLOR] .Controls.Add(msoControlButton)
                                        .Caption = Replace(Cel4.Text, "'", " ")
                                        .OnAction = "'Niv5 """ & .Caption & """'"
                                    [COLOR=NAVY]End With
                                Next[/COLOR] Cel4
                            [COLOR=NAVY]End With
                        Next[/COLOR] Cel3
                    [COLOR=NAVY]End With
                Next[/COLOR] Cel2
            [COLOR=NAVY]End With
        Next[/COLOR] Cel1
        [COLOR=GREEN]'Afficher le menu déroulant[/COLOR]
        .ShowPopup
    [COLOR=NAVY]End With
End Sub[/COLOR]
Il est évident que cette procédure est améliorable et surtout, simplifiable... Je me pencherai dessus dès que je disposerai d'un peu plus de temps.

J'espère que ça te dépannera dans l'attente.

Par ailleurs, si je puis me permettre, il y a aussi quelques trucs sympas sur ce site là : www.mdf-xlpages.com ;)

Cordialement,
 

Pièces jointes

  • PourXion.zip
    27.7 KB · Affichages: 64
Dernière édition:

Xion

XLDnaute Junior
Re : Listes déroulantes intégrées en cascade

Bonsoir myDearFriend!, le forum,


Merci bcp pour ta réponse, et ta soluce pour les 5 colonnes, mais en fait je me suis un peu trompé dans ma demande d'hier, et je ne voulais qu'une colonne supplémentaire...

Mais j'ai essayé de reprendre ton code pour l'adapter à mes besoins mais cela ne fonctionne toujours pas, j'ai une erreur sur la ligne de code :

Ldeb = .Columns(Col - 1).Find(Categ, LookAt:=xlWhole).Row

Ca me bloque et je ne comprend pas pourquoi, car je respecte la disposition des données du combo comme dans ton exemple.... (en plus, je ne connait pas trop cette instruction... shame on me...).

En tout cas merci bcp pour ta réponse et pour ton code qui est vraiment sympa.

Cordialement,
Xion
 

Xion

XLDnaute Junior
Re : Listes déroulantes intégrées en cascade

Rebonsoir !!! myDearFriend!, le forum,

Etant donné que je rame toujours sur le code, je vous joint la feuille excel avec un exemple de ma disposition car je pense (même si je ne sais pas où exactement...) que le problème vient de là....

Si quelqu'un cible l'erreur, merci de me le dire pour que je puisse me corriger.

Merci à tous.

Cordialement,
Xion
 

Pièces jointes

  • XionHelp.zip
    23 KB · Affichages: 26
Dernière édition:

myDearFriend!

XLDnaute Barbatruc
Re : Listes déroulantes intégrées en cascade

Bonsoir Xion, le fil, le Forum,

Pour seulement 4 niveaux, il te suffit de supprimer le bloc de lignes de code suivant :
Code:
[COLOR=GRAY][B][I]DANS LE MODULE DE CODE DE L'OBJET THISWORKBOOK[/I][/B][/COLOR]

        [COLOR=GREEN]'Définir la Plage1 d'éléments cible suivante (niveau 5)[/COLOR]
        [COLOR=NAVY]Set[/COLOR] Plage4 = ElmtsCible(.Caption, 5)
        [COLOR=NAVY]For Each[/COLOR] Cel4 [COLOR=NAVY]In[/COLOR] Plage4
            [COLOR=GREEN]'Ajouter chaque élément au menu déroulant[/COLOR]
            [COLOR=NAVY]With[/COLOR] .Controls.Add(msoControlButton)
                .Caption = Replace(Cel4.Text, "'", " ")
                .OnAction = "'Niv5 """ & .Caption & """'"
            [COLOR=NAVY]End With
        Next[/COLOR] Cel4
Ensuite, il convient de modifier la dernière occurence de :
Code:
[COLOR=NAVY]With[/COLOR] .Controls.Add(msoControlPopup)
Cette ligne est située à 3 lignes au dessus de ce que tu viens de supprimer.

A modifier comme ceci :
Code:
[COLOR=NAVY]With[/COLOR] .Controls.Add([B]msoControlButton[/B])

Ensuite, si tu respectes la structure de la feuille de données, tout fonctionnera.

Cordialement,
 
Dernière édition:

Xion

XLDnaute Junior
Re : Listes déroulantes intégrées en cascade

Bonsoir didier_mdf, le forum,


Merci pour ta réponse, j'avais bien supprimé les lignes de code ci-dessus mais il est vrai que je n'ai pas pensé à effectuer la modif que tu mentionnes dans ta réponse.

Je viens de tout modifier mais j'ai toujours une erreur sur la ligne de code :

For Each Cel3 In Plage3

As tu vu le fichier que j'ai joint avec ma disposition ?

Merci

Cordialement,
Xion
 

Xion

XLDnaute Junior
Re : Listes déroulantes intégrées en cascade

Bonjour didier_mdf, le forum,


Je suis finalement parvenu a faire ce que je souhaitais (Didier, désolé si tu as perdu du temps avec mon dernier soucis, mais finalement je m'en suis sorti) , mais on vient de me donner une nouvelle contrainte et là, je ne m'en sors plus....

Je dois retravailler la disposition des données dans base, mais je n'arrive a rien....

Penses tu que ton code peut s'adapter à une autre disposition ?

Ci-joint une feuille excel avec la disposition souhaitée ( je souhaterais que pour chaque SN, on puisse selectionner les niveaux de 3 - 1 à 3 - 4).

Merci d'avance pour votre aide.

Cordialement,
Xion
 

Pièces jointes

  • Xiondisposition.zip
    22.9 KB · Affichages: 45

Statistiques des forums

Discussions
312 838
Messages
2 092 669
Membres
105 482
dernier inscrit
Eric.FKF