![]() |
|
Forum
|
|
|
#1 (permalink) |
|
XLDnaute Barbatruc
Date d'inscription: décembre 2006
Version Excel : Excel 2003 (PC)
Messages: 2 262
|
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 |
|
|
|
| ANNONCES | |||
|
|
|
|
#2 (permalink) |
|
XLDnaute Barbatruc
Date d'inscription: décembre 2006
Version Excel : Excel 2003 (PC)
Messages: 2 262
|
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 |
|
|
|
|
|
#3 (permalink) |
|
XLDnaute Impliqué
Date d'inscription: juillet 2006
Localisation: Nantes
Version Excel : Excel 2003 (PC)
Messages: 866
|
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 |
|
|
|
|
|
#4 (permalink) |
|
XLDnaute Accro
Date d'inscription: mai 2005
Localisation: Tongres
Version Excel : Excel 2000 (PC)
Messages: 1 696
|
bonjour Spitnolan,Bqtr
activé feuille code gestion,sinon pas de données dans les contrôles j'ai ajouté des textbox à bientôt |
|
|
|
|
|
#5 (permalink) |
|
XLDnaute Barbatruc
Date d'inscription: décembre 2006
Version Excel : Excel 2003 (PC)
Messages: 2 262
|
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! ![]() |
|
|
|
|
|
#6 (permalink) |
|
XLDnaute Barbatruc
Date d'inscription: février 2005
Messages: 2 238
|
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
Cordialement, Dernière modification par myDearFriend! 29/12/2006 à 20h22. |
|
|
|
|
|
#7 (permalink) |
|
XLDnaute Barbatruc
Date d'inscription: décembre 2006
Version Excel : Excel 2003 (PC)
Messages: 2 262
|
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 |
|
|
|
|
|
#8 (permalink) |
|
XLDnaute Impliqué
Date d'inscription: juillet 2006
Localisation: Nantes
Version Excel : Excel 2003 (PC)
Messages: 866
|
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 |
|
|
|
|
|
#9 (permalink) |
|
XLDnaute Barbatruc
Date d'inscription: décembre 2006
Version Excel : Excel 2003 (PC)
Messages: 2 262
|
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. |
|
|
|
|
|
#10 (permalink) | ||||
|
XLDnaute Barbatruc
Date d'inscription: février 2005
Messages: 2 238
|
Bonsoir Spitnolan08, bqtr, Bebere,
Tu trouveras ci-joint, une nouvelle adaptation du fichier pour tenter de répondre au mieux à ta demande. Citation:
Code:
.OnAction = "'Niv3 """ & .Caption & """'" Citation:
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
Citation:
Citation:
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, |
||||
|
|
|
|
|
#11 (permalink) |
|
XLDnaute Barbatruc
Date d'inscription: décembre 2006
Version Excel : Excel 2003 (PC)
Messages: 2 262
|
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.
Sur ce, je dis Courtoisement |
|
|
|
|
|
#12 (permalink) | |
|
XLDnaute Barbatruc
Date d'inscription: février 2005
Messages: 2 238
|
Bonjour Spitnolan08, bqtr, Bebere, le Forum,
Citation:
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 ! |
|
|
|
|
|
|
#13 (permalink) |
|
XLDnaute Nouveau
Date d'inscription: janvier 2007
Messages: 1
|
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. @+ |
|
|
|
|
|
#14 (permalink) |
|
XLDnaute Barbatruc
Date d'inscription: février 2005
Messages: 2 238
|
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, |
|
|
|
| ANNONCES | |
![]() |
| Outils de la discussion | |
|
|
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 |