Rapport de message :*
 

Re: Executer une macro suite à un calcul avec worksheet calculate

Titre du sujet : Re: Executer une macro suite à un calcul avec worksheet calculate
par bluemoon91 le 10/06/2010 15:25:57

Bonjour MydearFriend et bonjour à tous,

Le problème de précision par rapport au chrono n'est pas un soucis car le déclenchement de la macro interviendrait seulement à la fin des prises de mesure (5 ou 6):

Les prises de mesures sont "moulinées" dans des fonctions en temps réel, puis à la fin de la dernières prise de mesure, j'obtiens un résultat issu de plusieurs calculs.

La macro se déclencherait quand la cellule "resultat" ou C1 dans notre exemple plus haut se modifie.


Après avoir cherché sur le net des informations concernant l'évènement Calculate, je suis tombé sur ça:

"L'événement Calculate

Cet événement se produit après tout recalcul de la feuille.

L'événement Calculate complète l'événement Change en ce sens qu'il permet de détecter des changements de valeur par calcul dans des cellules contenant des formules.

Contrairement à Change, la procédure Calculate ne dispose pas de paramètre Target. Il n'est donc pas possible de détecter quelles sont les cellules dont le contenu a été modifié à l'issue du recalcul."

Là vous etes d'accord ;)

Mais il continue en disant:

"Pour cela il est nécessaire de passer par une ou plusieurs variables stockant le contenu antérieur de la ou des cellules dont on veut intercepter le changement de valeur."

Puis il donne son code:

"Dans le code suivant, un message est affiché à chaque fois que la cellule A1 de la feuille Feuil1 change de valeur, que ce soit par saisie manuelle (Worksheet_Change) ou calcul de formule (Worksheet_Calculate).
La variable ValPrec sert à vérifier si cette valeur a changé en stockant la valeur précédente de la cellule et en la comparant à sa nouvelle valeur."

' Dans le module objet de Feuil1 :

Public ValPrec

Private Sub Worksheet_Calculate()
  Vérif
End Sub

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
  If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub
  Vérif
End Sub

Private Sub Vérif()
  If VarType(Range("A1")) = VarType(ValPrec) Then _
    If ValPrec = Range("A1") Then Exit Sub
  MsgBox "Cellule A1 passe de " & CStr(ValPrec) & _
    " vers " & CStr(Range("A1"))
  ValPrec = Range("A1")
End Sub

' Dans le module de code ThisWorkbook :

Private Sub Workbook_Open()
  Feuil1.ValPrec = Feuil1.Range("A1")
End Sub


Peut etre que je ne comprends pas, mais vu qu'il existe une possibilité d'intercepter le changement de valeur d'une cellule et qu'on arrive à afficher une fenetre avec un message à chaque fois que cela se produit, je me suis demandé si on ne pouvait pas à la place d'avoir la fenetre, lancer une macro.


La seconde alternative n'est pas possible car je ne rentre rien "à la main", les temps sont enregistrés dans une colonne les uns au dessous des autres, au bout du 6e temps, une première macro se lance, c'est le solver qui me calcul les parametres d'une courbe, puis me donne un résultat.
Là, ça marche.
Mais c'est à partir de ce résultat que je voudrai qu'une autre macro s'exécute.


Si ce n'est pas possible, je m'en remettrai ;) mais voilà l'origine du problème et mes interrogations par rapport à la procédure Calculate et le lancement d'une macro.

Bien cordialement