Menu

Liste déroulante dépendante évolutive

Messages postés
26
Date d'inscription
dimanche 29 janvier 2017
Statut
Membre
Dernière intervention
6 mai 2019
-
Bien le bonsoir cher forum!

Je reviens une énième fois vous solliciter sur des questions Excel :-)

Ma nouvelle problématique : je souhaite faire des listes à trois niveaux, chacune dépendante du niveau N-1 et évolutive pour un utilisateur lambda. J'ai donc cherché, sur ce site et sur d'autres et je suis aujourd'hui à la croisée des chemins si j'ose dire^^
Je m'explique :

J'ai trouvé une première méthodes (avec les listes, validations de données, les fonctions INDIRECT & DECALER) qui pourrait me permettre de faire ce que je souhaite (voir fichier ci-joint à l'onglet "Listes déroulantes 2). Le problème est que ce sont des listes qui sont amenées d'une part à évoluer, mais aussi à se multiplier (plus de lignes pour le niveau 1, donc plus de colonnes au niveau 2, etc. et ça va exponentiellement), et les manipulations de mises à jour des listes me semble bien trop complexes pour les utilisateurs (je parle de cas où par exemple on va rajouter une ligne au niveau 1 => il faut créer une colonne au niveau 2, créer une nouvelle liste et créer toutes les colonnes de niveau 3 dépendant de la nouvelle colonne de niveau 2+création de listes...)

La seconde méthode serait avec des macros événementielles qui serait bien plus simple d'utilisation je pense. Mais nouveau problème, lorsque je passe le fichier en "Partagé" (car il doit rester en partagé), j'ai des messages d'alertes que je ne parviens pas à bloquer (même avec displayalert : false), ainsi que l'affichage que je ne parviens pas à figer (on voit les changements rapide de feuille) (voir le même fichier, sur les onglets "Listes déroulantes" & "Données").

La seconde méthode est celle que je souhaite privilégier, mais je suis ouvert à toute proposition ;-)
Du coup ma demande est : qu'est ce qui ne fonctionne pas avec mes macros et comment y remédier?

Merci par avance!

Le lien : https://www.cjoint.com/c/IDDts7WY2tW

Bien cordialement,
NoviceVBA2017
Afficher la suite 

Votre réponse

7 réponses

Messages postés
5313
Date d'inscription
lundi 16 avril 2012
Statut
Contributeur
Dernière intervention
22 mai 2019
313
0
Merci
Bonjour

Le fichier avec une proposition feuille liste déroulante 2

https://www.cjoint.com/c/IEblAXr7lp2
Commenter la réponse de PHILOU10120
Messages postés
26
Date d'inscription
dimanche 29 janvier 2017
Statut
Membre
Dernière intervention
6 mai 2019
0
Merci
Bonjour Philou10120,

Merci pour ce retour, mais ma réelle difficulté ne résidait pas dans la création d'un troisième niveau de liste déroulante. Mon problème, pour garder l'exemple de la feuille "Liste déroulante 2", est que si je créé la lettre "G" dans la liste déroulante de niveau 1, comment mettre à jour automatiquement la liste de niveau 2?
Cette manipulation doit être faisable par des personnes qui ont des connaissances sur excel extrêmement limitées (rien de péjoratif) et c'est pourquoi je trouve la méthode avec les macros plus simple pour l'utilisateur.
Commenter la réponse de NoviceVBA2017
Messages postés
26
Date d'inscription
dimanche 29 janvier 2017
Statut
Membre
Dernière intervention
6 mai 2019
0
Merci
Donc en fait je souhaiterai que les applications displayalert false & screenupdating false fonctionnent^^
Et je ne comprend pas car elles marchent lorsque je les utilise dans d'autres macros. Les seules différences sont que sur celle-ci on est en macro événementiel et en fichier partagé, deux choses que je ne maîtrise pas et qui sont peut être la source de mes problèmes...
Commenter la réponse de NoviceVBA2017
Messages postés
5313
Date d'inscription
lundi 16 avril 2012
Statut
Contributeur
Dernière intervention
22 mai 2019
313
0
Merci
Bonjour

Je ne sais pas pour les macros.
Voici le fichier modifié avec l'ajout de la lettre G

https://cjoint.com/c/IEchDgZXai2
NoviceVBA2017
Messages postés
26
Date d'inscription
dimanche 29 janvier 2017
Statut
Membre
Dernière intervention
6 mai 2019
-
Bonjour Philou10120,

Merci encore pour ton retour, mais je me suis mal exprimé : mon fichier actuel n'est pas fini et c'est normal. Je sais comment ajouter manuellement des éléments dans la liste de N1 et faire de même pour les niveaux suivants.
Ce que je veux c'est que en ajoutant, par exemple le "G" dans le N1, un G se créé en auto dans le N2. Et si je créé quelque chose dans le N2, ça se créé en auto dans le N3
Commenter la réponse de PHILOU10120
Messages postés
15832
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
23 mai 2019
2725
0
Merci
Bonjour à tous,

Apparemment, tu ne travailles que sur une seule feuille: tu nous ouvres pas ni fermes de classeurs, tu ne supprimes pas ni crée de nouvelles feuilles ---> displayalerts ne te sert ici à rien!

screenupdating: je ne vois pas de problèmes mais à la fin de la macro, il se met automatiquement à True donc tu peux supprimer cette ligne.

Quant à mettre calculation à manual: si tu as des formules en cascade, calculation ne les prend pas en compte, il faut une fois la macro terminée appuyer manuellement sur F9;
dans le cas de cette macro je ne l'aurais pas utilisée

Attention aux collisions avec un classeur partagé : une seule personne à la fois !

NoviceVBA2017
Messages postés
26
Date d'inscription
dimanche 29 janvier 2017
Statut
Membre
Dernière intervention
6 mai 2019
-
Bonjour Michel_m,

Merci pour ton retour.

Comment puis-je procéder pour que ça fonctionne alors? Le screenupdating et le calculation manual relèvent plus du confort pour l'utilisateur, mais le message d'alerte est véritablement problématique... existe t'il un moyen de contourner le problème?

Merci encore.

(La feuille "Liste déroulante 2 n'est pas à prendre en compte sur la macro")
Commenter la réponse de michel_m
Messages postés
26
Date d'inscription
dimanche 29 janvier 2017
Statut
Membre
Dernière intervention
6 mai 2019
0
Merci
Bonjour à tous,

J'ai peut être trouvé la solution qui fonctionne à priori bien :

En début de macro : if activeworkbook.multiuserediting then activeworkbook.exclusiveacess
Et je le repasse en partage en fin de macro.

Je n'ai en revanche pas l'opportunité de tester cela si plusieurs personnes sont sur le fichier... quels serait les impacts potentiels de passer en accès exclusif si quelqu'un d'autre est aussi sur le fichier? Ca planterait?
Commenter la réponse de NoviceVBA2017
Messages postés
15832
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
23 mai 2019
2725
0
Merci
Bonjour,

Ca planterait?

Il y a de fortes possibilités que oui

Le screenupdating et le calculation manual relèvent plus du confort pour l'utilisateur,

Ben voyons!
screenupdating diminue grandement la durée d'une macro
Calculationmanual : si il y a des cascades de formules, cela oblige à ce que l'utilisateur n'oublie pas d appuyer sur F9 une fois la macro exécutée sinon il te dira qu'il y a des erreurs de calcul: BRAVO POUR LE CONFORT de TOUS...

J'ai essayé de t"expliquer mais comme tu ne veux rien savoir, bonne continuation.

 Michel
NoviceVBA2017
Messages postés
26
Date d'inscription
dimanche 29 janvier 2017
Statut
Membre
Dernière intervention
6 mai 2019
-
Bonjour Michael,

Je n’ai pas précisé mais concernant le screenupdating, je le désactive en début de macro et comme tu l’as précisé, il se réactive tout seul en fin de macro -> j’ai retiré l’activation du screenupdating en fin de macro

Concernant le calculationmanual, je le repasse en auto en fin de macro -> pas de F9 à faire en fin de macro par l’utilisateur.

Concernant le displayalert je l’ai supprimé -> pas de problème

Donc, si, je t’écoute, même si je le l’ai pas précisé dans mes messages.

A présent, comme je le disais plus haut, tout semble fonctionner mais j’ai des doutes sur le fait de passer en acces exclusif puis de le repartager automatiquement en fin de macro.
Tu sembles dire qu’il y a des possibilités pour que ça plante : pourquoi et que puis-je faire pour y palier?
michel_m
Messages postés
15832
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
23 mai 2019
2725 -
c'est toujours le B... avec les classeurs partagés !!!
Voir
https://support.office.com/fr-fr/article/en-savoir-plus-sur-la-fonctionnalit%C3%A9-classeur-partag%C3%A9-49b833c0-873b-48d8-8bf2-c1c59a628534?redirectSourcePath=%252ffr-fr%252farticle%252fUtiliser-un-classeur-partag%2525C3%2525A9-pour-collaborer-b8207fe9-a613-483f-b804-0ca4658b0c61&ui=fr-FR&rs=fr-FR&ad=FR

Et surtout
http://dj.joss.free.fr/reso.htm

Tu peux aussi tester si le classeur est fermé ou ouvert

Function FichOuvert(F As String) As Boolean
Dim Wk As Workbook
On Error Resume Next
Set Wk = Workbooks(F)
On Error GoTo 0
FichOuvert = Not Wk Is Nothing
End Function


macro sur chaque classeur utilisateur avec une msgbox "patientez"
F : chemin complet de ton classeur partagé
Commenter la réponse de michel_m