Macro événementielle déclenchée à partir d'une colonne nommée

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Magic_Doctor

XLDnaute Barbatruc
Bonjour,

Je voudrais déclencher une macro événementielle lorsque je rentre une valeur dans n'importe quelle cellule de 2 colonnes (contiguës) nommées.
La 1ère colonne se nomme : "ColonneLimiteInf"
La seconde : "ColonneLimiteSup"

Dans le module de la feuille j'ai écrit la routine suivante :

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = [ColonneLimiteInf].Address Or [ColonneLimiteSup].Address Then

Bla bla bla....

Endif
End Sub

Et bien ça ne marche pas du tout. En revanche ça fonctionne si je modifie la procédure en utilisant une seule cellule nommée, "Zaza" par exemple au lieu d'une plage.
Avec : If Target.Address = [Zaza].Address Then
Ça marche.

Merci pour toute aide.
 
Re : Macro événementielle déclenchée à partir d'une colonne nommée

Merci vabaCrumble pour ta proposition, mais ça ne marche toujours pas...
J'avais oublié de mentionner qu'en écrivant uniquement :

If Target.Address = [ColonneLimiteInf].Address Then
..................

pour faire le test sur seulement la 1ère colonne nommée, et bien ça ne marchait pas.
Quoi qu'il en soit je pense que nous ne devrions pas être loin de la solution...
 
Re : Macro événementielle déclenchée à partir d'une colonne nommée

Rebonjour,

Je relance le fil au cas où l'un d'entre vous pourrait résoudre cette "énigme".

Comme je le disais, dans un : Private Sub Worksheet_Change(ByVal Target As Range)
je voudrais déclencher un événement chaque fois que je rentre une donnée dans une cellule appartenant à une colonne nommée.
La colonne se nomme : "ColonneLimiteInf".
Si j'écris : If Target.Address = [ColonneLimiteInf].Address Then ............
Ça ne marche pas.
En revanche, en supposant que la première cellule de ladite colonne se nomme : "Zaza", si j'écris :
If Target.Address = [Zaza].Address Then ............
Et bien là ça marche, mais évidemment uniquement pour la 1ère cellule.
La solution néandertalienne serait évidemment de nommer toutes les cellules de la colonne et de réecrire à chaque fois la même condition avec uniquement le nom de la cellule qui change à chaque fois.
Mais n'y aurait-il pas une solution plus élégante et plus concise du style :
Quelle que soit la cellule où est rentrée une donnée et appartenant à la colonne "ColonneLimiteInf" ---> événement ?

Merci de tout conseil.
 
Re : Macro événementielle déclenchée à partir d'une colonne nommée

Bonjour James007. Je travaille bien sous Option Explicit.
Mais ta solution n'a strictement rien changé...
Ça ne marche toujours pas. Du reste cela ne paraît pas étonnant, puisque l'adresse de la colonne comprend plusieurs cellules et que chaque fois que je suis dans une cellule il faudrait uniquement l'adresse de cette cellule.
Bref, c'est agaçant !
 
Re : Macro événementielle déclenchée à partir d'une colonne nommée

Bonjour Magic Doctor, vbacrumble, James007,

Pourquoi se polariser sur Address, qui ne marche pas bien pour une plage ?

Ecrire plutot :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Union([ColonneLimiteInf], [ColonneLimiteSup]) Is Nothing Then
'--------------
End If

Je préfère :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Union([ColonneLimiteInf], [ColonneLimiteSup]) Is Nothing Then Exit Sub
'--------------

Edit : les colonnes étant contigües, on peut remplacer Union par Range

A+
 
Dernière édition:
Re : Macro événementielle déclenchée à partir d'une colonne nommée

Problème réglé !!

If Not Intersect(Target, [ColonneLimiteInf]) Is Nothing Or Not Intersect(Target, [ColonneLimiteSup]) Is Nothing Then ............................
 
Re : Macro événementielle déclenchée à partir d'une colonne nommée

Merci Job pour ta réponse que j'ai reçue juste après mon dernier message.
La syntaxe me paraît beaucoup plue élégante avec :
Intersect(Target, Union([ColonneLimiteInf], [ColonneLimiteSup]) Is Nothing Then ...
qui évite la redondance.
Mais pourquoi donc ça ne marche pas chez moi ??
Quand j'ecris cette sentence, apparaît alors un message d'erreur :
"Erreur de compilation. Un séparateur de liste était attendu"
(je traduis tant bien que mal de l'espagnol...).

C'est dommage, parce que ce "Union" me plaisait bien !
 
Re : Macro événementielle déclenchée à partir d'une colonne nommée

Re,

J'aitout simplement oublié une parenthèse...

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Union([ColonneLimiteInf], [ColonneLimiteSup])[COLOR="Red"])[/COLOR] Is Nothing Then Exit Sub
'--------------

A+
 
Re : Macro événementielle déclenchée à partir d'une colonne nommée

OK, maintenant ça marche, il fallait fermer une parenthèse !!!
If Not Intersect(Target, Union([ColonneLimiteInf], [ColonneLimiteSup])) Is Nothing Then ...

Comme quoi, l'étourderie...

Merci encore Job pour ton "truc".

Bonne fin de journée.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour