J'ai une fonction définie par l'utilisateur écrite en VBA qui met à jour les couleurs dans une forme dessinée (feu tricolore composé de trois cercles). L'appel dans une cellule de feuille de calcul ressemble à ceci :
setTrafficLight(A1, "Ovale 1", "Ovale 2", "Ovale 3")
où A1 est une cellule contenant par exemple "vert" ou "rouge". Les autres paramètres sont les noms des formes.
J'ai eu un problème que la fonction était appelée et supprimait l'historique des annulations (appeler une fonction définie par l'utilisateur dans Excel désactive les anciennes entrées d'annulation). Pour corriger cela, j'ai enregistré une fonction d'annulation vide via
Application.OnUndo "Annuler SetTrafficLight", "annulerSetTrafficLight"
Dans ma fonction setTrafficLight, Application.Volatile
est défini sur Faux
pour que la fonction ne soit pas appelée à chaque fois qu'une valeur sur les feuilles de calcul change. Mais maintenant, la fonction n'est même pas appelée lorsque la valeur d'entrée dans A1 change. Avec Application.Volatile = Vrai
ça fonctionne, mais alors l'annulation ne fonctionne pas correctement. Si je supprime complètement Application.Volatile
alors la mise à jour fonctionne correctement, mais seulement un niveau d'annulation peut être utilisé.
Une idée sur comment résoudre ce problème ?