Exécution d'une macro automatiquement avec formule dans cellule

Résolu
Pijenyal Messages postés 11 Statut Membre -  
Pijenyal Messages postés 11 Statut Membre -
Bonjour à tous,

J'aimerais exécuter une macro automatiquement lorsque la valeur d'une cellule change.
Le problème est que la cellule contient une formule et ma macro ne fonctionne pas (sauf si je change moi meme la valeur ce que je ne souhaite pas)

Voici mon code qui fonctionne très bien mais manuellement. Il consiste à changer la couleur (RGB) de
la forme (= objet dessin dénommé "ARA", "EPA" et "DHA") en fonction des valeurs entrées dans les cellules
E20; E21, et E22. Sauf que ces valeurs sont issues d'une formule (E20=A1/20 par exemple).


Private Sub Worksheet_Change(ByVal Target As Range)
'Updateby Extendoffice 20160704

If Intersect(Target, Range("E20:E22")) Is Nothing Then Exit Sub

Select Case Target.Row
Case 20: Set sh = ActiveSheet.Shapes("ARA")
Case 21: Set sh = ActiveSheet.Shapes("EPA")
Case 22: Set sh = ActiveSheet.Shapes("DHA")
End Select

If IsNumeric(Target.Value) Then
If Target.Value >= 50000 Then
sh.Fill.ForeColor.RGB = RGB(255, 192, 0)
ElseIf Target.Value < 50000 And Target.Value >= 5000 Then
sh.Fill.ForeColor.RGB = RGB(251, 221, 41)

Else
sh.Fill.ForeColor.RGB = RGB(230, 230, 230)
End If
End If


End Sub
A voir également:

1 réponse

eriiic Messages postés 25847 Statut Contributeur 7 279
 
Bonjour,

Dans ce cas dans ton Worksheet_Change il faut superviser les cellules des antécédents de ta formule.
Soit A1 dans ton exemple E20=A1/20
eric
0
Pijenyal Messages postés 11 Statut Membre
 
Bonjour Eriiic,
Merci pour votre rapide réponse. Je suis un novice en VBA. J'ai essayé votre solution mais je n'obtiens pas le résultat escompté. A vrai dire, la vraie formule est : E20=SI(ESTERREUR(A1);0;A1) et celle-ci concerne une série de cellules prises aléatoirement (pas dans l'ordre E20 pour A1, E21 pour A2 etc.., le but de la formule est en fait de les réarranger sur une nouvelle colonne). Je cherchais une instruction à entrer dans mon code VBA qui prendrait en compte automatiquement les modifs apportées dans A1, A2... mais à partir de E20, E21 et E22.
0
eriiic Messages postés 25847 Statut Contributeur 7 279
 
Si tu as ESTERREUR(A1) dans ta formule c'est que A1 en contient une aussi.
Donc remonter tous les antécédents pour surveille les modifications de ceux-ci.
Ex :
E20: =SI(ESTERREUR(A1);0;A1)
A1: = 1/Z1

C'est la modif de Z1 qui entraine tous les recalculs, c'est donc sur un Change de cette cellule que tu dois faire tes tests et agir.
If Intersect(Target, union([Z1],(K3],(B23]) Is Nothing Then Exit Sub

(ref misent au hasard)
eric
0
Pijenyal Messages postés 11 Statut Membre
 
Merci pour ce retour. J'ai fait l'essai avec Target, union..., tjrs aucun résultat. Peut-être que je m'y prends mal. Je peux vous envoyer le fichier simplifié en question pour vous en rendre compte ? La macro ne s'exécute que lorsque j'entre les valeurs manuellement dans les cellules E14 à E16 mais pas en les saisissant d'abord sur les cellules D2 à F2.
0
eriiic Messages postés 25847 Statut Contributeur 7 279
 
déposer le fichier xls (réduit au nécessaire et anonymisé sur cjoint.com et coller ici le lien fourni.
eric
0
Pijenyal Messages postés 11 Statut Membre > eriiic Messages postés 25847 Statut Contributeur
 
C'est fait :
https://www.cjoint.com/c/IDoqunq45zt
0