OVH Cloud OVH Cloud

Worksheet_change systématique dans tout classeur ouvert

6 réponses
Avatar
Philippe
Bonjour nouveau venu en Excel VBA et macros
comment rendre systématique, la gestion de l'événement Worksheet change dans
la feuille 1 de TOUT classeur ouvert
par exemple

Sub Worksheet_Change(ByVal Target As Range)
Target.Interior.ColorIndex = 4
End sub
Cette routine mis dans le code de la feuille 1 du classeur ouvert (clique
droit sur onglet feuille1/code) fonctionne

Je souhaite que cette routine fonctionne pour la feuille_1 de TOUT classeur
: NOUVEAU ou EXISTANT
j'ai essayé via XLA: ai mis cette routine dans Feuil1 du projet mySub.xla,
ai ouvert un nouveau classeur, ai activé macro complémentaire mySub, mais ne
fonctionne pas

Merci poir votre aide

6 réponses

Avatar
Yvan
Bonjour Philippe.

Dans une macro complémentaire, oui! C'est la solution la plus élégante, mais
peut-être un peu délicat pour débuter VBA (si tu es vraiment si débutant que çà).

Il faut créer dans ta macro complémentaire deux modules dont un module de classe.
Appelons Module1 le module "ordinaire" (qui existe peut-être déjà) et XLEvenements le
module de classe. XLEvenements est un gestionnaire d'évènements qui intercepte tout
évènement d'Excel.

Ouvrir un nouveau classeur, faire Alt+F11 pour ouvrir l'éditeur VB. Choisir le
VBAProject du nouveau classeur. Insérer le module et le module de classe. Les
renommer avec la fenêtre Propriétés

Puis écrire le code de départ des deux modules (Commencer par XLEvenements)

Pour XLEvenements:

********
Option Explicit
Private WithEvents xlApp As Excel.Application

Private Sub Class_Initialize()
Set xlApp = Excel.Application
End Sub

Private Sub xlApp_WorkbookOpen(ByVal Wb As Excel.Workbook)
'
' Ce qu'il y a à faire sur le classeur Wb lorsqu'il s'ouvre
'
End Sub
*****

Pour Module1

****************
Option Explicit
Public evtEvents As XLEvenements

Public Sub Auto_Open()
Set evtEvents = New XLEvenements
End Sub

Et c'est parti. Il reste à enregistrer çà en MaMacroCompl.xla, la charger dans Excel
avec Options/Macros Complémentaires.

A enrichir au fur et à mesure.

Je te souhaitebien du plaisir. C'est super mais il y a des cheveux qui vont y rester
en cours de route.


Yvan


"Philippe" <Philippe @discussions.microsoft.com> a écrit dans le message de news:

| Bonjour nouveau venu en Excel VBA et macros
| comment rendre systématique, la gestion de l'événement Worksheet change dans
| la feuille 1 de TOUT classeur ouvert
| par exemple
|
| Sub Worksheet_Change(ByVal Target As Range)
| Target.Interior.ColorIndex = 4
| End sub
| Cette routine mis dans le code de la feuille 1 du classeur ouvert (clique
| droit sur onglet feuille1/code) fonctionne
|
| Je souhaite que cette routine fonctionne pour la feuille_1 de TOUT classeur
| : NOUVEAU ou EXISTANT
| j'ai essayé via XLA: ai mis cette routine dans Feuil1 du projet mySub.xla,
| ai ouvert un nouveau classeur, ai activé macro complémentaire mySub, mais ne
| fonctionne pas
|
| Merci poir votre aide
Avatar
Philippe
Merci yan pour ton aide,
débutant en programmation (VB, C#..): NON, en Excel VBA et macros OUI, j'ai
fouillé et trouvé comment dans une feuille de classeur prendre la main sur le
changement de contenu d'une cellule.. j'ai trouvé qu'il existait des macros
générailisables XLA , mais je ne vois pas comment ajouter le code de la
feuille gerant le change, dans la feuille du doucument ouvrant (nouveau ou
existant)

Dans le module de classe XLEvenements dois je utiliser la routine
xlApp_WorkbookOpen pour remplir le code de la feuille_1 du Wb ouvrant du
code souhaité et comment ??

Je ne perçois pas l'utilité du module1

Encore Merci



Bonjour Philippe.

Dans une macro complémentaire, oui! C'est la solution la plus élégante, mais
peut-être un peu délicat pour débuter VBA (si tu es vraiment si débutant que çà).

Il faut créer dans ta macro complémentaire deux modules dont un module de classe.
Appelons Module1 le module "ordinaire" (qui existe peut-être déjà) et XLEvenements le
module de classe. XLEvenements est un gestionnaire d'évènements qui intercepte tout
évènement d'Excel.

Ouvrir un nouveau classeur, faire Alt+F11 pour ouvrir l'éditeur VB. Choisir le
VBAProject du nouveau classeur. Insérer le module et le module de classe. Les
renommer avec la fenêtre Propriétés

Puis écrire le code de départ des deux modules (Commencer par XLEvenements)

Pour XLEvenements:

********
Option Explicit
Private WithEvents xlApp As Excel.Application

Private Sub Class_Initialize()
Set xlApp = Excel.Application
End Sub

Private Sub xlApp_WorkbookOpen(ByVal Wb As Excel.Workbook)
'
' Ce qu'il y a à faire sur le classeur Wb lorsqu'il s'ouvre
'
End Sub
*****

Pour Module1

****************
Option Explicit
Public evtEvents As XLEvenements

Public Sub Auto_Open()
Set evtEvents = New XLEvenements
End Sub

Et c'est parti. Il reste à enregistrer çà en MaMacroCompl.xla, la charger dans Excel
avec Options/Macros Complémentaires.

A enrichir au fur et à mesure.

Je te souhaitebien du plaisir. C'est super mais il y a des cheveux qui vont y rester
en cours de route.


Yvan


"Philippe" <Philippe @discussions.microsoft.com> a écrit dans le message de news:

| Bonjour nouveau venu en Excel VBA et macros
| comment rendre systématique, la gestion de l'événement Worksheet change dans
| la feuille 1 de TOUT classeur ouvert
| par exemple
|
| Sub Worksheet_Change(ByVal Target As Range)
| Target.Interior.ColorIndex = 4
| End sub
| Cette routine mis dans le code de la feuille 1 du classeur ouvert (clique
| droit sur onglet feuille1/code) fonctionne
|
| Je souhaite que cette routine fonctionne pour la feuille_1 de TOUT classeur
| : NOUVEAU ou EXISTANT
| j'ai essayé via XLA: ai mis cette routine dans Feuil1 du projet mySub.xla,
| ai ouvert un nouveau classeur, ai activé macro complémentaire mySub, mais ne
| fonctionne pas
|
| Merci poir votre aide





Avatar
LSteph
Bonjour,

là tu gères les évennements au niveau de( l'instance) excel Application
cette modalité requiert bien un module de classe mais fonctionne par appel
d'un module "ordinaire".
Aussi Attention s'il s'agit comme le suggère aussi dans ta demande
d'un classeur ouvert ou existant:
Celui-ci peut très bien renfermer ou non une feuil1
et cette feuil1 peut très bien avoir déjà un évennement Worksheet_change
cela pourrait être ennuyeux aussi, plutôt que de récrire dans le code ce qui
t'obligerait
à modifier le niveau de sécurité et faire confiance au projet
la solution prosée par Yvan utilise l'ouverture d'un nouveau classeur et
laisse libre cours à
' Ce qu'il y a à faire sur le classeur Wb lorsqu'il s'ouvre



Selon ton besoin tu peux aussi envisager d'autres évennements.

lSteph

"Philippe" a écrit dans le message de
news:
Merci yan pour ton aide,
débutant en programmation (VB, C#..): NON, en Excel VBA et macros OUI,
j'ai
fouillé et trouvé comment dans une feuille de classeur prendre la main sur
le
changement de contenu d'une cellule.. j'ai trouvé qu'il existait des
macros
générailisables XLA , mais je ne vois pas comment ajouter le code de la
feuille gerant le change, dans la feuille du doucument ouvrant (nouveau
ou
existant)

Dans le module de classe XLEvenements dois je utiliser la routine
xlApp_WorkbookOpen pour remplir le code de la feuille_1 du Wb ouvrant du
code souhaité et comment ??

Je ne perçois pas l'utilité du module1

Encore Merci



Bonjour Philippe.

Dans une macro complémentaire, oui! C'est la solution la plus élégante,
mais
peut-être un peu délicat pour débuter VBA (si tu es vraiment si débutant
que çà).

Il faut créer dans ta macro complémentaire deux modules dont un module de
classe.
Appelons Module1 le module "ordinaire" (qui existe peut-être déjà) et
XLEvenements le
module de classe. XLEvenements est un gestionnaire d'évènements qui
intercepte tout
évènement d'Excel.

Ouvrir un nouveau classeur, faire Alt+F11 pour ouvrir l'éditeur VB.
Choisir le
VBAProject du nouveau classeur. Insérer le module et le module de classe.
Les
renommer avec la fenêtre Propriétés

Puis écrire le code de départ des deux modules (Commencer par
XLEvenements)

Pour XLEvenements:

********
Option Explicit
Private WithEvents xlApp As Excel.Application

Private Sub Class_Initialize()
Set xlApp = Excel.Application
End Sub

Private Sub xlApp_WorkbookOpen(ByVal Wb As Excel.Workbook)
'
' Ce qu'il y a à faire sur le classeur Wb lorsqu'il s'ouvre
'
End Sub
*****

Pour Module1

****************
Option Explicit
Public evtEvents As XLEvenements

Public Sub Auto_Open()
Set evtEvents = New XLEvenements
End Sub

Et c'est parti. Il reste à enregistrer çà en MaMacroCompl.xla, la charger
dans Excel
avec Options/Macros Complémentaires.

A enrichir au fur et à mesure.

Je te souhaitebien du plaisir. C'est super mais il y a des cheveux qui
vont y rester
en cours de route.


Yvan


"Philippe" <Philippe @discussions.microsoft.com> a écrit dans le message
de news:

| Bonjour nouveau venu en Excel VBA et macros
| comment rendre systématique, la gestion de l'événement Worksheet change
dans
| la feuille 1 de TOUT classeur ouvert
| par exemple
|
| Sub Worksheet_Change(ByVal Target As Range)
| Target.Interior.ColorIndex = 4
| End sub
| Cette routine mis dans le code de la feuille 1 du classeur ouvert
(clique
| droit sur onglet feuille1/code) fonctionne
|
| Je souhaite que cette routine fonctionne pour la feuille_1 de TOUT
classeur
| : NOUVEAU ou EXISTANT
| j'ai essayé via XLA: ai mis cette routine dans Feuil1 du projet
mySub.xla,
| ai ouvert un nouveau classeur, ai activé macro complémentaire mySub,
mais ne
| fonctionne pas
|
| Merci poir votre aide







Avatar
Yvan
Oui Philippe.

Tu vois, pour les cheveux, çà commence!


1 - Le role de Module1
=============== Le module 1 est un recueil de procédures (macros si tu préfères). Tu pourras en
mettre autant que tu veux.

Il est nécessaire ici pour créer le gestionnaire d'évènements. D'une part en créant
la variable xlEvents, d'autre part en l'initialisant pour rendre le gestionnaire
d'évènements opérationnel. L'initialisation est faite par l'instruction Set
evtEvents = New XLEVENEMENTS.

Cette instruction est dans la procédure Auto_Open, qui démarre avec la macro
complémentaire, c'est à dire soit quand on la charge, soit quand on démarre Excel si
la macro est déjà chargée.

Résumé: Le module 1 sert à charger le gestionnaire d'évènements et à héberger une
partie des procédures utiles au fonctionnement du projet

2 - Le rôle du Gestionnaire d'évènements
===========================
Le code que je t'ai donné sert à initialiser le gestionnaire. A chaque évènement, il
va regarder si tu lui as fourni une instruction correspondant à l'évènement.

Pour reprendre ton exemple initial:

| > | par exemple
| > |
| > | Sub Worksheet_Change(ByVal Target As Range)
| > | Target.Interior.ColorIndex = 4
| > | End sub

Tu te places dans le module de classe et tu cherches dans la liste déroulante en haut
à droite l'évènement correspondant. Tu trouves et tu sélectionne SheetChange. S'ouvre
alors une procédure xlApp_SheetChange que tu peux compléter comme ceci:


Private Sub xlApp_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Beep
Target.Interior.ColorIndex = 4
End Sub


Tu pourrais aussi la renseigner ainsi:
Private Sub xlApp_SheetChange(ByVal Sh As Object, ByVal Target As Range)
call Module1.Procedure1(target)
end sub


avec dans Module1

Sub Procedure1(Cible as range)
Cible.Interior.ColorIndex = 4
End Sub

En résumé, le Gestionnaire d'évènements intercepte les évènements d'Excel et exécute
les procédures associées définies par l'utilisateur.



Je sais, c'est assez rébarbatif au départ, mais on s'y fait assez vite.

Bon courage.

@+

Yvan


"Philippe" a écrit dans le message de news:

| Merci yan pour ton aide,
| débutant en programmation (VB, C#..): NON, en Excel VBA et macros OUI, j'ai
| fouillé et trouvé comment dans une feuille de classeur prendre la main sur le
| changement de contenu d'une cellule.. j'ai trouvé qu'il existait des macros
| générailisables XLA , mais je ne vois pas comment ajouter le code de la
| feuille gerant le change, dans la feuille du doucument ouvrant (nouveau ou
| existant)
|
| Dans le module de classe XLEvenements dois je utiliser la routine
| xlApp_WorkbookOpen pour remplir le code de la feuille_1 du Wb ouvrant du
| code souhaité et comment ??
|
| Je ne perçois pas l'utilité du module1
|
| Encore Merci
|
|
|
| > Bonjour Philippe.
| >
| > Dans une macro complémentaire, oui! C'est la solution la plus élégante, mais
| > peut-être un peu délicat pour débuter VBA (si tu es vraiment si débutant que çà).
| >
| > Il faut créer dans ta macro complémentaire deux modules dont un module de classe.
| > Appelons Module1 le module "ordinaire" (qui existe peut-être déjà) et
XLEvenements le
| > module de classe. XLEvenements est un gestionnaire d'évènements qui intercepte
tout
| > évènement d'Excel.
| >
| > Ouvrir un nouveau classeur, faire Alt+F11 pour ouvrir l'éditeur VB. Choisir le
| > VBAProject du nouveau classeur. Insérer le module et le module de classe. Les
| > renommer avec la fenêtre Propriétés
| >
| > Puis écrire le code de départ des deux modules (Commencer par XLEvenements)
| >
| > Pour XLEvenements:
| >
| > ********
| > Option Explicit
| > Private WithEvents xlApp As Excel.Application
| >
| > Private Sub Class_Initialize()
| > Set xlApp = Excel.Application
| > End Sub
| >
| > Private Sub xlApp_WorkbookOpen(ByVal Wb As Excel.Workbook)
| > '
| > ' Ce qu'il y a à faire sur le classeur Wb lorsqu'il s'ouvre
| > '
| > End Sub
| > *****
| >
| > Pour Module1
| >
| > ****************
| > Option Explicit
| > Public evtEvents As XLEvenements
| >
| > Public Sub Auto_Open()
| > Set evtEvents = New XLEvenements
| > End Sub
| >
| > Et c'est parti. Il reste à enregistrer çà en MaMacroCompl.xla, la charger dans
Excel
| > avec Options/Macros Complémentaires.
| >
| > A enrichir au fur et à mesure.
| >
| > Je te souhaitebien du plaisir. C'est super mais il y a des cheveux qui vont y
rester
| > en cours de route.
| >
| >
| > Yvan
| >
| >
| > "Philippe" <Philippe @discussions.microsoft.com> a écrit dans le message de news:
| >
| > | Bonjour nouveau venu en Excel VBA et macros
| > | comment rendre systématique, la gestion de l'événement Worksheet change dans
| > | la feuille 1 de TOUT classeur ouvert
| > | par exemple
| > |
| > | Sub Worksheet_Change(ByVal Target As Range)
| > | Target.Interior.ColorIndex = 4
| > | End sub
| > | Cette routine mis dans le code de la feuille 1 du classeur ouvert (clique
| > | droit sur onglet feuille1/code) fonctionne
| > |
| > | Je souhaite que cette routine fonctionne pour la feuille_1 de TOUT classeur
| > | : NOUVEAU ou EXISTANT
| > | j'ai essayé via XLA: ai mis cette routine dans Feuil1 du projet mySub.xla,
| > | ai ouvert un nouveau classeur, ai activé macro complémentaire mySub, mais ne
| > | fonctionne pas
| > |
| > | Merci poir votre aide
| >
| >
| >
Avatar
Philippe
Merci encore pour toutes ces infos,
je re-travaillerai le sujet ce soir

Pour info , le vrai problème est que je crée le classeur xls en ASP Net via
C# et XML, et qu'il n'est pas possible de créer le code VBA (je ne sais pas
faire). J'ai donc chercher du côté de xla de façon à ce que chaque fois que
le classeur XLS crée par Asp Net( qui porte chaque fois un nom différent)
sera ouvert la routine workshheet_change de la 1ere feuille: worksheets(1)
soit activée. je compte ensuite distibué le XLA à tous les utilisateurs
concernés de l'application Intranet.

Philippe


Oui Philippe.

Tu vois, pour les cheveux, çà commence!


1 - Le role de Module1
=============== > Le module 1 est un recueil de procédures (macros si tu préfères). Tu pourras en
mettre autant que tu veux.

Il est nécessaire ici pour créer le gestionnaire d'évènements. D'une part en créant
la variable xlEvents, d'autre part en l'initialisant pour rendre le gestionnaire
d'évènements opérationnel. L'initialisation est faite par l'instruction Set
evtEvents = New XLEVENEMENTS.

Cette instruction est dans la procédure Auto_Open, qui démarre avec la macro
complémentaire, c'est à dire soit quand on la charge, soit quand on démarre Excel si
la macro est déjà chargée.

Résumé: Le module 1 sert à charger le gestionnaire d'évènements et à héberger une
partie des procédures utiles au fonctionnement du projet

2 - Le rôle du Gestionnaire d'évènements
=========================== >
Le code que je t'ai donné sert à initialiser le gestionnaire. A chaque évènement, il
va regarder si tu lui as fourni une instruction correspondant à l'évènement.

Pour reprendre ton exemple initial:

| > | par exemple
| > |
| > | Sub Worksheet_Change(ByVal Target As Range)
| > | Target.Interior.ColorIndex = 4
| > | End sub

Tu te places dans le module de classe et tu cherches dans la liste déroulante en haut
à droite l'évènement correspondant. Tu trouves et tu sélectionne SheetChange. S'ouvre
alors une procédure xlApp_SheetChange que tu peux compléter comme ceci:


Private Sub xlApp_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Beep
Target.Interior.ColorIndex = 4
End Sub


Tu pourrais aussi la renseigner ainsi:
Private Sub xlApp_SheetChange(ByVal Sh As Object, ByVal Target As Range)
call Module1.Procedure1(target)
end sub


avec dans Module1

Sub Procedure1(Cible as range)
Cible.Interior.ColorIndex = 4
End Sub

En résumé, le Gestionnaire d'évènements intercepte les évènements d'Excel et exécute
les procédures associées définies par l'utilisateur.



Je sais, c'est assez rébarbatif au départ, mais on s'y fait assez vite.

Bon courage.

@+

Yvan


"Philippe" a écrit dans le message de news:

| Merci yan pour ton aide,
| débutant en programmation (VB, C#..): NON, en Excel VBA et macros OUI, j'ai
| fouillé et trouvé comment dans une feuille de classeur prendre la main sur le
| changement de contenu d'une cellule.. j'ai trouvé qu'il existait des macros
| générailisables XLA , mais je ne vois pas comment ajouter le code de la
| feuille gerant le change, dans la feuille du doucument ouvrant (nouveau ou
| existant)
|
| Dans le module de classe XLEvenements dois je utiliser la routine
| xlApp_WorkbookOpen pour remplir le code de la feuille_1 du Wb ouvrant du
| code souhaité et comment ??
|
| Je ne perçois pas l'utilité du module1
|
| Encore Merci
|
|
|
| > Bonjour Philippe.
| >
| > Dans une macro complémentaire, oui! C'est la solution la plus élégante, mais
| > peut-être un peu délicat pour débuter VBA (si tu es vraiment si débutant que çà).
| >
| > Il faut créer dans ta macro complémentaire deux modules dont un module de classe.
| > Appelons Module1 le module "ordinaire" (qui existe peut-être déjà) et
XLEvenements le
| > module de classe. XLEvenements est un gestionnaire d'évènements qui intercepte
tout
| > évènement d'Excel.
| >
| > Ouvrir un nouveau classeur, faire Alt+F11 pour ouvrir l'éditeur VB. Choisir le
| > VBAProject du nouveau classeur. Insérer le module et le module de classe. Les
| > renommer avec la fenêtre Propriétés
| >
| > Puis écrire le code de départ des deux modules (Commencer par XLEvenements)
| >
| > Pour XLEvenements:
| >
| > ********
| > Option Explicit
| > Private WithEvents xlApp As Excel.Application
| >
| > Private Sub Class_Initialize()
| > Set xlApp = Excel.Application
| > End Sub
| >
| > Private Sub xlApp_WorkbookOpen(ByVal Wb As Excel.Workbook)
| > '
| > ' Ce qu'il y a à faire sur le classeur Wb lorsqu'il s'ouvre
| > '
| > End Sub
| > *****
| >
| > Pour Module1
| >
| > ****************
| > Option Explicit
| > Public evtEvents As XLEvenements
| >
| > Public Sub Auto_Open()
| > Set evtEvents = New XLEvenements
| > End Sub
| >
| > Et c'est parti. Il reste à enregistrer çà en MaMacroCompl.xla, la charger dans
Excel
| > avec Options/Macros Complémentaires.
| >
| > A enrichir au fur et à mesure.
| >
| > Je te souhaitebien du plaisir. C'est super mais il y a des cheveux qui vont y
rester
| > en cours de route.
| >
| >
| > Yvan
| >
| >
| > "Philippe" <Philippe @discussions.microsoft.com> a écrit dans le message de news:
| >
| > | Bonjour nouveau venu en Excel VBA et macros
| > | comment rendre systématique, la gestion de l'événement Worksheet change dans
| > | la feuille 1 de TOUT classeur ouvert
| > | par exemple
| > |
| > | Sub Worksheet_Change(ByVal Target As Range)
| > | Target.Interior.ColorIndex = 4
| > | End sub
| > | Cette routine mis dans le code de la feuille 1 du classeur ouvert (clique
| > | droit sur onglet feuille1/code) fonctionne
| > |
| > | Je souhaite que cette routine fonctionne pour la feuille_1 de TOUT classeur
| > | : NOUVEAU ou EXISTANT
| > | j'ai essayé via XLA: ai mis cette routine dans Feuil1 du projet mySub.xla,
| > | ai ouvert un nouveau classeur, ai activé macro complémentaire mySub, mais ne
| > | fonctionne pas
| > |
| > | Merci poir votre aide
| >
| >
| >





Avatar
Philippe
Re Bonjour,
Merci beaucoup Yvan pour toutes ces explications bien documentées, claires
et précises.
Effectivement cela marche très bien.
Je n'avais pas perçu au 1er tour que je pouvais gérer l'évenement de on
change de la feuille (Worksheet_Change) au niveau de l'application
(xlApp_sheetChange)
Comme l'évenement me retourne la feuille , j'ai pu filtrer sur le nom pour
éviter de toucher des feuilles non concernées (Merci Lsteph pour ce conseil)

Philippe



Oui Philippe.

Tu vois, pour les cheveux, çà commence!


1 - Le role de Module1
=============== > Le module 1 est un recueil de procédures (macros si tu préfères). Tu pourras en
mettre autant que tu veux.

Il est nécessaire ici pour créer le gestionnaire d'évènements. D'une part en créant
la variable xlEvents, d'autre part en l'initialisant pour rendre le gestionnaire
d'évènements opérationnel. L'initialisation est faite par l'instruction Set
evtEvents = New XLEVENEMENTS.

Cette instruction est dans la procédure Auto_Open, qui démarre avec la macro
complémentaire, c'est à dire soit quand on la charge, soit quand on démarre Excel si
la macro est déjà chargée.

Résumé: Le module 1 sert à charger le gestionnaire d'évènements et à héberger une
partie des procédures utiles au fonctionnement du projet

2 - Le rôle du Gestionnaire d'évènements
=========================== >
Le code que je t'ai donné sert à initialiser le gestionnaire. A chaque évènement, il
va regarder si tu lui as fourni une instruction correspondant à l'évènement.

Pour reprendre ton exemple initial:

| > | par exemple
| > |
| > | Sub Worksheet_Change(ByVal Target As Range)
| > | Target.Interior.ColorIndex = 4
| > | End sub

Tu te places dans le module de classe et tu cherches dans la liste déroulante en haut
à droite l'évènement correspondant. Tu trouves et tu sélectionne SheetChange. S'ouvre
alors une procédure xlApp_SheetChange que tu peux compléter comme ceci:


Private Sub xlApp_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Beep
Target.Interior.ColorIndex = 4
End Sub


Tu pourrais aussi la renseigner ainsi:
Private Sub xlApp_SheetChange(ByVal Sh As Object, ByVal Target As Range)
call Module1.Procedure1(target)
end sub


avec dans Module1

Sub Procedure1(Cible as range)
Cible.Interior.ColorIndex = 4
End Sub

En résumé, le Gestionnaire d'évènements intercepte les évènements d'Excel et exécute
les procédures associées définies par l'utilisateur.



Je sais, c'est assez rébarbatif au départ, mais on s'y fait assez vite.

Bon courage.

@+

Yvan


"Philippe" a écrit dans le message de news:

| Merci yan pour ton aide,
| débutant en programmation (VB, C#..): NON, en Excel VBA et macros OUI, j'ai
| fouillé et trouvé comment dans une feuille de classeur prendre la main sur le
| changement de contenu d'une cellule.. j'ai trouvé qu'il existait des macros
| générailisables XLA , mais je ne vois pas comment ajouter le code de la
| feuille gerant le change, dans la feuille du doucument ouvrant (nouveau ou
| existant)
|
| Dans le module de classe XLEvenements dois je utiliser la routine
| xlApp_WorkbookOpen pour remplir le code de la feuille_1 du Wb ouvrant du
| code souhaité et comment ??
|
| Je ne perçois pas l'utilité du module1
|
| Encore Merci
|
|
|
| > Bonjour Philippe.
| >
| > Dans une macro complémentaire, oui! C'est la solution la plus élégante, mais
| > peut-être un peu délicat pour débuter VBA (si tu es vraiment si débutant que çà).
| >
| > Il faut créer dans ta macro complémentaire deux modules dont un module de classe.
| > Appelons Module1 le module "ordinaire" (qui existe peut-être déjà) et
XLEvenements le
| > module de classe. XLEvenements est un gestionnaire d'évènements qui intercepte
tout
| > évènement d'Excel.
| >
| > Ouvrir un nouveau classeur, faire Alt+F11 pour ouvrir l'éditeur VB. Choisir le
| > VBAProject du nouveau classeur. Insérer le module et le module de classe. Les
| > renommer avec la fenêtre Propriétés
| >
| > Puis écrire le code de départ des deux modules (Commencer par XLEvenements)
| >
| > Pour XLEvenements:
| >
| > ********
| > Option Explicit
| > Private WithEvents xlApp As Excel.Application
| >
| > Private Sub Class_Initialize()
| > Set xlApp = Excel.Application
| > End Sub
| >
| > Private Sub xlApp_WorkbookOpen(ByVal Wb As Excel.Workbook)
| > '
| > ' Ce qu'il y a à faire sur le classeur Wb lorsqu'il s'ouvre
| > '
| > End Sub
| > *****
| >
| > Pour Module1
| >
| > ****************
| > Option Explicit
| > Public evtEvents As XLEvenements
| >
| > Public Sub Auto_Open()
| > Set evtEvents = New XLEvenements
| > End Sub
| >
| > Et c'est parti. Il reste à enregistrer çà en MaMacroCompl.xla, la charger dans
Excel
| > avec Options/Macros Complémentaires.
| >
| > A enrichir au fur et à mesure.
| >
| > Je te souhaitebien du plaisir. C'est super mais il y a des cheveux qui vont y
rester
| > en cours de route.
| >
| >
| > Yvan
| >
| >
| > "Philippe" <Philippe @discussions.microsoft.com> a écrit dans le message de news:
| >
| > | Bonjour nouveau venu en Excel VBA et macros
| > | comment rendre systématique, la gestion de l'événement Worksheet change dans
| > | la feuille 1 de TOUT classeur ouvert
| > | par exemple
| > |
| > | Sub Worksheet_Change(ByVal Target As Range)
| > | Target.Interior.ColorIndex = 4
| > | End sub
| > | Cette routine mis dans le code de la feuille 1 du classeur ouvert (clique
| > | droit sur onglet feuille1/code) fonctionne
| > |
| > | Je souhaite que cette routine fonctionne pour la feuille_1 de TOUT classeur
| > | : NOUVEAU ou EXISTANT
| > | j'ai essayé via XLA: ai mis cette routine dans Feuil1 du projet mySub.xla,
| > | ai ouvert un nouveau classeur, ai activé macro complémentaire mySub, mais ne
| > | fonctionne pas
| > |
| > | Merci poir votre aide
| >
| >
| >