Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

mystère...

11 réponses
Avatar
Chris MICHEL
J'ai d=E9couvert il y a peu le code permettant de lancer des=20
macros automatiquement =E0 chaque modif d'un feuille donn=E9e.=20
Je faisais quelques tests et je suis tomb=E9 sur un truc que=20
je ne comprends pas. Je pr=E9cise que je bosse sous Excel 97.

quand je tape:

Private Sub worksheet_change(ByVal target As Excel.Range)

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

End Sub

A1 est incr=E9ment=E9e de 336 (?!) =E0 chaque fois que je=20
modifie la feuille

quand je tape:

Private Sub worksheet_change(ByVal target As Excel.Range)

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

End Sub

A2 est incr=E9ment=E9e de 336 fois "test" (jusque l=E0, tout est=20
logiqueau moins)

mais quand je tape:

Private Sub worksheet_change(ByVal target As Excel.Range)

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

End Sub

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

qqun peut-il m'expliquer pourquoi?

1 réponse

1 2
Avatar
isabelle
Laurent aurait il marié une femme native de Betazed ?
;-)
isabelle


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?
.

.







1 2