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

2 réponses

1 2 3
Avatar
bluemoon91
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.
Avatar
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
1 2 3