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 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.
Bonjour à tous,
Je suis nouveau sur ce forum, je m'y suis inscrit car on y trouve des tas de choses intéressantes et c'est vraiment utile pour des débutants comme moi.
En fait, je crois rencontrer le même genre de problème qui est développé dans ce post.
Avec le code ci dessous, dès que A1 est modifié suite à un calcul, une fenetre s'affiche:"hello". Imaginons que A1±*C1, donc quand on change B1 ou C1, cela change bien sur A1 automatiquement.
Je voudrai qu'une Macro se lance à la place de la fenêtre "hello" mais je n'y arrive pas, il y a toujours un message d'erreur et excel se plante. Je ne sais pas quelle ligne de code inscrire à la place de MSgBox.
Avec la fonction Target, cela fonctionne mais seulement si on change A1 "manuellement". Le but est de déclencher une macro lorsque A1 est modifiée suite à un calcul, d'où Worksheet_calculate.
Dans le module objet de Feuil1 :
Code:
Public ValPrec
Private Sub Worksheet_Calculate() Vérif End Sub
Private Sub Worksheet_Change(ByVal Target As Excel.Range) If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub Vérif End Sub
Private Sub Vérif() If VarType(Range("A1")) = VarType(ValPrec) Then _ If ValPrec = Range("A1") Then Exit Sub MsgBox "hello" ValPrec = Range("A1") End Sub
' Dans le module de code ThisWorkbook :
Code:
Private Sub Workbook_Open() Feuil1.ValPrec = Feuil1.Range("A1") End Sub
Autre point qui a été soulevé ici, imaginons qu'en A1, nous ayons la valeur A1=1, lorsque la valeur est changée suite à un calcul pour donner la valeur A1=2, une fenêtre s'ouvre : "hello". Maintenant, si un nouveau calcul nous donne encore la valeur A1=2, la fenêtre ne s'ouvre pas. Effectivement, la valeur n'a pas été modifié MAIS il y a eu un nouveau calcul qui n'est pas pris en compte. Comment remedier à ce second problème?
En résumé: comment déclencher une macro quand une cellule se modifie suite à un calcul? comment gérer le problème lorsque 2 calculs consécutifs donnent le même résultat?
Merci à vous!
J'ai posé la question sur plusieurs forum, mais je n'ai pas encore eu de réponse.
fraction a écrit le 19/01/2010 à 18h48 :
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.
Bonjour à tous,
Je suis nouveau sur ce forum, je m'y suis inscrit car on y trouve des tas de choses intéressantes et c'est vraiment utile pour des débutants comme moi.
En fait, je crois rencontrer le même genre de problème qui est développé dans ce post.
Avec le code ci dessous, dès que A1 est modifié suite à un calcul, une fenetre s'affiche:"hello". Imaginons que A1=B1*C1, donc quand on change B1 ou C1, cela change bien sur A1 automatiquement.
Je voudrai qu'une Macro se lance à la place de la fenêtre "hello" mais je n'y arrive pas, il y a toujours un message d'erreur et excel se plante. Je ne sais pas quelle ligne de code inscrire à la place de MSgBox.
Avec la fonction Target, cela fonctionne mais seulement si on change A1 "manuellement". Le but est de déclencher une macro lorsque A1 est modifiée suite à un calcul, d'où Worksheet_calculate.
Dans le module objet de Feuil1 :
Code:
Public ValPrec
Private Sub Worksheet_Calculate()
Vérif
End Sub
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub
Vérif
End Sub
Private Sub Vérif()
If VarType(Range("A1")) = VarType(ValPrec) Then _
If ValPrec = Range("A1") Then Exit Sub
MsgBox "hello"
ValPrec = Range("A1")
End Sub
' Dans le module de code ThisWorkbook :
Code:
Private Sub Workbook_Open()
Feuil1.ValPrec = Feuil1.Range("A1")
End Sub
Autre point qui a été soulevé ici, imaginons qu'en A1, nous ayons la valeur A1=1, lorsque la valeur est changée suite à un calcul pour donner la valeur A1=2, une fenêtre s'ouvre : "hello".
Maintenant, si un nouveau calcul nous donne encore la valeur A1=2, la fenêtre ne s'ouvre pas.
Effectivement, la valeur n'a pas été modifié MAIS il y a eu un nouveau calcul qui n'est pas pris en compte. Comment remedier à ce second problème?
En résumé:
comment déclencher une macro quand une cellule se modifie suite à un calcul?
comment gérer le problème lorsque 2 calculs consécutifs donnent le même résultat?
Merci à vous!
J'ai posé la question sur plusieurs forum, mais je n'ai pas encore eu de réponse.
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.
Bonjour à tous,
Je suis nouveau sur ce forum, je m'y suis inscrit car on y trouve des tas de choses intéressantes et c'est vraiment utile pour des débutants comme moi.
En fait, je crois rencontrer le même genre de problème qui est développé dans ce post.
Avec le code ci dessous, dès que A1 est modifié suite à un calcul, une fenetre s'affiche:"hello". Imaginons que A1±*C1, donc quand on change B1 ou C1, cela change bien sur A1 automatiquement.
Je voudrai qu'une Macro se lance à la place de la fenêtre "hello" mais je n'y arrive pas, il y a toujours un message d'erreur et excel se plante. Je ne sais pas quelle ligne de code inscrire à la place de MSgBox.
Avec la fonction Target, cela fonctionne mais seulement si on change A1 "manuellement". Le but est de déclencher une macro lorsque A1 est modifiée suite à un calcul, d'où Worksheet_calculate.
Dans le module objet de Feuil1 :
Code:
Public ValPrec
Private Sub Worksheet_Calculate() Vérif End Sub
Private Sub Worksheet_Change(ByVal Target As Excel.Range) If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub Vérif End Sub
Private Sub Vérif() If VarType(Range("A1")) = VarType(ValPrec) Then _ If ValPrec = Range("A1") Then Exit Sub MsgBox "hello" ValPrec = Range("A1") End Sub
' Dans le module de code ThisWorkbook :
Code:
Private Sub Workbook_Open() Feuil1.ValPrec = Feuil1.Range("A1") End Sub
Autre point qui a été soulevé ici, imaginons qu'en A1, nous ayons la valeur A1=1, lorsque la valeur est changée suite à un calcul pour donner la valeur A1=2, une fenêtre s'ouvre : "hello". Maintenant, si un nouveau calcul nous donne encore la valeur A1=2, la fenêtre ne s'ouvre pas. Effectivement, la valeur n'a pas été modifié MAIS il y a eu un nouveau calcul qui n'est pas pris en compte. Comment remedier à ce second problème?
En résumé: comment déclencher une macro quand une cellule se modifie suite à un calcul? comment gérer le problème lorsque 2 calculs consécutifs donnent le même résultat?
Merci à vous!
J'ai posé la question sur plusieurs forum, mais je n'ai pas encore eu de réponse.
bluemoon91
bluemoon91 a écrit le 10/06/2010 à 00h37 :
fraction a écrit le 19/01/2010 à 18h48 :
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.
Bonjour à tous,
Je suis nouveau sur ce forum, je m'y suis inscrit car on y trouve des tas de choses intéressantes et c'est vraiment utile pour des débutants comme moi.
En fait, je crois rencontrer le même genre de problème qui est développé dans ce post.
Avec le code ci dessous, dès que A1 est modifié suite à un calcul, une fenetre s'affiche:"hello". Imaginons que A1±*C1, donc quand on change B1 ou C1, cela change bien sur A1 automatiquement.
Je voudrai qu'une Macro se lance à la place de la fenêtre "hello" mais je n'y arrive pas, il y a toujours un message d'erreur et excel se plante. Je ne sais pas quelle ligne de code inscrire à la place de MSgBox.
Avec la fonction Target, cela fonctionne mais seulement si on change A1 "manuellement". Le but est de déclencher une macro lorsque A1 est modifiée suite à un calcul, d'où Worksheet_calculate.
Dans le module objet de Feuil1 :
Code:
Public ValPrec
Private Sub Worksheet_Calculate() Vérif End Sub
Private Sub Worksheet_Change(ByVal Target As Excel.Range) If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub Vérif End Sub
Private Sub Vérif() If VarType(Range("A1")) = VarType(ValPrec) Then _ If ValPrec = Range("A1") Then Exit Sub MsgBox "hello" ValPrec = Range("A1") End Sub
' Dans le module de code ThisWorkbook :
Code:
Private Sub Workbook_Open() Feuil1.ValPrec = Feuil1.Range("A1") End Sub
Autre point qui a été soulevé ici, imaginons qu'en A1, nous ayons la valeur A1=1, lorsque la valeur est changée suite à un calcul pour donner la valeur A1=2, une fenêtre s'ouvre : "hello". Maintenant, si un nouveau calcul nous donne encore la valeur A1=2, la fenêtre ne s'ouvre pas. Effectivement, la valeur n'a pas été modifié MAIS il y a eu un nouveau calcul qui n'est pas pris en compte. Comment remedier à ce second problème?
En résumé: comment déclencher une macro quand une cellule se modifie suite à un calcul? comment gérer le problème lorsque 2 calculs consécutifs donnent le même résultat?
Merci à vous!
J'ai posé la question sur plusieurs forum, mais je n'ai pas encore eu de réponse.
cela foncitonne,
il suffisait d'intervertir 2 lignes de code dans Private Verif, c'est à dire de mettre Macro1 à la fin.
Public ValPrec
Private Sub Worksheet_Calculate() Verif End Sub
Private Sub Worksheet_Change(ByVal Target As Excel.Range) If Intersect(Target, Range("C1")) Is Nothing Then Exit Sub Verif
End Sub
Private Sub Verif() If VarType(Range("A1")) = VarType(ValPrec) Then _ If ValPrec = Range("C1") Then Exit Sub
ValPrec = Range("C1")
Macro1
End Sub
merci
bien cordialement
bluemoon91 a écrit le 10/06/2010 à 00h37 :
fraction a écrit le 19/01/2010 à 18h48 :
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.
Bonjour à tous,
Je suis nouveau sur ce forum, je m'y suis inscrit car on y trouve des tas de
choses intéressantes et c'est vraiment utile pour des débutants
comme moi.
En fait, je crois rencontrer le même genre de problème qui est
développé dans ce post.
Avec le code ci dessous, dès que A1 est modifié suite à un
calcul, une fenetre s'affiche:"hello". Imaginons que A1=B1*C1, donc
quand on change B1 ou C1, cela change bien sur A1 automatiquement.
Je voudrai qu'une Macro se lance à la place de la fenêtre
"hello" mais je n'y arrive pas, il y a toujours un message d'erreur
et excel se plante. Je ne sais pas quelle ligne de code inscrire à la
place de MSgBox.
Avec la fonction Target, cela fonctionne mais seulement si on change A1
"manuellement". Le but est de déclencher une macro lorsque A1
est modifiée suite à un calcul, d'où Worksheet_calculate.
Dans le module objet de Feuil1 :
Code:
Public ValPrec
Private Sub Worksheet_Calculate()
Vérif
End Sub
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub
Vérif
End Sub
Private Sub Vérif()
If VarType(Range("A1")) = VarType(ValPrec) Then _
If ValPrec = Range("A1") Then Exit Sub
MsgBox "hello"
ValPrec = Range("A1")
End Sub
' Dans le module de code ThisWorkbook :
Code:
Private Sub Workbook_Open()
Feuil1.ValPrec = Feuil1.Range("A1")
End Sub
Autre point qui a été soulevé ici, imaginons qu'en A1,
nous ayons la valeur A1=1, lorsque la valeur est changée suite à
un calcul pour donner la valeur A1=2, une fenêtre s'ouvre :
"hello".
Maintenant, si un nouveau calcul nous donne encore la valeur A1=2, la
fenêtre ne s'ouvre pas.
Effectivement, la valeur n'a pas été modifié MAIS il y a
eu un nouveau calcul qui n'est pas pris en compte. Comment remedier à ce
second problème?
En résumé:
comment déclencher une macro quand une cellule se modifie suite à
un calcul?
comment gérer le problème lorsque 2 calculs consécutifs
donnent le même résultat?
Merci à vous!
J'ai posé la question sur plusieurs forum, mais je n'ai pas encore eu de
réponse.
cela foncitonne,
il suffisait d'intervertir 2 lignes de code dans Private Verif, c'est à dire de mettre Macro1 à la fin.
Public ValPrec
Private Sub Worksheet_Calculate()
Verif
End Sub
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Intersect(Target, Range("C1")) Is Nothing Then Exit Sub
Verif
End Sub
Private Sub Verif()
If VarType(Range("A1")) = VarType(ValPrec) Then _
If ValPrec = Range("C1") Then Exit Sub
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.
Bonjour à tous,
Je suis nouveau sur ce forum, je m'y suis inscrit car on y trouve des tas de choses intéressantes et c'est vraiment utile pour des débutants comme moi.
En fait, je crois rencontrer le même genre de problème qui est développé dans ce post.
Avec le code ci dessous, dès que A1 est modifié suite à un calcul, une fenetre s'affiche:"hello". Imaginons que A1±*C1, donc quand on change B1 ou C1, cela change bien sur A1 automatiquement.
Je voudrai qu'une Macro se lance à la place de la fenêtre "hello" mais je n'y arrive pas, il y a toujours un message d'erreur et excel se plante. Je ne sais pas quelle ligne de code inscrire à la place de MSgBox.
Avec la fonction Target, cela fonctionne mais seulement si on change A1 "manuellement". Le but est de déclencher une macro lorsque A1 est modifiée suite à un calcul, d'où Worksheet_calculate.
Dans le module objet de Feuil1 :
Code:
Public ValPrec
Private Sub Worksheet_Calculate() Vérif End Sub
Private Sub Worksheet_Change(ByVal Target As Excel.Range) If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub Vérif End Sub
Private Sub Vérif() If VarType(Range("A1")) = VarType(ValPrec) Then _ If ValPrec = Range("A1") Then Exit Sub MsgBox "hello" ValPrec = Range("A1") End Sub
' Dans le module de code ThisWorkbook :
Code:
Private Sub Workbook_Open() Feuil1.ValPrec = Feuil1.Range("A1") End Sub
Autre point qui a été soulevé ici, imaginons qu'en A1, nous ayons la valeur A1=1, lorsque la valeur est changée suite à un calcul pour donner la valeur A1=2, une fenêtre s'ouvre : "hello". Maintenant, si un nouveau calcul nous donne encore la valeur A1=2, la fenêtre ne s'ouvre pas. Effectivement, la valeur n'a pas été modifié MAIS il y a eu un nouveau calcul qui n'est pas pris en compte. Comment remedier à ce second problème?
En résumé: comment déclencher une macro quand une cellule se modifie suite à un calcul? comment gérer le problème lorsque 2 calculs consécutifs donnent le même résultat?
Merci à vous!
J'ai posé la question sur plusieurs forum, mais je n'ai pas encore eu de réponse.
cela foncitonne,
il suffisait d'intervertir 2 lignes de code dans Private Verif, c'est à dire de mettre Macro1 à la fin.
Public ValPrec
Private Sub Worksheet_Calculate() Verif End Sub
Private Sub Worksheet_Change(ByVal Target As Excel.Range) If Intersect(Target, Range("C1")) Is Nothing Then Exit Sub Verif
End Sub
Private Sub Verif() If VarType(Range("A1")) = VarType(ValPrec) Then _ If ValPrec = Range("C1") Then Exit Sub