Bonjour,
Je débute sur VBA depuis hier,
J'ai reussi à créer deux macros qui fonctionnent, cependant il faudrai iqu'elles se lancent si une case change de valeur.
Le problème est que:
La macro MiseenForme doit s'activer si la case AC3 change de valeur
La macro Croix doit s'activer si la case J25 change de valeur
Il faut savoir que la case AC3 est une valeur saisie et que la case J25 est une valeur calculée à partir d'une formule : Somme(J7:J23)
Voici ce que j'ai essayé:
Private Sub Worksheet_change(ByVal Target As Range)
If Target.Address = Range("AC3").Address Then
Application.ScreenUpdating = False
Run ("MiseenForme")
Application.ScreenUpdating = True
End If
If Target.Address = Range("J25").Address Then
Application.ScreenUpdating = False
Run ("Croix")
Application.ScreenUpdating = True
End If
End Sub
Si j'enlève la deuxième partie (celle concernant ma macro Croix) ça fonctionne et la macro MiseenForme se lance à chaque fois que je rentre une valeur en AC3:
Private Sub Worksheet_change(ByVal Target As Range)
If Target.Address = Range("AC3").Address Then
Application.ScreenUpdating = False
Run ("MiseenForme")
Application.ScreenUpdating = True
End If
End Sub
Je ne trouve pas comeent combiner les deux, de plus si je met que la deuxième partie ça ne fonctionne pas, cela vient il d u fait qu'il y a une formule dans la case J25?
Je suis certain qu'il y a une solution simple à mon problème, merci d'avance pour vos reponses.
PS, le code avec la private sub est dans la feuille, les macros sont dans des modules
A voir également:
Mise en route automatique des macros au changement de valeur d'une case
Merci pour ta réponse, ça fonctionne effectivement avec calculate, cependant, il faut maintenent que je desactive calculate dans les nouveaux modules que je créé et qui modifient des cellules sinon le module croix se met en route au milieu de la procedure. J'utilise:
Application.EnableEvents = False
N'y a t'il pas moyen de changer ça, ou est ce la bonne manière de procèder?
Voici ce que j'ai ecrit:
Private sub worksheet_calculate()
If range("J25") <> ValJ25 Or Range("J25")=0 Then
Application.ScreenUpdating = False
Run ("Croix")
Application.ScreenUpdating = True
End If
End Sub
Private Sub WorkSheet_Activate()
ValJ25 = Range("J25")
End Sub
Salut
"Calculate" peut cibler un classeur complet, une feuille particulière ou une plage donnée d'une feuille.
Il doit falloir placer cette méthode dans l'évènement "Activate" de la feuille.
Worksheets("Feuil1").Range("J25").Calculate
et aussi pour les autres feuilles crées
Private Sub Worksheet_Activate()