OVH Cloud OVH Cloud

Gestion des événements dans Excel

4 réponses
Avatar
Chocho
Bonjour,
Tout d'abord pardonnez mon ignorance, mais j'ai cherché partout et je n'ai
pas trouvé de réponse.
Mon problème est le suivant :
Un utilisateur saisi une valeur dans une cellule et déclence un événement :
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = "$B$8" Then
Call CaseAcocherMarge
End If
End Sub
jusque là tout va bien !
Il saisi ensuite une autre valeur dans une autre cellule de la meme feuille
et déclenche un autre évènement :
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = "$B$8" Then
Call CaseAcocherMarge
End If

If Target.Address = "$B$9" Then
Call CaseAcocherMarge2
End If
End Sub
et là rien ne va plus, ça boucle car la cellule B9 à un effet sur la cellule
B8.
j'ai essayé : Application.EnableEvents = False ou True
mais ça ne fonctionne pas.
Existe-t-il une solution ?
Si oui merci de votre aide.
Si non ouvrez la fenêtre que je saute !

Encore merci.

4 réponses

Avatar
Youky
Salut,
C'est dans ta macro CaseAcocherMarge2 qu'il faut voir,
essaie de mettre en mode calcul manuel et test ta macro.
By

"Chocho" a écrit dans le message news:

Bonjour,
Tout d'abord pardonnez mon ignorance, mais j'ai cherché partout et je n'ai
pas trouvé de réponse.
Mon problème est le suivant :
Un utilisateur saisi une valeur dans une cellule et déclence un événement
:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = "$B$8" Then
Call CaseAcocherMarge
End If
End Sub
jusque là tout va bien !
Il saisi ensuite une autre valeur dans une autre cellule de la meme
feuille

et déclenche un autre évènement :
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = "$B$8" Then
Call CaseAcocherMarge
End If

If Target.Address = "$B$9" Then
Call CaseAcocherMarge2
End If
End Sub
et là rien ne va plus, ça boucle car la cellule B9 à un effet sur la
cellule

B8.
j'ai essayé : Application.EnableEvents = False ou True
mais ça ne fonctionne pas.
Existe-t-il une solution ?
Si oui merci de votre aide.
Si non ouvrez la fenêtre que je saute !

Encore merci.


Avatar
Pierre Fauconnier
Bonsoir

Va voir la réponse que j'ai donnée à ton précédent mail. Aurais-tu "bégayé"
sur les touches de ton clavier pour nous l'envoyer deux fois?

Pierre

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

Bonjour,
Tout d'abord pardonnez mon ignorance, mais j'ai cherché partout et je n'ai
pas trouvé de réponse.
Mon problème est le suivant :
Un utilisateur saisi une valeur dans une cellule et déclence un événement
:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = "$B$8" Then
Call CaseAcocherMarge
End If
End Sub
jusque là tout va bien !
Il saisi ensuite une autre valeur dans une autre cellule de la meme
feuille
et déclenche un autre évènement :
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = "$B$8" Then
Call CaseAcocherMarge
End If

If Target.Address = "$B$9" Then
Call CaseAcocherMarge2
End If
End Sub
et là rien ne va plus, ça boucle car la cellule B9 à un effet sur la
cellule
B8.
j'ai essayé : Application.EnableEvents = False ou True
mais ça ne fonctionne pas.
Existe-t-il une solution ?
Si oui merci de votre aide.
Si non ouvrez la fenêtre que je saute !

Encore merci.


Avatar
Pierre Fauconnier
Bonsoir,

Une solution parmi d'autres: Utiliser une variable statique dans la
procédure, comme suit:

Private Sub Worksheet_Change(ByVal Target As Range)
Static Flag_Modif_B9 As Boolean

Select Case Target.Address
Case "$B$8"
If Not Flag_Modif_B9 Then
MsgBox "Modif B8"
End If
Case "$B$9"
Flag_Modif_B9 = True
MsgBox "Modif B9"
Range("b8") = "Test"
Flag_Modif_B9 = False
End Select

End Sub

La variable statique garde sa valeur lorsque l'on quitte la procédure. Dès
lors, on met le drapeau à TRUE lorsque c'est B9, on modifie B8 dans la
foulée, puis on remet le drapeau à FALSE...

Il faut bien entendu remplacer les lignes "MSGBOX ... " par les appels de
procédure souhaités.

Cela convient-il?


--
Pierre Fauconnier ()
"Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin ( proverbe
zen )
Remplacez nospam.nospam par pfi.be pour répondre. Merci

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

Oui, j'ai cafouillé ...
Mais je ne vois pas la réponse à mon précédent mail.
Si tu as yune solution ça m'interresse bcp.


Bonsoir

Va voir la réponse que j'ai donnée à ton précédent mail. Aurais-tu
"bégayé"
sur les touches de ton clavier pour nous l'envoyer deux fois?

Pierre

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

Bonjour,
Tout d'abord pardonnez mon ignorance, mais j'ai cherché partout et je
n'ai
pas trouvé de réponse.
Mon problème est le suivant :
Un utilisateur saisi une valeur dans une cellule et déclence un
événement
:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = "$B$8" Then
Call CaseAcocherMarge
End If
End Sub
jusque là tout va bien !
Il saisi ensuite une autre valeur dans une autre cellule de la meme
feuille
et déclenche un autre évènement :
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = "$B$8" Then
Call CaseAcocherMarge
End If

If Target.Address = "$B$9" Then
Call CaseAcocherMarge2
End If
End Sub
et là rien ne va plus, ça boucle car la cellule B9 à un effet sur la
cellule
B8.
j'ai essayé : Application.EnableEvents = False ou True
mais ça ne fonctionne pas.
Existe-t-il une solution ?
Si oui merci de votre aide.
Si non ouvrez la fenêtre que je saute !

Encore merci.









Avatar
Pierre Fauconnier
Bonjour

Dans ce cas, déclare Flag_Modif comme variable publique dans un module
standard, avant la première procédure de ce module

Public Flag_Modif_B9 as boolean

et utilise cette variable dans les différentes procédures
Worksheet_Change...

Ok?


--
Pierre Fauconnier ()
"Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin ( proverbe
zen )
Remplacez nospam.nospam par pfi.be pour répondre. Merci

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

Petite précision :

C'est le même scénario mais sur 2 autres cellules de la même feuille.


Bonsoir,

Une solution parmi d'autres: Utiliser une variable statique dans la
procédure, comme suit:

Private Sub Worksheet_Change(ByVal Target As Range)
Static Flag_Modif_B9 As Boolean

Select Case Target.Address
Case "$B$8"
If Not Flag_Modif_B9 Then
MsgBox "Modif B8"
End If
Case "$B$9"
Flag_Modif_B9 = True
MsgBox "Modif B9"
Range("b8") = "Test"
Flag_Modif_B9 = False
End Select

End Sub

La variable statique garde sa valeur lorsque l'on quitte la procédure.
Dès
lors, on met le drapeau à TRUE lorsque c'est B9, on modifie B8 dans la
foulée, puis on remet le drapeau à FALSE...

Il faut bien entendu remplacer les lignes "MSGBOX ... " par les appels de
procédure souhaités.

Cela convient-il?


--
Pierre Fauconnier ()
"Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin (
proverbe
zen )
Remplacez nospam.nospam par pfi.be pour répondre. Merci

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

Oui, j'ai cafouillé ...
Mais je ne vois pas la réponse à mon précédent mail.
Si tu as yune solution ça m'interresse bcp.


Bonsoir

Va voir la réponse que j'ai donnée à ton précédent mail. Aurais-tu
"bégayé"
sur les touches de ton clavier pour nous l'envoyer deux fois?

Pierre

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

Bonjour,
Tout d'abord pardonnez mon ignorance, mais j'ai cherché partout et
je
n'ai
pas trouvé de réponse.
Mon problème est le suivant :
Un utilisateur saisi une valeur dans une cellule et déclence un
événement
:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = "$B$8" Then
Call CaseAcocherMarge
End If
End Sub
jusque là tout va bien !
Il saisi ensuite une autre valeur dans une autre cellule de la meme
feuille
et déclenche un autre évènement :
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = "$B$8" Then
Call CaseAcocherMarge
End If

If Target.Address = "$B$9" Then
Call CaseAcocherMarge2
End If
End Sub
et là rien ne va plus, ça boucle car la cellule B9 à un effet sur la
cellule
B8.
j'ai essayé : Application.EnableEvents = False ou True
mais ça ne fonctionne pas.
Existe-t-il une solution ?
Si oui merci de votre aide.
Si non ouvrez la fenêtre que je saute !

Encore merci.