Excel Downloads
Forum

Précédent   Excel Downloads Forums > Excel > Forum Excel > Listes déroulantes intégrées en cascade
Vous inscrire
S'inscrire FAQ Membres Calendrier Recherche Messages du jour Marquer les forums comme lus


Réponse
 
LinkBack Outils de la discussion
Vieux 21/12/2006, 01h09   #1 (permalink)
Spitnolan08
XLDnaute Barbatruc
 
Avatar de Spitnolan08
 
Date d'inscription: décembre 2006
Version Excel : Excel 2003 (PC)
Messages: 2 262
Thumbs up Listes déroulantes intégrées en cascade

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. 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 ?
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
Fichiers attachés
Type de fichier : xls Spitnolan08.xls (32,0 Ko, 61 affichages)
Spitnolan08 est déconnecté   Réponse avec citation
ANNONCES
Vieux 21/12/2006, 01h45   #2 (permalink)
Spitnolan08
XLDnaute Barbatruc
 
Avatar de Spitnolan08
 
Date d'inscription: décembre 2006
Version Excel : Excel 2003 (PC)
Messages: 2 262
Exclamation Re : Listes déroulantes intégrées en cascade

RE,

Après m'être encore promené dans le forum et avoir consulté n messages et x pièces jointes qui m'ont fait entrevoir des simplifications de code dans mes UF : Merci Thierry... je me suis dit qu'il était peut être utile d'indiquer la forme de ma BD.

C'est pourquoi je vous joint le fichier précédent complété d'un extrait de la BD pour qu'il tienne dans les 48,8ko.

A bientôt
Fichiers attachés
Type de fichier : xls Spitnolan08.xls (48,5 Ko, 51 affichages)
Spitnolan08 est déconnecté   Réponse avec citation
Vieux 22/12/2006, 01h14   #3 (permalink)
bqtr
XLDnaute Impliqué
 
Avatar de bqtr
 
Date d'inscription: juillet 2006
Localisation: Nantes
Version Excel : Excel 2003 (PC)
Messages: 866
Par défaut Re : Listes déroulantes intégrées en cascade

Bonjour Spitnolan08,

Voici un exemple : 1 combobox et deux listbox.
Il n'y a que l'alimentation des différentes box qui est traitée.
Ca pourra peut-être t'aider à avancer.

Bonne nuit

P.O
Fichiers attachés
Type de fichier : zip 2-listes-deroulantes-integrees-en-cascade-spitnolan08.zip (40,6 Ko, 89 affichages)
bqtr est déconnecté   Réponse avec citation
Vieux 22/12/2006, 11h38   #4 (permalink)
Bebere
XLDnaute Accro
 
Date d'inscription: mai 2005
Localisation: Tongres
Version Excel : Excel 2000 (PC)
Messages: 1 696
Par défaut Re : Listes déroulantes intégrées en cascade

bonjour Spitnolan,Bqtr
activé feuille code gestion,sinon pas de données dans les contrôles
j'ai ajouté des textbox
à bientôt
Fichiers attachés
Type de fichier : zip 2-listes-deroulantes-integrees-en-cascade-spitnolan08.zip (32,0 Ko, 46 affichages)
Bebere est déconnecté   Réponse avec citation
Vieux 22/12/2006, 13h15   #5 (permalink)
Spitnolan08
XLDnaute Barbatruc
 
Avatar de Spitnolan08
 
Date d'inscription: décembre 2006
Version Excel : Excel 2003 (PC)
Messages: 2 262
Arrow Re : Listes déroulantes intégrées en cascade

Merci à vous 2 btqr et Bébère,
Mais aussi à tous ceux qui ont réfléchi ou réfléchissent encore à mon pb...

Cette solution fonctionne et je l'avais testée cette nuit en modifiant un code de @+Thierry de 2005 sans toutefois l'adapter à mon cas particulier. (Je le joint en pièce attachée). Il faut maintenant que j'analyse en détail vos propositions car elles concernent directement mon cas particulier! C'est super !

Toutefois (et c'est pour ça que je m'étais contenté d'une modif du code de Thierry) cela ne répond pas tout à fait à mes attentes car ce que je cherche est de supprimer cette juxtaposition de fenêtres (Combobox, listbox...) pour à partir d'une seule combo avoir une sorte de menu déroulant conservant à chaque sélection le niveau précédent et présentant à sa droite l'étage supérieur (ou inférieur suivant la façon dont on se place ) ...

Mais Merci encore car si mes souhaits ne pouvaient être comblés vos codes me permettraient d'améliorer mon système et ma façon de coder. Et ça c'est tout simplement génial!

Bonne journée à tous.
Et à bientôt pour me permettre d'atteindre mes désirs!
Fichiers attachés
Type de fichier : xls USF_ListBox_Cascade_Basic+.xls (37,5 Ko, 65 affichages)
Spitnolan08 est déconnecté   Réponse avec citation
Vieux 29/12/2006, 20h20   #6 (permalink)
myDearFriend!
XLDnaute Barbatruc
 
Avatar de myDearFriend!
 
Date d'inscription: février 2005
Messages: 2 238
Par défaut Re : Listes déroulantes intégrées en cascade

Bonsoir Spitnolan08, bqtr, Bebere, le Forum,

Dans le fichier ci-joint, une solution peut-être un peu tirée par les cheveux...

J'ai utilisé principalement les 2 procédures suivantes qui ont pour objectif de créer un menu déroulant (en cascade) :
Code:
DANS LE MODULE DE CODE DU USERFORM

Private Sub AfficheMenu()
'myDearFriend! - Décembre 2006
Dim Plage As Range, Cel As Range, Plage1 As Range, Cel1 As Range
    DetruireMenu
    'Définir la plage d'éléments cible (niveau 2)
    Set Plage = ElmtsCible(ComboBox1.Value, 2)
    'Créer le menu déroulant
    With Application.CommandBars.Add("MonMenu", msoBarPopup, , True)
        For Each Cel In Plage
            'Ajouter chaque élément au menu déroulant
            With .Controls.Add(msoControlPopup)
                .Caption = Replace(Cel.Text, "'", " ")
                .OnAction = "'Niv2 """ & .Caption & """'"
                'Définir la plage d'éléments cible suivante (niveau 3)
                Set Plage1 = ElmtsCible(.Caption, 3)
                For Each Cel1 In Plage1
                    'Ajouter chaque élément au menu déroulant
                    With .Controls.Add(msoControlButton)
                        .Caption = Replace(Cel1.Text, "'", " ")
                        .OnAction = "'Niv3 """ & .Caption & """'"
                    End With
                Next Cel1
            End With
        Next Cel
        'Afficher le menu déroulant
        .ShowPopup
    End With
End Sub

Private Function ElmtsCible(Categ As String, Col As Byte) As Range
Dim Plage As Range
Dim Ldeb As Long, Lfin As Long
    With Sheets("Base")
        Ldeb = .Columns(Col - 1).Find(Categ, LookAt:=xlWhole).Row
        Lfin = .Cells(Ldeb, Col - 1).End(xlDown).Row - 1
        Set Plage = .Range(.Cells(Ldeb, Col), .Cells(Lfin, Col))
        Set ElmtsCible = Application.Intersect(Plage, .Columns(Col).SpecialCells(xlCellTypeConstants, 3))
    End With
End Function
Par contre, j'ai dû recontruire ta base de données autour d'une structure qui m'a semblé plus facile à manipuler. Tu peux l'alimenter à loisir dès lors que tu respectes strictement cette structure sur 3 colonnes.

Cordialement,
Fichiers attachés
Type de fichier : zip mDF_ComboBoxEnCascade.zip (22,6 Ko, 87 affichages)
__________________
Didier_mDF

www.mdf-xlpages.com

Dernière modification par myDearFriend! 29/12/2006 à 20h22.
myDearFriend! est déconnecté   Réponse avec citation
Vieux 30/12/2006, 03h39   #7 (permalink)
Spitnolan08
XLDnaute Barbatruc
 
Avatar de Spitnolan08
 
Date d'inscription: décembre 2006
Version Excel : Excel 2003 (PC)
Messages: 2 262
Par défaut Re : Listes déroulantes intégrées en cascade

Bonne nuit à vous!

J'étais un peu scotché sur un autre sujet et je ne regarde ta solution que maintenant...

Vu l'heure tardive je vais aller me coucher et essayerais de comprendre ton code plus tard, mais en tout cas cela correspond exactement à ce que je veux faire même si tu prétends que c'est tiré par les cheveux.

Pour la base de données ce n'est à priori pas vraiment un problème.

Je reviendrais vers vous pour vous tenir au courant dès que je pourrais.

Merci beaucoup
Spitnolan08 est déconnecté   Réponse avec citation
Vieux 30/12/2006, 09h32   #8 (permalink)
bqtr
XLDnaute Impliqué
 
Avatar de bqtr
 
Date d'inscription: juillet 2006
Localisation: Nantes
Version Excel : Excel 2003 (PC)
Messages: 866
Par défaut Re : Listes déroulantes intégrées en cascade

Bonjour tous le monde, myDearFriend!

Je suivais ce fil car je trouvais le sujet interéssant, et j'étais curieux de savoir si quelqu'un allait y arriver. Eh bien, même si la façon de faire est "tirée par les cheveux", le résultat est parfait. Utiliser une barre de commande avec le contenu des cellules comme éléments du menu, je ne savais même pas que cela était possible. C'est vrai que j'en suis encore au début avec VBA, mais bon !.

En tous cas superbe démo.

Bonnes fêtes de fin d'année à tous

P.O
bqtr est déconnecté   Réponse avec citation
Vieux 31/12/2006, 00h54   #9 (permalink)
Spitnolan08
XLDnaute Barbatruc
 
Avatar de Spitnolan08
 
Date d'inscription: décembre 2006
Version Excel : Excel 2003 (PC)
Messages: 2 262
Par défaut Re : Listes déroulantes intégrées en cascade

Sire MyDearFriend,
Chers tous,

Le code créé par Sa Majesté est tout simplement superbe : sobre, élégant, racé… les mots me manquent !

Je viens de passer quelques heures (mais oui !!!!) à en comprendre toutes les subtilités pour l’adapter totalement à ma configuration, et il y en a encore quelques unes qui me font défaut.

Dans ma modeste première tentative d’adaptation de ce must (en pièce jointe), il y a quelque chose que je ne comprends pas : Lorsque je sélectionne dans le menu de niveau 4 des items présentant des parenthèses (Ex : sélection en niv 3 de « FRAIS ET TAXES » puis sélection de « Taxes d'urbanisme (TLE / TDENS / TDCAUE / EV) », « Taxes d'assainissement (TRE) » ) ni le libellé du choix 4 ni le code correspondant ne s’affichent alors que ça marche dans tous les autres cas. Le problème vient de l’instruction en gras ci-dessous : (Nota : je ne sais pas comment certains font pour avoir une fenêtre code ni d'ailleurs pour mettre des citations d'autres messages.)

‘Private Function SearchCode(LibNiv As String, Col As Byte) As String
Dim LLibNiv As Long
With Sheets("Base")
LLibNiv = .Columns(Col).Find(LibNiv, LookAt:=xlWhole).Row
SearchCode = .Cells(LLibNiv, Col - 1).Value
End With
End Function

Quelqu’un a-t-il une idée de la raison et de la solution ?

Pour la partie base de données, comme tu peux le constater MyDearFriend, j’ai cherché à me rapprocher de la mienne et je pense qu’on peut arriver à adapter ton code assez facilement pour partir de ma BD. Le plus dur c’est toi qui l’a fait ! Tu m’as permis de découvrir des potentialités que je n’imaginais même pas genre les Functions… Un régal !
Un défi supplémentaire : est il possible d’ajouter dans la bande bleue située en partie gauche des menus popup le code de l’élément ? Oui, je sais, je suis gourmand….

Quelques questions au fil du code pour ceux ou celles qui voudrait me donner quelques explications :
1/ Dans SpecialCells, à quoi correspond l’argument Value = 3 ? Quelles sont les autres valeurs possibles de cet argument ?

2/ Comment le menu popup se place t’il au bon endroit ?

3/ Quelle est l’utilité de la fonction Replace dans la partie création du menu popup ? Je l’ai remplacée et ça fonctionne sans pb… Mais si MyDearFriend l’a placée là c’est qu’elle doit avoir un intérêt dans certains cas ?? Ah oui, elle modifie légèrement le fonctionnement de la private Function présentée plus haut… ?!?

4/ Je ne sais plus mais je ne vais pas continuer à vous embêter avec toutes mes questions en cette veille de nouvel an…

Meilleurs vœux à tous
et à bientôt sur ce fil ou un autre.
Fichiers attachés
Type de fichier : zip My_ComboBoxEnCascade.zip (28,2 Ko, 37 affichages)
Spitnolan08 est déconnecté   Réponse avec citation
Vieux 31/12/2006, 02h34   #10 (permalink)
myDearFriend!
XLDnaute Barbatruc
 
Avatar de myDearFriend!
 
Date d'inscription: février 2005
Messages: 2 238
Par défaut Re : Listes déroulantes intégrées en cascade

Bonsoir Spitnolan08, bqtr, Bebere,

Tu trouveras ci-joint, une nouvelle adaptation du fichier pour tenter de répondre au mieux à ta demande.

Citation:
Posté par Spitnolan08
il y a quelque chose que je ne comprends pas : Lorsque je sélectionne dans le menu de niveau 4 des items présentant des parenthèses (Ex : sélection en niv 3 de « FRAIS ET TAXES » puis sélection de « Taxes d'urbanisme (TLE / TDENS / TDCAUE / EV) », « Taxes d'assainissement (TRE) » ) ni le libellé du choix 4 ni le code correspondant ne s’affichent alors que ça marche dans tous les autres cas.
Ce n'est pas les parenthèses qui causent problème mais la présence d'apostrophe. C'est dû notamment à ma fonction Replace() dont tu parles un peu plus loin. J'ai dû utiliser ce subterfuge car la présence de l'apostrophe rendait inopérant le passage d'arguments dans la ligne :
Code:
.OnAction = "'Niv3 """ & .Caption & """'"
Je suppose qu'on pourrait essayer de contourner ce problème à grand coup de Chr() et compagnie mais je n'ai pas pris le temps de tester...

Citation:
Posté par Spitnolan08
Un défi supplémentaire : est il possible d’ajouter dans la bande bleue située en partie gauche des menus popup le code de l’élément ?
Non et Oui !
Non, car dans cette bande bleue on ne peut y mettre que des icônes. Non encore car aucune icône n'est possible sur le premier niveau de menu (celui qui se termine par une petite flèche) car c'est un ControlPopUp, il est lui même conteneur d'un autre niveau. A ma connaissance le ControlPopUp ne peut afficher d'icône.
Oui, sur le dernier niveau seulement (ControlButton), si on utilise des icônes représentants des chiffres pour sympoliser tes codes. On le ferait comme ça :
Code:
                    With .Controls.Add(msoControlButton)
                        .Caption = ....
                        .OnAction = ....
                        .FaceId = 71
                    End With
Pour info, les chiffres de 0 à 9 sont représentés par les codes 70 à 79.

Citation:
Posté par Spitnolan08
Dans SpecialCells, à quoi correspond l’argument Value = 3 ? Quelles sont les autres valeurs possibles de cet argument ?
L'aide VBA sur le mot clé SpecialCells devrait t'en apprendre d'avantage. La valeur 3 correspond au cumul des deux valeurs xlTextValues (qui vaut 2) et xlNumbers (qui vaut 1). Pour connaître les valeurs correspondant à ces constantes, dans l'éditeur VBE, tu fais F2 pour afficher l'explorateur d'Objets, puis une recherche sur SpecialCellsValue. En sélectionnant les différentes constantes, tu obtiens leur valeur au bas de la fenêtre.

Citation:
Posté par Spitnolan08
Comment le menu popup se place t’il au bon endroit ?
Avec la méthode ShowPopup, tu peux spécifier des coordonnées X,Y mais si tu ne mets rien, les coordonnées du curseur de souris sont automatiquement prises en compte.

Dans le fichier joint, j'ai contourné ces problèmes rencontrés en concaténant les Eléments et Codes associés dans l'affichage du menu déroulant (séparés par 3 espaces consécutifs) et en scindant (fonction Split) la chaine obtenue dans les macros Niv3() et Niv4() pour scinder à nouveau les valeurs et les associées aux bons contrôles.
Une petit remarque au passage, l'utilisation de contrôles Label me paraît plus indiqué (que les TextBox) si l'objectif est simplement d'afficher des données sans permettre de modification.

Cordialement,
Fichiers attachés
Type de fichier : zip My_ComboBoxEnCascade.zip (33,5 Ko, 120 affichages)
__________________
Didier_mDF

www.mdf-xlpages.com
myDearFriend! est déconnecté   Réponse avec citation
Vieux 31/12/2006, 16h18   #11 (permalink)
Spitnolan08
XLDnaute Barbatruc
 
Avatar de Spitnolan08
 
Date d'inscription: décembre 2006
Version Excel : Excel 2003 (PC)
Messages: 2 262
Par défaut Re : Listes déroulantes intégrées en cascade

MyDearFriend, bqtr, Bebere,
Encore merci ; il ne me reste plus qu’à adapter complètement ce code à mes différentes applications.

MyDearFriend, en ce qui concerne la fonction specialcells j’avais tout essayé avant de poster ma question mais je n’avais rien trouvé ni sur l’aide VBA, ni sur l’aide VBE : Dans l’aide VBA il y a des indications sur les différents paramètres de cet argument mais les valeurs des constantes ne sont pas détaillées… J’ai bien sûr re-essayé suite à ton post et j’ai fini par mettre la main dessus. Ceci dit je n’aurais jamais imaginé que l’addition de 2 constantes donnait une troisième constante union des deux précédentes…
Donc merci pour ta réponse.

Pour la bande bleue du menu popup j’ai essayé ta proposition et ça ne marche effectivement que pour le dernier niveau avec une font pas top. Le but de la question était d’essayer de joindre l’utile à l’agréable en utilisant cette zone vierge inusitée, mais comme ta variante de code est superbe : Que demande le peuple ! Au fait combien de niveaux de menus peut on créer dans cette config ?

Label ou TextBox ? Tu as sûrement raison car pour les textbox il faut en plus penser à les locker lorsqu'ils sont uniquement utilisés pour l'affichage.

  • Je savais bien que j’avais oublié une question :
    Lorsqu’un item (a par exemple) de la combo est sélectionné, le menu se déclenche. Une fois la sélection de tous les niveaux achevée ; si on veut revenir en arrière pour modifier son choix dans la même catégorie que l’item de la combo précédemment choisi (a), il faut d’abord en sélectionner un autre (b, c…) puis sélectionner de nouveau le bon item (a) pour que les menus s’affichent, sinon rien ne se passe.
    J’ai depuis essayé différentes modif du code en ajoutant une sub avec des évènements différents pour la combo : Ca produit des effets parfois surprenants mais ça ne marche pas. Et comme je ne comprends pas la raison, j’ai finalement ajouté l’instruction
    ComboBox1.Value = ""
    à la fin de la procédure Private Sub ComboBox1_Click() ce qui améliore légèrement le fonctionnement puisqu’on n’a plus à suivre le chemin alambiqué ci-dessus.

Sur ce, je dis
Courtoisement
Spitnolan08 est déconnecté   Réponse avec citation
Vieux 31/12/2006, 17h02   #12 (permalink)
myDearFriend!
XLDnaute Barbatruc
 
Avatar de myDearFriend!
 
Date d'inscription: février 2005
Messages: 2 238
Par défaut Re : Listes déroulantes intégrées en cascade

Bonjour Spitnolan08, bqtr, Bebere, le Forum,

Citation:
Posté par Spitnolan
Au fait combien de niveaux de menus peut on créer dans cette config ?
A mon avis, techniquement, il n'y a pas de limite, mais il convient tout de même de rester raisonnable pour le confort de l'utilisateur final.


L'ajout de ComboBox1.Value = "" en fin de procédure ComboBox1_Click() devrait effectivement résoudre le problème dont tu parles.

Bonne chance pour la suite de ton projet.
Cordialement,

Meilleurs Voeux à toutes et tous !
__________________
Didier_mDF

www.mdf-xlpages.com
myDearFriend! est déconnecté   Réponse avec citation
Vieux 06/01/2007, 13h48   #13 (permalink)
jjestin
XLDnaute Nouveau
 
Date d'inscription: janvier 2007
Messages: 1
Par défaut Re : Listes déroulantes intégrées en cascade

Bonjour,

Je suis le mari d'un instit. Elle a comme obligation de remplir tous les jours un cahier journal. L'inspection académique fournie aux enseignants la liste des domaines d'activités, les compétences et les activités à travailler.

Je souhaite lui faciliter l'implémentation de son cahier journal avec Excel en utilisant des listes déroulante en cascades.

Je pensais naïvement que je pourrais développer cela sans utiliser VBA car je n'y comprends rien.

Hélas à priori cela n'est pas possible.

Je suis tombé sur ton exemple qui correspond exactement au besoin.

Par contre est-il possible de faire alimenter des cellules d'une feuille de calcul par les valeurs des choix 1, 2, 3 et 4.

Merci par avance pour ton aide.

@+
jjestin est déconnecté   Réponse avec citation
Vieux 06/01/2007, 16h20   #14 (permalink)
myDearFriend!
XLDnaute Barbatruc
 
Avatar de myDearFriend!
 
Date d'inscription: février 2005
Messages: 2 238
Par défaut Re : Listes déroulantes intégrées en cascade

Bonjour jjestin,

Dans l'exemple fourni, tu vois qu'on récupère les valeurs pour les afficher dans des contrôles Label alignés au bas du Userform. Il est possible en effet d'afficher ces valeurs dans des cellules au lieu des contrôles Label.
Cela dit, d'après ce que je lis, je ne suis pas sûr que tu sois sur la bonne voie pour ton projet.
Le mieux, me semble-t'il serait de poster un exemple clair et complet de ce que tu souhaites, accompagnés des travaux que tu as déjà essayé de faire. Attention toutefois à épurer ton fichier pour qu'il puisse être zippé à moins de 50 ko et de veiller à supprimer (ou remplacer) toute donnée confidentielle.
Je pense qu'il conviendrait de créer un nouveau sujet pour ta demande afin de maximiser tes chances d'obtenir d'autres propositions de solutions éventuelles.

Cordialement,
__________________
Didier_mDF

www.mdf-xlpages.com
myDearFriend! est déconnecté   Réponse avec citation
ANNONCES
Réponse



Outils de la discussion

Règles de messages
Vous pouvez ouvrir de nouvelles discussions : nonoui
Vous pouvez envoyer des réponses : nonoui
Vous pouvez insérer des pièces jointes : nonoui
Vous pouvez modifier vos messages : nonoui

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Discussions similaires
Discussion Auteur Forum Réponses Dernier message
listes en cascade tribalspidal Forum Excel 3 07/12/2006 11h15
Listes Déroulantes OMAR Forum Excel 5 10/04/2006 21h24
Listes en cascade Maya Forum Excel 3 02/05/2005 23h50
listes déroulantes en cascade Lu Forum Excel 0 30/03/2005 17h48
listes deroulantes en cascade matou59229 Forum Excel Downloads - Archives 22 07/02/2005 15h39


Fuseau horaire GMT +2. Il est actuellement 03h23.


(C) 2006 Excel Downloads