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

declenchement d'une macro a partir d'un test logique posé dans une feuille

22 réponses
Avatar
letetu
Bonjour,
je beug un peu sur la procedure de declenchement d'une macro a partir d'un test logique posé dans une feuille ecxel,j'arrive a declencher la macro en faisant varier ma cellule referencée
voici l 'ecriture:
Sub Worksheet_Change(ByVal Target As Excel.Range)

If Range("B4") = "a" Then
Call Macro1

End If
End Sub
le probleme c'est que ,tout changement dans les autres cellules de la feuille font declencher la macro, voila si quelqu'un peut me solutionner ca ca serait super

10 réponses

1 2 3
Avatar
fraction
On 1 jan, 18:17, letetu wrote:
Bonjour,
je beug un peu sur la procedure de declenchement d'une macro a partir d'u n test
logique posé dans une feuille ecxel,j'arrive a declencher la macro en f aisant
varier ma cellule referencée
voici l 'ecriture:
Sub Worksheet_Change(ByVal Target As Excel.Range)

  If Range("B4") = "a" Then
  Call Macro1

End If
End Sub
le probleme c'est que ,tout changement dans les autres cellules de la feu ille
font declencher la macro, voila si quelqu'un peut me solutionner ca ca se rait
super



Bonjour.
Je crois avoir compris ton problème. Je te propose de dédier une case
de ta feuille à une variable, par exemple la case A1.
Ca donnerait ceci :
Sub Worksheet_Change(ByVal Target As Excel.Range)
If Range("B4") = "a" and Range("A1") = 0 Then
Range("A1") = 1
Call Macro1
ElseIf Range("B4") <> "a" Then
Range("A1") = 0
End If
End Sub
J'ai essayé, ça a l'air de marcher.
Avatar
fraction
Cela dit, il est possible que tu ais voulu exprimer un problème d'un
autre ordre. Si la case B4 peut être égale à "a" avant et après
l'évènement "Change", et que tu souhaites qu'elle déclenche la macro
les deux fois, je te suggère plutôt de mettre ton test logique dans le
code du programme.
Avatar
parci
fraction a écrit :
On 1 jan, 18:17, letetu wrote:
Bonjour,
je beug un peu sur la procedure de declenchement d'une macro a partir d'un test
logique posé dans une feuille ecxel,j'arrive a declencher la macro en faisant
varier ma cellule referencée
voici l 'ecriture:
Sub Worksheet_Change(ByVal Target As Excel.Range)

If Range("B4") = "a" Then
Call Macro1

End If
End Sub
le probleme c'est que ,tout changement dans les autres cellules de la feuille
font declencher la macro, voila si quelqu'un peut me solutionner ca ca serait
super



Bonjour.
Je crois avoir compris ton problème. Je te propose de dédier une case
de ta feuille à une variable, par exemple la case A1.
Ca donnerait ceci :
Sub Worksheet_Change(ByVal Target As Excel.Range)
If Range("B4") = "a" and Range("A1") = 0 Then
Range("A1") = 1
Call Macro1
ElseIf Range("B4") <> "a" Then
Range("A1") = 0
End If
End Sub
J'ai essayé, ça a l'air de marcher.



J'en doute, enfin pas dans tous les cas.
Il faut utiliser Target c'est fait pour.
Par exemple :

Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = Range("B4").Address Then
If Target.Value = "a" Then
MsgBox "toto"
End If
End If
End Sub
Avatar
Gloops
fraction a écrit, le 07/01/2010 00:02 :
Cela dit, il est possible que tu ais voulu exprimer un problème d'un
autre ordre. Si la case B4 peut être égale à "a" avant et après
l'évènement "Change", et que tu souhaites qu'elle déclenche la ma cro
les deux fois, je te suggère plutôt de mettre ton test logique dans le
code du programme.


Avatar
Gloops
Bonjour,

Tiens ... C'était bien dans ce newsgroup qu'était posée la question ?
;)
_______________________________________
fraction a écrit, le 07/01/2010 00:02 :
Cela dit, il est possible que tu ais voulu exprimer un problème d'un
autre ordre. Si la case B4 peut être égale à "a" avant et après
l'évènement "Change", et que tu souhaites qu'elle déclenche la ma cro
les deux fois, je te suggère plutôt de mettre ton test logique dans le
code du programme.


Avatar
fraction
On 7 jan, 00:38, parci wrote:
fraction a crit :





> On 1 jan, 18:17, letetu wrote:
>> Bonjour,
>> je beug un peu sur la procedure de declenchement d'une macro a partir d'un test
>> logique pos dans une feuille ecxel,j'arrive a declencher la macro en f aisant
>> varier ma cellule referenc e
>> voici l 'ecriture:
>> Sub Worksheet_Change(ByVal Target As Excel.Range)

>>   If Range("B4") = "a" Then
>>   Call Macro1

>> End If
>> End Sub
>> le probleme c'est que ,tout changement dans les autres cellules de la feuille
>> font declencher la macro, voila si quelqu'un peut me solutionner ca ca serait
>> super

> Bonjour.
> Je crois avoir compris ton probl me. Je te propose de d dier une case
> de ta feuille une variable, par exemple la case A1.
> Ca donnerait ceci :
> Sub Worksheet_Change(ByVal Target As Excel.Range)
>    If Range("B4") = "a" and Range("A1") = 0 Then
>    Range("A1") = 1
>    Call Macro1
>    ElseIf Range("B4") <> "a" Then
>    Range("A1") = 0
>    End If
> End Sub
> J'ai essay , a a l'air de marcher.

J'en doute, enfin pas dans tous les cas.
Il faut utiliser Target c'est fait pour.
Par exemple :

Sub Worksheet_Change(ByVal Target As Excel.Range)
     If Target.Address = Range("B4").Address Then
         If Target.Value = "a" Then
             MsgBox "toto"
         End If
     End If
End Sub



Bonjour.
J'ai essayé ta méthode. Ça marche lorsque l'on écrit "a" manuelleme nt,
mais pas lorsqu'il s'agit d'un test logique conditionné (par "SI" par
exemple).
Avatar
fraction
> Bonjour.
J'ai essayé ta méthode. Ça marche lorsque l'on écrit "a" manuelle ment,
mais pas lorsqu'il s'agit d'un test logique conditionné (par "SI" par
exemple).



Or, c'est bien de ce problème qu'il s'agit, si j'ai bien compris.
Target ne renvoie que la dernière case qui a eu le "focus". Il ne gère
pas les changement d'état des autres cases.
C'est pour cela que je conseille à letetu de mettre son test logique
dans le code du programme
Comme ceci :
Sub Worksheet_Change(ByVal Target As Excel.Range)
If (test logique) Then
Range("B4") = "a"
Call Macro1
End If
End Sub
Avatar
Gloops
fraction a écrit, le 07/01/2010 20:38 :
Bonjour.
J'ai essayé ta méthode. Ça marche lorsque l'on écrit "a" manue llement,
mais pas lorsqu'il s'agit d'un test logique conditionné (par "SI" pa r
exemple).



Or, c'est bien de ce problème qu'il s'agit, si j'ai bien compris.
Target ne renvoie que la dernière case qui a eu le "focus". Il ne gè re
pas les changement d'état des autres cases.
C'est pour cela que je conseille à letetu de mettre son test logique
dans le code du programme
Comme ceci :
Sub Worksheet_Change(ByVal Target As Excel.Range)
If (test logique) Then
Range("B4") = "a"
Call Macro1
End If
End Sub



C'est bizarre, ton truc.
Avatar
fraction
> C'est bizarre, ton truc.



Pourquoi donc ?
Avatar
parci
fraction a écrit :
Bonjour.
J'ai essayé ta méthode. Ça marche lorsque l'on écrit "a" manuellement,
mais pas lorsqu'il s'agit d'un test logique conditionné (par "SI" par
exemple).



Or, c'est bien de ce problème qu'il s'agit, si j'ai bien compris.
Target ne renvoie que la dernière case qui a eu le "focus". Il ne gère
pas les changement d'état des autres cases.
C'est pour cela que je conseille à letetu de mettre son test logique
dans le code du programme
Comme ceci :
Sub Worksheet_Change(ByVal Target As Excel.Range)
If (test logique) Then
Range("B4") = "a"
Call Macro1
End If
End Sub



Si tu veux que la macro soit déclenché par un changement de valeur d'une
autre cellule, utilise plutôt Worksheet_Calculate. Exemple :

Private m_b4_value

Private Sub Worksheet_Calculate()
If m_b4_value <> Range("B4").Value Then
If Range("B4").Value = "a" Then
MsgBox "toto"
End If
m_b4_value = Range("B4").Value
End If
End Sub

La variable "m_b4_value" sert à éviter le déclenchement de la macro sur
tout changement dans la feuille quand la valeur de la cellule B4 n'a pas
changé. Le mode de recalcul doit être en automatique (option d'Excel par
défaut)
1 2 3