Gestion d'événements dans des cellules différentes
1 réponse
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 !
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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 (pierre.fauconnier@nospam.nospam)
"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" <Chocho@discussions.microsoft.com> a écrit dans le message de news:
1982B0DA-3484-4DDC-AC7F-A7FED9A18F57@microsoft.com...
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 !
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 !