2 votes

Fonction définie par l'utilisateur d'Excel non appelée lors de la mise à jour de la cellule

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 ?

1voto

Cornelius Points 555

Que diriez-vous d'utiliser l'événement Worksheet_Change ?

quelque chose comme ceci :

cela devrait fonctionner pour la cellule A1, mais pourrait être facilement ajusté pour d'autres

Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Row = 1 And Target.Column = 1 Then
      Call setTrafficLight
   End If
End Sub

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X