declenchement d'une macro a partir d'un test logique posé dans une feuille
22 réponses
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
> 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)
Belle méthode, je ne connaissais pas l'évènement "Calculate". Cependant, même si ça résout un bon nombre de cas de figure, ça ne fait que déplacer le problème. Mettons que "a" soit conditionné par l a valeur 1 de la case A1, si on écrit 1 deux fois de suite dans la case A1, le message "toto" ne s'affiche pas la deuxième fois.
> 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)
Belle méthode, je ne connaissais pas l'évènement "Calculate".
Cependant, même si ça résout un bon nombre de cas de figure, ça ne
fait que déplacer le problème. Mettons que "a" soit conditionné par l a
valeur 1 de la case A1, si on écrit 1 deux fois de suite dans la case
A1, le message "toto" ne s'affiche pas la deuxième fois.
> 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)
Belle méthode, je ne connaissais pas l'évènement "Calculate". Cependant, même si ça résout un bon nombre de cas de figure, ça ne fait que déplacer le problème. Mettons que "a" soit conditionné par l a valeur 1 de la case A1, si on écrit 1 deux fois de suite dans la case A1, le message "toto" ne s'affiche pas la deuxième fois.
parci
fraction a écrit :
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)
Belle méthode, je ne connaissais pas l'évènement "Calculate". Cependant, même si ça résout un bon nombre de cas de figure, ça ne fait que déplacer le problème. Mettons que "a" soit conditionné par la valeur 1 de la case A1, si on écrit 1 deux fois de suite dans la case A1, le message "toto" ne s'affiche pas la deuxième fois.
Ben oui mais c'est normal, faut adapter au contexte : si A1 est calculé par une formule, on utilise Worksheet_Calculate() si A1 est une valeur saisie, on utilise Worksheet_Change Et une cellule ne peut être à la fois saisie et calculée.
fraction a écrit :
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)
Belle méthode, je ne connaissais pas l'évènement "Calculate".
Cependant, même si ça résout un bon nombre de cas de figure, ça ne
fait que déplacer le problème. Mettons que "a" soit conditionné par la
valeur 1 de la case A1, si on écrit 1 deux fois de suite dans la case
A1, le message "toto" ne s'affiche pas la deuxième fois.
Ben oui mais c'est normal, faut adapter au contexte :
si A1 est calculé par une formule, on utilise Worksheet_Calculate()
si A1 est une valeur saisie, on utilise Worksheet_Change
Et une cellule ne peut être à la fois saisie et calculée.
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)
Belle méthode, je ne connaissais pas l'évènement "Calculate". Cependant, même si ça résout un bon nombre de cas de figure, ça ne fait que déplacer le problème. Mettons que "a" soit conditionné par la valeur 1 de la case A1, si on écrit 1 deux fois de suite dans la case A1, le message "toto" ne s'affiche pas la deuxième fois.
Ben oui mais c'est normal, faut adapter au contexte : si A1 est calculé par une formule, on utilise Worksheet_Calculate() si A1 est une valeur saisie, on utilise Worksheet_Change Et une cellule ne peut être à la fois saisie et calculée.
fraction
Pour pallier à ce problème, j'ai trouvé une solution, en combinant "Change" et "Calculate", mais ne me demande pas comment ça marche, je n'en sais rien. :-)
Private var1 As Integer Private m_b4_value
Private Sub Worksheet_Calculate() If var1 = 1 And 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 var1 = 0 End Sub
Private Sub Worksheet_Change(ByVal Target As Range) If m_b4_value <> Range("B4") Then var1 = 1 Worksheet_Calculate End If End Sub
Pour pallier à ce problème, j'ai trouvé une solution, en combinant
"Change" et "Calculate", mais ne me demande pas comment ça marche, je
n'en sais rien. :-)
Private var1 As Integer
Private m_b4_value
Private Sub Worksheet_Calculate()
If var1 = 1 And 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
var1 = 0
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If m_b4_value <> Range("B4") Then
var1 = 1
Worksheet_Calculate
End If
End Sub
Pour pallier à ce problème, j'ai trouvé une solution, en combinant "Change" et "Calculate", mais ne me demande pas comment ça marche, je n'en sais rien. :-)
Private var1 As Integer Private m_b4_value
Private Sub Worksheet_Calculate() If var1 = 1 And 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 var1 = 0 End Sub
Private Sub Worksheet_Change(ByVal Target As Range) If m_b4_value <> Range("B4") Then var1 = 1 Worksheet_Calculate End If End Sub
fraction
> Ben oui mais c'est normal, faut adapter au contexte : si A1 est calcul par une formule, on utilise Worksheet_Calculate() si A1 est une valeur saisie, on utilise Worksheet_Change Et une cellule ne peut tre la fois saisie et calcul e.
De toutes façons, l'évènement Change seul n'est pas pertinent, puisqu'il ne renvoie pas la valeur de B4 avant ET après l'évènement. Il faut, comme tu le dis travailler avec "Calculate". C'est pour cela que j'ai pensé à combiner l'action de saisie (étrangère à B4) et le calcul de B4.
> Ben oui mais c'est normal, faut adapter au contexte :
si A1 est calcul par une formule, on utilise Worksheet_Calculate()
si A1 est une valeur saisie, on utilise Worksheet_Change
Et une cellule ne peut tre la fois saisie et calcul e.
De toutes façons, l'évènement Change seul n'est pas pertinent,
puisqu'il ne renvoie pas la valeur de B4 avant ET après l'évènement.
Il faut, comme tu le dis travailler avec "Calculate". C'est pour cela
que j'ai pensé à combiner l'action de saisie (étrangère à B4) et le
calcul de B4.
> Ben oui mais c'est normal, faut adapter au contexte : si A1 est calcul par une formule, on utilise Worksheet_Calculate() si A1 est une valeur saisie, on utilise Worksheet_Change Et une cellule ne peut tre la fois saisie et calcul e.
De toutes façons, l'évènement Change seul n'est pas pertinent, puisqu'il ne renvoie pas la valeur de B4 avant ET après l'évènement. Il faut, comme tu le dis travailler avec "Calculate". C'est pour cela que j'ai pensé à combiner l'action de saisie (étrangère à B4) et le calcul de B4.
fraction
Ton problème est extrêmement vicieux si tu souhaites résoudre toutes ses expressions possibles. Je me suis pris la tête toute la soirée, et je m'en tiens à ma deuxième solution : il faut que tu traites ton test logique dans le code du programme, après l'évènement "Change". Ça coupera court à toutes les prises de tête, et ça me soulagera beaucou p.
Ton problème est extrêmement vicieux si tu souhaites résoudre toutes
ses expressions possibles. Je me suis pris la tête toute la soirée, et
je m'en tiens à ma deuxième solution : il faut que tu traites ton test
logique dans le code du programme, après l'évènement "Change". Ça
coupera court à toutes les prises de tête, et ça me soulagera beaucou p.
Ton problème est extrêmement vicieux si tu souhaites résoudre toutes ses expressions possibles. Je me suis pris la tête toute la soirée, et je m'en tiens à ma deuxième solution : il faut que tu traites ton test logique dans le code du programme, après l'évènement "Change". Ça coupera court à toutes les prises de tête, et ça me soulagera beaucou p.
fraction
> De toutes façons, l'évènement Change seul n'est pas pertinent, puisqu'il ne renvoie pas la valeur de B4 avant ET après l'évènement . Il faut, comme tu le dis travailler avec "Calculate". C'est pour cela que j'ai pensé à combiner l'action de saisie (étrangère à B4) e t le calcul de B4.
En fait, tant que B4 change de valeur, il n'y a pas de problème. Mais lorsque B4 garde la valeur "a", il est impossible de distinguer le "je reste a" (pas de message toto) du "je redeviens a" (message toto).
> De toutes façons, l'évènement Change seul n'est pas pertinent,
puisqu'il ne renvoie pas la valeur de B4 avant ET après l'évènement .
Il faut, comme tu le dis travailler avec "Calculate". C'est pour cela
que j'ai pensé à combiner l'action de saisie (étrangère à B4) e t le
calcul de B4.
En fait, tant que B4 change de valeur, il n'y a pas de problème.
Mais lorsque B4 garde la valeur "a", il est impossible de distinguer
le "je reste a" (pas de message toto) du "je redeviens a" (message
toto).
> De toutes façons, l'évènement Change seul n'est pas pertinent, puisqu'il ne renvoie pas la valeur de B4 avant ET après l'évènement . Il faut, comme tu le dis travailler avec "Calculate". C'est pour cela que j'ai pensé à combiner l'action de saisie (étrangère à B4) e t le calcul de B4.
En fait, tant que B4 change de valeur, il n'y a pas de problème. Mais lorsque B4 garde la valeur "a", il est impossible de distinguer le "je reste a" (pas de message toto) du "je redeviens a" (message toto).
Gloops
fraction a écrit, le 08/01/2010 12:21 :
C'est bizarre, ton truc.
Pourquoi donc ?
Parce qu'on croirait entendre quelqu'un téléphoner dans la pièce à côté : j'ai tes interventions, mais pas celles de la personne à qui tu rép onds.
Dans un newsgroup, ça arrive qu'on n'ait pas le début d'un fil si on ne s'est pas connecté un certain temps. Mais en venant une fois par jour, avoir seulement l'expression d'un des intervenants, c'est moins courant.
On ne risque pas de dire le contraire :)
fraction a écrit, le 08/01/2010 12:21 :
C'est bizarre, ton truc.
Pourquoi donc ?
Parce qu'on croirait entendre quelqu'un téléphoner dans la pièce à côté
: j'ai tes interventions, mais pas celles de la personne à qui tu rép onds.
Dans un newsgroup, ça arrive qu'on n'ait pas le début d'un fil si on ne
s'est pas connecté un certain temps. Mais en venant une fois par jour,
avoir seulement l'expression d'un des intervenants, c'est moins courant.
Parce qu'on croirait entendre quelqu'un téléphoner dans la pièce à côté : j'ai tes interventions, mais pas celles de la personne à qui tu rép onds.
Dans un newsgroup, ça arrive qu'on n'ait pas le début d'un fil si on ne s'est pas connecté un certain temps. Mais en venant une fois par jour, avoir seulement l'expression d'un des intervenants, c'est moins courant.
On ne risque pas de dire le contraire :)
letetu
fraction a écrit le 08/01/2010 à 19h52 :
> 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)
Belle méthode, je ne connaissais pas l'évènement "Calculate". Cependant, même si ça résout un bon nombre de cas de figure, ça ne fait que déplacer le problème. Mettons que "a" soit conditionné par l a valeur 1 de la case A1, si on écrit 1 deux fois de suite dans la case A1, le message "toto" ne s'affiche pas la deuxième fois.
Bonjour a fraction et parci, je vous remercie vraiment pour votre aide,c'est vraiment encourageant , je ne vouvais intervenir sur ce forum a cause d'un probleme materiel qui vient de s'arranger, voila pour mon silence cependant j'essai de transposer la fonction "calculate que tu as ecris ,mais j'ai a chaque fois un message d'erreur du type " attente fin d'instruction " then ou go to...
fraction a écrit le 08/01/2010 à 19h52 :
> 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)
Belle méthode, je ne connaissais pas l'évènement
"Calculate".
Cependant, même si ça résout un bon nombre de cas de
figure, ça ne
fait que déplacer le problème. Mettons que "a" soit
conditionné par l a
valeur 1 de la case A1, si on écrit 1 deux fois de suite dans la case
A1, le message "toto" ne s'affiche pas la deuxième fois.
Bonjour a fraction et parci, je vous remercie vraiment pour votre aide,c'est vraiment encourageant , je ne vouvais intervenir sur ce forum a cause d'un probleme materiel qui vient de s'arranger, voila pour mon silence
cependant j'essai de transposer la fonction "calculate que tu as ecris ,mais j'ai a chaque fois un message d'erreur du type " attente fin d'instruction " then ou go to...
> 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)
Belle méthode, je ne connaissais pas l'évènement "Calculate". Cependant, même si ça résout un bon nombre de cas de figure, ça ne fait que déplacer le problème. Mettons que "a" soit conditionné par l a valeur 1 de la case A1, si on écrit 1 deux fois de suite dans la case A1, le message "toto" ne s'affiche pas la deuxième fois.
Bonjour a fraction et parci, je vous remercie vraiment pour votre aide,c'est vraiment encourageant , je ne vouvais intervenir sur ce forum a cause d'un probleme materiel qui vient de s'arranger, voila pour mon silence cependant j'essai de transposer la fonction "calculate que tu as ecris ,mais j'ai a chaque fois un message d'erreur du type " attente fin d'instruction " then ou go to...
jean-marc
"letetu" wrote in message news:
fraction a écrit le 08/01/2010 à 19h52 : cependant j'essai de transposer la fonction "calculate que tu as ecris ,mais j'ai a chaque fois un message d'erreur du type " attente fin d'instruction " then ou go to...
Il ne faut pas recopier betement:
If Range("B4").Value >> "a" Then
Ces 2 lignes n'en font qu'une, evidemment ...
-- jean-marc
"letetu" <letetu@domain-xyz.in> wrote in message
news:yfudnapSg7JXEMjW4p2dnAA@giganews.com...
fraction a écrit le 08/01/2010 à 19h52 :
cependant j'essai de transposer la fonction "calculate que tu as ecris
,mais
j'ai a chaque fois un message d'erreur du type " attente fin d'instruction
"
then ou go to...
fraction a écrit le 08/01/2010 à 19h52 : cependant j'essai de transposer la fonction "calculate que tu as ecris ,mais j'ai a chaque fois un message d'erreur du type " attente fin d'instruction " then ou go to...
Il ne faut pas recopier betement:
If Range("B4").Value >> "a" Then
Ces 2 lignes n'en font qu'une, evidemment ...
-- jean-marc
fraction
Si tu nous avais prévenu d'une chose : Existe-t-il une case qui détermine systématiquement la valeur du test logique chaque fois que tu y touches ? J'aurais pu t'aider autrement.
Si tu nous avais prévenu d'une chose :
Existe-t-il une case qui détermine systématiquement la valeur du test
logique chaque fois que tu y touches ? J'aurais pu t'aider autrement.
Si tu nous avais prévenu d'une chose : Existe-t-il une case qui détermine systématiquement la valeur du test logique chaque fois que tu y touches ? J'aurais pu t'aider autrement.