OVH Cloud OVH Cloud

Macro déclenchée sur changement du contenu du classeur

11 réponses
Avatar
Old Jack
Bonjour,

Certainement, la question a déjà été posée, mais je n'ai pas trouvé de
réponses ni dans la FAQ, ni dans ce forum.

Comme le titre l'indique, je voudrais que ma macro se déclenche dés que
le contenu du classeur change. J'ai utilisé les codes fournis dans
l'aide, mais ça marche po :'(.

Dans le 'module de classe' (d'ailleurs, j'aimerais comprendre la
différence entre module de classe et module), j'ai mis ça :

Public WithEvents App As Application
Private Sub Worksheet_Change(ByVal Target As Range)
col = numcol(Target.Address())
lig = numlig(Target.Address())
MsgBox ("Le contenu de " + col + "," + lig + " a changé")
End Sub

Dans le 'module', j'ai mis ça :

Dim X As New EventClassModule
Sub InitializeApp()
Set X.App = Application
End Sub

Quand je change le contenu d'une cellule, il me dit 'Erreur de
compilation, type défini par l'utilisateur non défini', en bloquant sur
'X As New EventClassModule'

Comme c'est la première fois que je tente ce genre de truc, je sèche.
Si quelqu'un avait l'infinie gentillesse de me donner un p'tit coup de
main ^^ !

Merci d'avance !!!

--
cordialement,
Old Jack (http://scolamath.free.fr)

10 réponses

1 2
Avatar
RaMA
Bonsoir

Si tu veux piéger l'évenement Change
au niveau classeur tu mets ton code dans thisworkbook
au niveau feuillle tu places le code dans feuil1 ou 2......

Salutations
RaMa
--
.
"Old Jack" a écrit dans le message de
news:
Bonjour,

Certainement, la question a déjà été posée, mais je n'ai pas trouvé de
réponses ni dans la FAQ, ni dans ce forum.

Comme le titre l'indique, je voudrais que ma macro se déclenche dés que
le contenu du classeur change. J'ai utilisé les codes fournis dans
l'aide, mais ça marche po :'(.

Dans le 'module de classe' (d'ailleurs, j'aimerais comprendre la
différence entre module de classe et module), j'ai mis ça :

Public WithEvents App As Application
Private Sub Worksheet_Change(ByVal Target As Range)
col = numcol(Target.Address())
lig = numlig(Target.Address())
MsgBox ("Le contenu de " + col + "," + lig + " a changé")
End Sub

Dans le 'module', j'ai mis ça :

Dim X As New EventClassModule
Sub InitializeApp()
Set X.App = Application
End Sub

Quand je change le contenu d'une cellule, il me dit 'Erreur de
compilation, type défini par l'utilisateur non défini', en bloquant sur
'X As New EventClassModule'

Comme c'est la première fois que je tente ce genre de truc, je sèche.
Si quelqu'un avait l'infinie gentillesse de me donner un p'tit coup de
main ^^ !

Merci d'avance !!!

--
cordialement,
Old Jack (http://scolamath.free.fr)



Avatar
Old Jack
RaMA a couché sur son écran :
Bonsoir
Bonsoir

Si tu veux piéger l'évenement Change
au niveau classeur tu mets ton code dans thisworkbook
au niveau feuillle tu places le code dans feuil1 ou 2......


Ok, donc, au lieu de placer les deux parties dans (respectivement)
'Modules/module1' et 'Modules de classe/Classe1', je place le code
suivant :

Private Sub Worksheet_Change(ByVal Target As Range)
col = numcol(Target.Address())
lig = numlig(Target.Address())
MsgBox ("Le contenu de " + col + "," + lig + " a changé")
End Sub

...dans 'Microsoft Excel Objets/ThisWorkbook'.

Mais quand je retourne dans mon classeur et que je met 'k' dans F6, par
exemple, cela ne déclenche rien du tout (d'affichage du message '...a
changé' que devrait m'afficher ma macro)

Peux-tu m'éclairer ? Je pense qu'il y a une notion de base que je n'ai
pas saisie.

--
cordialement,
Old Jack (http://scolamath.free.fr)

Avatar
RaMA
'exemple avec le code dans thisworkbook
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Fol = Sh.Name
Sh.Activate
adr = ActiveCell.Address
col = ActiveCell.Column
lig = ActiveCell.Row
MsgBox Fol & " " & adr & " " & col & " " & lig & ActiveCell.Value
End Sub

Rama
--
.
"Old Jack" a écrit dans le message de
news:
RaMA a couché sur son écran :
Bonsoir
Bonsoir

Si tu veux piéger l'évenement Change
au niveau classeur tu mets ton code dans thisworkbook
au niveau feuillle tu places le code dans feuil1 ou 2......


Ok, donc, au lieu de placer les deux parties dans (respectivement)
'Modules/module1' et 'Modules de classe/Classe1', je place le code
suivant :

Private Sub Worksheet_Change(ByVal Target As Range)
col = numcol(Target.Address())
lig = numlig(Target.Address())
MsgBox ("Le contenu de " + col + "," + lig + " a changé")
End Sub

...dans 'Microsoft Excel Objets/ThisWorkbook'.

Mais quand je retourne dans mon classeur et que je met 'k' dans F6, par
exemple, cela ne déclenche rien du tout (d'affichage du message '...a
changé' que devrait m'afficher ma macro)

Peux-tu m'éclairer ? Je pense qu'il y a une notion de base que je n'ai
pas saisie.

--
cordialement,
Old Jack (http://scolamath.free.fr)




Avatar
Daniel.M
Allo,

Peux-tu m'éclairer ? Je pense qu'il y a une notion de base que je n'ai
pas saisie.


Tu dois utiliser Workbook_SheetChange() si tu te places au niveau du classeur.
L'événement Worksheet_Change() appartient à ta feuille (si tu mettais le code au
niveau de cette feuille).

Salutations,

Daniel M.

Avatar
Jean-François Aubert
Salut Old Jack,

Ceci fonctionne si tu changes manuellement le contenu d'une cellule.
Est-ce cela que tu recherches ?

A placer dans le ThisWorkbook


Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim col, lig
col = Target.Column
lig = Target.Row
MsgBox ("Le contenu de la colonne " & col & ", ligne " & _
lig & " de la feuille " & Sh.Name & " a changé")
End Sub

--
Amicalement

Jean-François Aubert
{Vaudois de la Côte Lémanique}


"Old Jack" a écrit dans le message de news:
Bonjour,

Certainement, la question a déjà été posée, mais je n'ai pas trouvé de
réponses ni dans la FAQ, ni dans ce forum.

Comme le titre l'indique, je voudrais que ma macro se déclenche dés que
le contenu du classeur change. J'ai utilisé les codes fournis dans
l'aide, mais ça marche po :'(.

Dans le 'module de classe' (d'ailleurs, j'aimerais comprendre la
différence entre module de classe et module), j'ai mis ça :

Public WithEvents App As Application
Private Sub Worksheet_Change(ByVal Target As Range)
col = numcol(Target.Address())
lig = numlig(Target.Address())
MsgBox ("Le contenu de " + col + "," + lig + " a changé")
End Sub

Dans le 'module', j'ai mis ça :

Dim X As New EventClassModule
Sub InitializeApp()
Set X.App = Application
End Sub

Quand je change le contenu d'une cellule, il me dit 'Erreur de
compilation, type défini par l'utilisateur non défini', en bloquant sur
'X As New EventClassModule'

Comme c'est la première fois que je tente ce genre de truc, je sèche.
Si quelqu'un avait l'infinie gentillesse de me donner un p'tit coup de
main ^^ !

Merci d'avance !!!

--
cordialement,
Old Jack (http://scolamath.free.fr)



Avatar
Old Jack
Daniel.M avait prétendu :
Allo,

Peux-tu m'éclairer ? Je pense qu'il y a une notion de base que je n'ai
pas saisie.


Merci !


--
cordialement,
Old Jack (http://scolamath.free.fr)


Avatar
Old Jack
Merci ! : ça marche, et j'ai compris.

--
cordialement,
Old Jack (http://scolamath.free.fr)
Avatar
Old Jack
Jean-François Aubert avait écrit le 05/08/2004 :
Salut Old Jack,

Ceci fonctionne si tu changes manuellement le contenu d'une cellule.
Est-ce cela que tu recherches ?
Oui.


A placer dans le ThisWorkbook


Merci ! ça marche.

--
cordialement,
Old Jack (http://scolamath.free.fr)

Avatar
sabatier
ça, c'est vraiment l'idéal, Old Jack, car moi, c'est jamais les deux et
jamais le second non plus...
jps

"Old Jack" a écrit dans le message de
news:
Merci ! : ça marche, et j'ai compris.

--
cordialement,
Old Jack (http://scolamath.free.fr)



Avatar
Old Jack
sabatier a présenté l'énoncé suivant :
ça, c'est vraiment l'idéal, Old Jack, car moi, c'est jamais les deux et
jamais le second non plus...
jps

"Old Jack" a écrit dans le message de
news:
Merci ! : ça marche, et j'ai compris.

--
cordialement,
Old Jack (http://scolamath.free.fr)



:')

--
cordialement,
Old Jack (http://scolamath.free.fr)


1 2