Liste déroulante dépendante évolutive

Fermé
NoviceVBA2017 Messages postés 26 Date d'inscription dimanche 29 janvier 2017 Statut Membre Dernière intervention 6 mai 2019 - Modifié le 29 avril 2019 à 22:34
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 6 mai 2019 à 14:24
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

7 réponses

PHILOU10120 Messages postés 6368 Date d'inscription lundi 16 avril 2012 Statut Contributeur Dernière intervention 22 avril 2024 796
1 mai 2019 à 13:28
Bonjour

Le fichier avec une proposition feuille liste déroulante 2

https://www.cjoint.com/c/IEblAXr7lp2
0
NoviceVBA2017 Messages postés 26 Date d'inscription dimanche 29 janvier 2017 Statut Membre Dernière intervention 6 mai 2019
1 mai 2019 à 14:29
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.
0
NoviceVBA2017 Messages postés 26 Date d'inscription dimanche 29 janvier 2017 Statut Membre Dernière intervention 6 mai 2019
1 mai 2019 à 18:34
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...
0
PHILOU10120 Messages postés 6368 Date d'inscription lundi 16 avril 2012 Statut Contributeur Dernière intervention 22 avril 2024 796
2 mai 2019 à 09:29
Bonjour

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

https://cjoint.com/c/IEchDgZXai2
0
NoviceVBA2017 Messages postés 26 Date d'inscription dimanche 29 janvier 2017 Statut Membre Dernière intervention 6 mai 2019
2 mai 2019 à 20:53
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié le 2 mai 2019 à 11:46
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 !

0
NoviceVBA2017 Messages postés 26 Date d'inscription dimanche 29 janvier 2017 Statut Membre Dernière intervention 6 mai 2019
Modifié le 2 mai 2019 à 21:01
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")
0
NoviceVBA2017 Messages postés 26 Date d'inscription dimanche 29 janvier 2017 Statut Membre Dernière intervention 6 mai 2019
5 mai 2019 à 15:21
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?
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
6 mai 2019 à 09:36
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
0
NoviceVBA2017 Messages postés 26 Date d'inscription dimanche 29 janvier 2017 Statut Membre Dernière intervention 6 mai 2019
6 mai 2019 à 13:24
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?
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié le 6 mai 2019 à 14:26
c'est toujours le B... avec les classeurs partagés !!!
Voir
https://support.microsoft.com/fr-fr/office/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é
0