Répercussion de la mise à jour d'une liste de validation

Bonjour

J'aimerais que lorsque je modifie une valeur source d'une liste de de validation, toutes les cellules qui y font référence via une liste déroulante soient mise à jour automatiquement.

J'ai trouvé un code VBA (que j'ai adapté) qui permet de le faire sur une cellule (voir fichier joint)

Mais comment le faire sur toute une plage de cellules ...

J'ai essayé un Each, mais je n'arrive pas à le programmer ...

Quelqu'un peut il m'aider ?

Merci

Bonjour

Un essai. Te convient-il ?

gmb a écrit :

Bonjour

Un essai. Te convient-il ?

Bonjour ... merci beaucoup, je pense que ça va le faire ...

Petite question : est-il possible d'en faire un code "indépendant" . Cela donnerait

Private Sub Worksheet_Change(ByVal Target As Range)

Rafraichir_contenu

End Sub

Sub Rafraichir_contenu ()

'ton code'

End Sub

En effet, cela me permettrait de lancer éventuellement d'autres "macro" sur d'autres modif de cellules ...

Merci encore

Tu écris :

est-il possible d'en faire un code "indépendant" .

Bien sûr, c’est possible de faire comme tu l’indiques. Mais ce ne sera plus une macro événementielle qui se déchenche lors d’une validation de cellule de la feuille. Il te faudra mettre un bouton sur lequel cliquer ou aller dans le menu ‘’DEVELOPPEUR – Macros’’

Si tu veux garder un déclenchement automatique, tu dois rester dans la macro ‘Private Sub Worksheet_Change(ByVal Target As Range) et distinguer avec des if … elseif … end if sur quelle plage de cellule se trouve Target, la cellule que tu as validée.

OK ?

Bye !

gmb a écrit :

Tu écris :

est-il possible d'en faire un code "indépendant" .

Bien sûr, c’est possible de faire comme tu l’indiques. Mais ce ne sera plus une macro événementielle qui se déchenche lors d’une validation de cellule de la feuille. Il te faudra mettre un bouton sur lequel cliquer ou aller dans le menu ‘’DEVELOPPEUR – Macros’’

Si tu veux garder un déclenchement automatique, tu dois rester dans la macro ‘Private Sub Worksheet_Change(ByVal Target As Range) et distinguer avec des if … elseif … end if sur quelle plage de cellule se trouve Target, la cellule que tu as validée.

OK ?

Bye !

Ok .... merci

gmb a écrit :

Mais ce ne sera plus une macro événementielle qui se déchenche lors d’une validation de cellule de la feuille. Il te faudra mettre un bouton sur lequel cliquer ou aller dans le menu ‘’DEVELOPPEUR – Macros’’

Si tu veux garder un déclenchement automatique, tu dois rester dans la macro ‘Private Sub Worksheet_Change(ByVal Target As Range) et distinguer avec des if … elseif … end if sur quelle plage de cellule se trouve Target, la cellule que tu as validée.

OK ?

Bye !

Rebonjour

J'ai essayé d'étendre ton travail à toute une zone qui se trouve dans une autre feuille ... Cela fonctionne, mais il y a un problème : même les dates sont changées ... Comment régler cela ?

Merci

Bonjour

Tu écris :

Cela fonctionne, mais il y a un problème : même les dates sont changées ... Comment régler cela ?

Dans le fichier original que tu as joint à ton premier message, les valeurs que pouvaient prendre les cellules modifiées étaient toutes contenues dans la plage ‘’Punitions’’ (Code) de la feuille ‘’Données’’.

Dans ce nouveau fichier, la plage des cellules modifiées contient des cellules qui peuvent aussi contenir des dates, auquel cas elles ne sont pas concernées par les modifications.

La macro du fichier ci-joint tient compte de cette nouvelle particularité et, si une cellule de la feuille 4 E n’est pas une date et ne figure plus dans la liste de la plage ‘’Punitions ‘’, elle est remplacée par la valeur de la cellule qui vient de changer dans cette plage.

Mais si il y a dans la feuille 4 E autre chose que des dates ou des valeurs de la liste ‘’Punitions’’, tu auras le même problème…

OK ?

Bye !

gmb a écrit :

Bonjour

Tu écris :

Cela fonctionne, mais il y a un problème : même les dates sont changées ... Comment régler cela ?

(...)

Mais si il y a dans la feuille 4 E autre chose que des dates ou des valeurs de la liste ‘’Punitions’’, tu auras le même problème…

OK ?

Bye !

Merci. Je comprends mieux. Il ne dois pas y avoir autre chose, donc cela me convient parfaitement...

Maintenant je vais essayer de généraliser les modifs à plusieurs feuilles (il peut y en avoir 4, 5 etc ..) mais je vais chercher d'abord et si j'ai un problème, je le dirais.

En attendant, je mets le sujet en RESOLU.

Merci

gmb a écrit :

Bonjour

(...)

Mais si il y a dans la feuille 4 E autre chose que des dates ou des valeurs de la liste ‘’Punitions’’, tu auras le même problème…

OK ?

Bye !

En fait je rencontre le problème (voir fil nommé "divers problèmes" ... Peux tu m'expliquer pourquoi il y a ce type de problèmes ?

Et comment le régler ?

Merci

gmb a écrit :

Bonjour

La macro du fichier ci-joint tient compte de cette nouvelle particularité et, si une cellule de la feuille 4 E n’est pas une date et ne figure plus dans la liste de la plage ‘’Punitions ‘’, elle est remplacée par la valeur de la cellule qui vient de changer dans cette plage.

Bonjour

Je ne comprends cette phrase "elle est remplacée par la valeur de la cellule qui vient de changer dans cette plage."

Peux tu m'expliquer ?

Merci

Bonjour

Je regarderai ça ce soir.

A bientôt.

Bonjour

Je t’ai écris, dans un précédent message :

Mais si il y a dans la feuille 4 E autre chose que des dates ou des valeurs de la liste ‘’Punitions’’, tu auras le même problème…

A quoi tu me réponds :

En fait je rencontre le problème... Peux tu m'expliquer pourquoi il y a ce type de problèmes ?

Et comment le régler ?

Le travail à faire consiste à modifier un élément de la liste « Punitions » sur la feuille « Données », plage C7 :C15 et obtenir la modification automatique de tous les éléments correspondants dans la feuille « 4 E »

Une macro événementielle attachée la feuille « Données » s’en charge.

Mais, quand la macro se déclenche, on vient de valider la modification d’une cellule de la liste. On connait cette nouvelle valeur : celle de la cellule Target qu’on vient de valider, mais pas celle qu’il y avait avant qu’elle ne soit validée.

Exemple : On sélectionne la cellule C14 (ligne 14 colonne C) sur laquelle est inscrit « AtW »

On modifie cette cellule en y saisissant par exemple « AtXX »

Dès qu’on valide, la macro se lance et elle connait la valeur « AtXX » mais elle ne peut pas deviner la valeur qu’il y avait avant (« AtW ») et pourtant, dans la feuille "4 E" il faut qu'elle remplace tous les AtW par des AtXX

Pour contourner le problème, la macro va passer toutes les cellules de la feuille « 4 E » et regarder ce qu’elles contiennent.

Si ce qu’elles contiennent est une date, elle passe à la cellule suivante

Si ce n’est pas une date, elle regarde si le contenu existe dans la liste « Punition ».

Si oui, elle passe à la cellule suivante. Si c’est non, c’est que le contenu de la cellule examinée correspond à une valeur qui n’existe plus dans la liste punition parce qu’une valeur de cette liste vient de changer et que c’est précisément cette nouvelle valeur qu’il faut mettre dans la cellule.

OK ?

Mais…

Mais supposons qu’ il y ait dans le tableau de la feuille « 4 E » la valeur « HS » qui ne figure pas dans la liste punition. La macro, lorsqu’elle va examiner cette cellule va regarder si « HS » figure sur la liste punition et ne la trouvera pas. Donc elle la remplacera par la valeur de punition qui vient de changer « AtXX » dans notre exemple.

Ce qui répond à ta deuxième question :

Je ne comprends cette phrase "elle est remplacée par la valeur de la cellule qui vient de changer dans cette plage."

Peux tu m'expliquer ?

Pour en sortir, ou au moins essayer, il faudrait déjà que je comprenne ce qu’il peut bien y avoir d’autre dans ton tableau « 4 E ». Peut-on en faire une liste exhaustive qui pourrait permettre à la macro de sauter la cellule qui les contient, comme pour les dates ?

A te relire

Je comprends maintenant ... C'est clair. En fait, cela rejoint un autre de mes problèmes qui est le changement de couleur du fond d'une cellule ...

Mais alors pour contourner, ne peut-on pas utiliser

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Lors de la sélection de la cellule, la macro stocke le contenu de la cellule.. et quand c'est validé, il compare et remplace toutes les anciennes valeurs par la nouvelle ...

J'ai fait un nouveau post qui s'appelle "divers problèmes", mais je veux bien te reposter mon fichier, car j'ai beaucoup avancé cet après midi et le fichier à changé.

En fait ce que je veux :

Dans la feuille "données"

Si je modifie un élément de la zone B7:B15, cela se répercute sur toutes les feuille 5A 4E .. (contenu dans classe_liste)

Si je modifie un élément de la zone B18:B28, cela se répercute sur toutes colonnes D des feuilles Planning 4eme (et les futurs autres)

Si je modifie un élément de la zone B31:B37, cela se répercute sur toutes colonnes B des feuilles Planning 4eme (et les futurs autres)

Mais en fait je veux encore plus :

Dans la feuille "Chapitres 4eme"

Si je modifie un élément de la zone B5:B10, cela se répercute sur tous les éléments correspondants dans la feuille Progression 4eme Idem pour les futurs couples Chapitres 5eme/Progression 5eme ... etc

Et encore mieux .. j'aimerais que les couleurs aussi soient répercutées en même temps éventuellement.

Et je ne sais pas encore quelles autres feuilles il y aura, donc je cherche vraiment à faire un appel à une procédure qui marcherait dans tous les cas ...

J'en profite pour te proposer un autre problème. Dans la feuille "Progression 4eme", si tu cliques en A1, un UserForm1 s'ouvre et affiche le contenu long des zones en couleurs... Par contre si je clique sur une cellule vide, il conserve le texte précédent. Comment faire disparaître le texte dans ce cas là.

De plus, au lieu de cliquer en A1, j'aimerais passer par le bouton Bascule "LIB". mais cela ne marche pas bien, les lignes correspondantes sont écrites en commentaires juste au dessus des lignes qui marchent pour A1. Peux tu voir ?

Merci pour tout et pour ta patience ..

un petit up !!!

C'est bon, c'est réglé ...

En fait, j'ai fait deux parties. Dans :

Sub WorkSheet_SelectionChange(ByVal Target As Range)

J'ai stocké dans une cellule nommé Tempo le texte et la couleur de fond

Puis, dans :

Sub WorkSheet_Change(ByVal Target As Range)

Je compare la valeur de target avec celle de Tempo.

S'il y a une différence, alors je lance une procédure qui remplace dans une plage cible toutes les valeurs tempo par les valeurs de Target.

Voila ...

Merci à tous

Rechercher des sujets similaires à "repercussion mise jour liste validation"