OVH Cloud OVH Cloud

Gestion d'événements dans des cellules différentes

1 réponse
Avatar
Chocho
Bonjour,
Tout d'abord, pardonnez mon ignorance. J'ai beaucoup cherché, mais je n'ai
rien trouvé ...
Je voudrais déclancher un événement lorsque l'utilisateur saisie une valuer
dans une cellule, jusque là tout va bien :
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = "$B$8" Then
Call CaseAcocherMarge
End If
End Sub
Ca marche !
Là où ça se complique , c'est qu'un autre événement devra se déclencher
quand il saisira une valuer dans une autre cellule de la meme feuille :
ex :
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à tout se mélange, ça boucle car la celule B8 se trouve modifiée par
l'action sur la B9, bref ça ne fonctionne pas.
J'ai essayé :
Application.EnableEvents = False ou true mais rien n'y fait.
Existe-t-il une solution ?
Si oui merci de votre aide.
Si non, où est la fenêtre que je saute !

Merci

1 réponse

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:

Bonjour,
Tout d'abord, pardonnez mon ignorance. J'ai beaucoup cherché, mais je n'ai
rien trouvé ...
Je voudrais déclancher un événement lorsque l'utilisateur saisie une
valuer
dans une cellule, jusque là tout va bien :
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = "$B$8" Then
Call CaseAcocherMarge
End If
End Sub
Ca marche !
Là où ça se complique , c'est qu'un autre événement devra se déclencher
quand il saisira une valuer dans une autre cellule de la meme feuille :
ex :
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à tout se mélange, ça boucle car la celule B8 se trouve modifiée par
l'action sur la B9, bref ça ne fonctionne pas.
J'ai essayé :
Application.EnableEvents = False ou true mais rien n'y fait.
Existe-t-il une solution ?
Si oui merci de votre aide.
Si non, où est la fenêtre que je saute !

Merci