cs_diude54
Messages postés5Date d'inscriptionvendredi 29 mai 2009StatutMembreDernière intervention 2 juillet 2009
-
29 mai 2009 à 10:03
cnt
Messages postés219Date d'inscriptionlundi 21 novembre 2005StatutMembreDernière intervention20 décembre 2010
-
2 juin 2009 à 14:53
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
cs_diude54
Messages postés5Date d'inscriptionvendredi 29 mai 2009StatutMembreDernière intervention 2 juillet 2009 2 juin 2009 à 08:13
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
cnt
Messages postés219Date d'inscriptionlundi 21 novembre 2005StatutMembreDernière intervention20 décembre 20101 2 juin 2009 à 14:53
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()