mystère...

Le
Chris MICHEL
J'ai dcouvert il y a peu le code permettant de lancer des
macros automatiquement chaque modif d'un feuille donne.
Je faisais quelques tests et je suis tomb sur un truc que
je ne comprends pas. Je prcise que je bosse sous Excel 97.

quand je tape:

Private Sub worksheet_change(ByVal target As Excel.Range)

Range("a1").Value = Range("a1").Value + 1

End Sub

A1 est incrmente de 336 (?!) chaque fois que je
modifie la feuille

quand je tape:

Private Sub worksheet_change(ByVal target As Excel.Range)

Range("a2").Value = Range("a2").Value & "test"

End Sub

A2 est incrmente de 336 fois "test" (jusque l, tout est
logiqueau moins)

mais quand je tape:

Private Sub worksheet_change(ByVal target As Excel.Range)

Range("a1").Value = Range("a1").Value + 1
Range("a2").Value = Range("a2").Value & "test"

End Sub

on voit A1 et A2 devenir dingues et s'incrmenter sans fin
(enfin, je sais pas s'il y a une fin, je craque vers 10000)

qqun peut-il m'expliquer pourquoi?
Vos réponses Page 1 / 2
Trier par : date / pertinence
Ellimac
Le #331198
Bonjour,

A priori cela vient du menu Outils/Options/Modification et
de la décimale fixe à décocher. Le pourquoi je n'en sait
rien ma foi.

Camille

-----Message d'origine-----
J'ai découvert il y a peu le code permettant de lancer
des

macros automatiquement à chaque modif d'un feuille
donnée.

Je faisais quelques tests et je suis tombé sur un truc
que

je ne comprends pas. Je précise que je bosse sous Excel
97.


quand je tape:

Private Sub worksheet_change(ByVal target As Excel.Range)

Range("a1").Value = Range("a1").Value + 1

End Sub

A1 est incrémentée de 336 (?!) à chaque fois que je
modifie la feuille

quand je tape:

Private Sub worksheet_change(ByVal target As Excel.Range)

Range("a2").Value = Range("a2").Value & "test"

End Sub

A2 est incrémentée de 336 fois "test" (jusque là, tout
est

logiqueau moins)

mais quand je tape:

Private Sub worksheet_change(ByVal target As Excel.Range)

Range("a1").Value = Range("a1").Value + 1
Range("a2").Value = Range("a2").Value & "test"

End Sub

on voit A1 et A2 devenir dingues et s'incrémenter sans
fin

(enfin, je sais pas s'il y a une fin, je craque vers
10000)


qqun peut-il m'expliquer pourquoi?
.



Le #331194
salut Camille,

Non, suite à ton message, j'ai essayé avec cette option
cochée et décochée et ça n'a rien changé.

Le mystère reste donc entier...

merci quand même.



-----Message d'origine-----
Bonjour,

A priori cela vient du menu Outils/Options/Modification
et

de la décimale fixe à décocher. Le pourquoi je n'en sait
rien ma foi.

Camille

-----Message d'origine-----
J'ai découvert il y a peu le code permettant de lancer
des

macros automatiquement à chaque modif d'un feuille
donnée.

Je faisais quelques tests et je suis tombé sur un truc
que

je ne comprends pas. Je précise que je bosse sous Excel
97.


quand je tape:

Private Sub worksheet_change(ByVal target As Excel.Range)

Range("a1").Value = Range("a1").Value + 1

End Sub

A1 est incrémentée de 336 (?!) à chaque fois que je
modifie la feuille

quand je tape:

Private Sub worksheet_change(ByVal target As Excel.Range)

Range("a2").Value = Range("a2").Value & "test"

End Sub

A2 est incrémentée de 336 fois "test" (jusque là, tout
est

logiqueau moins)

mais quand je tape:

Private Sub worksheet_change(ByVal target As Excel.Range)

Range("a1").Value = Range("a1").Value + 1
Range("a2").Value = Range("a2").Value & "test"

End Sub

on voit A1 et A2 devenir dingues et s'incrémenter sans
fin

(enfin, je sais pas s'il y a une fin, je craque vers
10000)


qqun peut-il m'expliquer pourquoi?
.

.





Chris MICHEL
Le #331193
salut Camille,

Suite à ton message, j'ai essayé avec l'option cochée et
décochée mais ça n'a rien changé.

le mystère reste donc entier.

Merci quand même.
-----Message d'origine-----
Bonjour,

A priori cela vient du menu Outils/Options/Modification
et

de la décimale fixe à décocher. Le pourquoi je n'en sait
rien ma foi.

Camille

-----Message d'origine-----
J'ai découvert il y a peu le code permettant de lancer
des

macros automatiquement à chaque modif d'un feuille
donnée.

Je faisais quelques tests et je suis tombé sur un truc
que

je ne comprends pas. Je précise que je bosse sous Excel
97.


quand je tape:

Private Sub worksheet_change(ByVal target As Excel.Range)

Range("a1").Value = Range("a1").Value + 1

End Sub

A1 est incrémentée de 336 (?!) à chaque fois que je
modifie la feuille

quand je tape:

Private Sub worksheet_change(ByVal target As Excel.Range)

Range("a2").Value = Range("a2").Value & "test"

End Sub

A2 est incrémentée de 336 fois "test" (jusque là, tout
est

logiqueau moins)

mais quand je tape:

Private Sub worksheet_change(ByVal target As Excel.Range)

Range("a1").Value = Range("a1").Value + 1
Range("a2").Value = Range("a2").Value & "test"

End Sub

on voit A1 et A2 devenir dingues et s'incrémenter sans
fin

(enfin, je sais pas s'il y a une fin, je craque vers
10000)


qqun peut-il m'expliquer pourquoi?
.

.





docmarti
Le #331190
Bonjour.

'Avant de générer un nouveau changement qui ferait appel
'à cette même fonction, désactiver les événements.

Private Sub worksheet_change(ByVal target As Excel.Range)
'Avant de générer un nouveau changement qui ferait appel
'à cette même fonction, désactiver les événements.
Application.EnableEvents = False
Range("a1").Value = Range("a1").Value + 1
Application.EnableEvents = True

End Sub
"Chris MICHEL" news:08f501c3d913$b630e6d0$
salut Camille,

Suite à ton message, j'ai essayé avec l'option cochée et
décochée mais ça n'a rien changé.

le mystère reste donc entier.

Merci quand même.
-----Message d'origine-----
Bonjour,

A priori cela vient du menu Outils/Options/Modification
et

de la décimale fixe à décocher. Le pourquoi je n'en sait
rien ma foi.

Camille

-----Message d'origine-----
J'ai découvert il y a peu le code permettant de lancer
des

macros automatiquement à chaque modif d'un feuille
donnée.

Je faisais quelques tests et je suis tombé sur un truc
que

je ne comprends pas. Je précise que je bosse sous Excel
97.


quand je tape:

Private Sub worksheet_change(ByVal target As Excel.Range)

Range("a1").Value = Range("a1").Value + 1

End Sub

A1 est incrémentée de 336 (?!) à chaque fois que je
modifie la feuille

quand je tape:

Private Sub worksheet_change(ByVal target As Excel.Range)

Range("a2").Value = Range("a2").Value & "test"

End Sub

A2 est incrémentée de 336 fois "test" (jusque là, tout
est

logiqueau moins)

mais quand je tape:

Private Sub worksheet_change(ByVal target As Excel.Range)

Range("a1").Value = Range("a1").Value + 1
Range("a2").Value = Range("a2").Value & "test"

End Sub

on voit A1 et A2 devenir dingues et s'incrémenter sans
fin

(enfin, je sais pas s'il y a une fin, je craque vers
10000)


qqun peut-il m'expliquer pourquoi?
.

.





Daniel.M
Le #331191
Bonjour,

L'événement change la valeur d'une cellule qui provoque un nouvel événement qui
change la valeur d'une cellule qui...

Donc boucle sans fin.

Solution: Mettre Application.EnableEvents = False avant de changer la valeur et
le remettre ensuite à True.

Donc:

Private Sub worksheet_change(ByVal target As Excel.Range)
Application.EnableEvents = False
Range("a1").Value = Range("a1").Value + 1
Application.EnableEvents = True
End Sub

Salutations,

Daniel M.

"Chris MICHEL" news:07bb01c3d909$100211d0$
J'ai découvert il y a peu le code permettant de lancer des
macros automatiquement à chaque modif d'un feuille donnée.
Je faisais quelques tests et je suis tombé sur un truc que
je ne comprends pas. Je précise que je bosse sous Excel 97.

quand je tape:

Private Sub worksheet_change(ByVal target As Excel.Range)

Range("a1").Value = Range("a1").Value + 1

End Sub

A1 est incrémentée de 336 (?!) à chaque fois que je
modifie la feuille

quand je tape:

Private Sub worksheet_change(ByVal target As Excel.Range)

Range("a2").Value = Range("a2").Value & "test"

End Sub

A2 est incrémentée de 336 fois "test" (jusque là, tout est
logiqueau moins)

mais quand je tape:

Private Sub worksheet_change(ByVal target As Excel.Range)

Range("a1").Value = Range("a1").Value + 1
Range("a2").Value = Range("a2").Value & "test"

End Sub

on voit A1 et A2 devenir dingues et s'incrémenter sans fin
(enfin, je sais pas s'il y a une fin, je craque vers 10000)

qqun peut-il m'expliquer pourquoi?
docmarti
Le #331804
Voici ce qu'en dit Laurent Longpré :
http://longre.free.fr/pages/prog/evenements.htm

Comme les procédures événementielles sont déclenchées de manière automatique
non seulement par les actions effectuées par les utilisateurs, mais aussi
par les actions déclenchées par macro, l'instruction Target.Offset(0,1) TypeName(Target) provoque en effet un appel récursif de la procédure
Workbook_Sheet_Change, qui s'appelle elle-même jusqu'à ce qu'une erreur soit
rencontrée ou alors que la mémoire réservée à la pile d'appel soit épuisée.

Pour éviter cet appel récursif, il est nécessaire de désactiver
temporairement le déclenchement automatique des procédures événementielles
avant l'instruction susceptible de provoquer un appel récursif, et de le
réactiver ensuite :

Private Sub Workbook_SheetChange(ByVal Sh As Object, _
ByVal Target As Excel.Range)
If Target.Count > 1 Then Exit Sub
Application.EnableEvents = False
Target.Offset(0, 1) = TypeName(Target.Value)
Application.EnableEvents = True
End Sub


"Chris MICHEL" news:08f501c3d913$b630e6d0$
salut Camille,

Suite à ton message, j'ai essayé avec l'option cochée et
décochée mais ça n'a rien changé.

le mystère reste donc entier.

Merci quand même.
-----Message d'origine-----
Bonjour,

A priori cela vient du menu Outils/Options/Modification
et

de la décimale fixe à décocher. Le pourquoi je n'en sait
rien ma foi.

Camille

-----Message d'origine-----
J'ai découvert il y a peu le code permettant de lancer
des

macros automatiquement à chaque modif d'un feuille
donnée.

Je faisais quelques tests et je suis tombé sur un truc
que

je ne comprends pas. Je précise que je bosse sous Excel
97.


quand je tape:

Private Sub worksheet_change(ByVal target As Excel.Range)

Range("a1").Value = Range("a1").Value + 1

End Sub

A1 est incrémentée de 336 (?!) à chaque fois que je
modifie la feuille

quand je tape:

Private Sub worksheet_change(ByVal target As Excel.Range)

Range("a2").Value = Range("a2").Value & "test"

End Sub

A2 est incrémentée de 336 fois "test" (jusque là, tout
est

logiqueau moins)

mais quand je tape:

Private Sub worksheet_change(ByVal target As Excel.Range)

Range("a1").Value = Range("a1").Value + 1
Range("a2").Value = Range("a2").Value & "test"

End Sub

on voit A1 et A2 devenir dingues et s'incrémenter sans
fin

(enfin, je sais pas s'il y a une fin, je craque vers
10000)


qqun peut-il m'expliquer pourquoi?
.

.





Chris Michel
Le #331775
Bonjour,

pas bète!! Je comprends pourquoi l'évènement n'a pas lieu
qu'une fois.

Par contre, pourquoi s'arrète-t'il à 336 itérations dans
un cas et ne s'arrète-t'il pas dans l'autre cas?

Je sais que je pinaile et qu'on s'en fout, mais c'est
juste par curiosité.

En tous cas, merci Daniel.

-----Message d'origine-----
Bonjour,

L'événement change la valeur d'une cellule qui provoque
un nouvel événement qui

change la valeur d'une cellule qui...

Donc boucle sans fin.

Solution: Mettre Application.EnableEvents = False avant
de changer la valeur et

le remettre ensuite à True.

Donc:

Private Sub worksheet_change(ByVal target As Excel.Range)
Application.EnableEvents = False
Range("a1").Value = Range("a1").Value + 1
Application.EnableEvents = True
End Sub

Salutations,

Daniel M.

"Chris MICHEL" wrote in message

news:07bb01c3d909$100211d0$
J'ai découvert il y a peu le code permettant de lancer des
macros automatiquement à chaque modif d'un feuille donnée.
Je faisais quelques tests et je suis tombé sur un truc que
je ne comprends pas. Je précise que je bosse sous Excel
97.


quand je tape:

Private Sub worksheet_change(ByVal target As Excel.Range)

Range("a1").Value = Range("a1").Value + 1

End Sub

A1 est incrémentée de 336 (?!) à chaque fois que je
modifie la feuille

quand je tape:

Private Sub worksheet_change(ByVal target As Excel.Range)

Range("a2").Value = Range("a2").Value & "test"

End Sub

A2 est incrémentée de 336 fois "test" (jusque là, tout est
logiqueau moins)

mais quand je tape:

Private Sub worksheet_change(ByVal target As Excel.Range)

Range("a1").Value = Range("a1").Value + 1
Range("a2").Value = Range("a2").Value & "test"

End Sub

on voit A1 et A2 devenir dingues et s'incrémenter sans fin
(enfin, je sais pas s'il y a une fin, je craque vers
10000)


qqun peut-il m'expliquer pourquoi?


.



Chris Michel
Le #331773
Merci de ta réponse qui rejoint celle de Daniel.

Par contre, je ne comprends toujours pas pourquoi dans un
cas il s'arrète au bout de 336 fois (mémoire pleine,
déja?) et pourquoi dans un cas il ne s'arrète pas?

Enfin, le plus important, c'est que je peux utiliser ce
bout de code désormais.


-----Message d'origine-----
Voici ce qu'en dit Laurent Longpré :
http://longre.free.fr/pages/prog/evenements.htm

Comme les procédures événementielles sont déclenchées de
manière automatique

non seulement par les actions effectuées par les
utilisateurs, mais aussi

par les actions déclenchées par macro, l'instruction
Target.Offset(0,1) =

TypeName(Target) provoque en effet un appel récursif de
la procédure

Workbook_Sheet_Change, qui s'appelle elle-même jusqu'à ce
qu'une erreur soit

rencontrée ou alors que la mémoire réservée à la pile
d'appel soit épuisée.


Pour éviter cet appel récursif, il est nécessaire de
désactiver

temporairement le déclenchement automatique des
procédures événementielles

avant l'instruction susceptible de provoquer un appel
récursif, et de le

réactiver ensuite :

Private Sub Workbook_SheetChange(ByVal Sh As Object, _
ByVal Target As Excel.Range)
If Target.Count > 1 Then Exit Sub
Application.EnableEvents = False
Target.Offset(0, 1) = TypeName(Target.Value)
Application.EnableEvents = True
End Sub


"Chris MICHEL" wrote in message

news:08f501c3d913$b630e6d0$
salut Camille,

Suite à ton message, j'ai essayé avec l'option cochée et
décochée mais ça n'a rien changé.

le mystère reste donc entier.

Merci quand même.
-----Message d'origine-----
Bonjour,

A priori cela vient du menu Outils/Options/Modification
et

de la décimale fixe à décocher. Le pourquoi je n'en sait
rien ma foi.

Camille

-----Message d'origine-----
J'ai découvert il y a peu le code permettant de lancer
des

macros automatiquement à chaque modif d'un feuille
donnée.

Je faisais quelques tests et je suis tombé sur un truc
que

je ne comprends pas. Je précise que je bosse sous Excel
97.


quand je tape:

Private Sub worksheet_change(ByVal target As
Excel.Range)




Range("a1").Value = Range("a1").Value + 1

End Sub

A1 est incrémentée de 336 (?!) à chaque fois que je
modifie la feuille

quand je tape:

Private Sub worksheet_change(ByVal target As
Excel.Range)




Range("a2").Value = Range("a2").Value & "test"

End Sub

A2 est incrémentée de 336 fois "test" (jusque là, tout
est

logiqueau moins)

mais quand je tape:

Private Sub worksheet_change(ByVal target As
Excel.Range)




Range("a1").Value = Range("a1").Value + 1
Range("a2").Value = Range("a2").Value & "test"

End Sub

on voit A1 et A2 devenir dingues et s'incrémenter sans
fin

(enfin, je sais pas s'il y a une fin, je craque vers
10000)


qqun peut-il m'expliquer pourquoi?
.

.





.





Daniel.M
Le #331699
Hello,

Par contre, pourquoi s'arrète-t'il à 336 itérations dans
un cas et ne s'arrète-t'il pas dans l'autre cas?


Je ne sais pas. Peut-être des détails internes d'implantation de l'espace
'stack'.

Je suis sûr que, dans le dernier cas, ça va finir par arrêter (et peut-être pas
d'une façon élégante ;-))

Salutations,

Daniel M.

docmarti
Le #331657
Bonjour.
Je crois que ce sera une suite d'erreurs sans fin qui peut être observée
dans le code suivant:

Private Sub worksheet_change(ByVal target As Excel.Range)

Range("a1").Value = Range("a1").Value + 1
'La ligne ci-dessus a provoqué une erreur
Debug.Print "A1 "; Range("a1").Value
Stop
Range("a2").Value = Range("a2").Value + 1
'La ligne ci-dessus a provoqué une erreur dans la pile
Debug.Print "A2 "; Range("a2").Value
Stop

End Sub

"Daniel.M" news:
Hello,

Par contre, pourquoi s'arrète-t'il à 336 itérations dans
un cas et ne s'arrète-t'il pas dans l'autre cas?


Je ne sais pas. Peut-être des détails internes d'implantation de l'espace
'stack'.

Je suis sûr que, dans le dernier cas, ça va finir par arrêter (et
peut-être pas

d'une façon élégante ;-))

Salutations,

Daniel M.





Publicité
Poster une réponse
Anonyme