Re: Executer une macro suite à un calcul avec worksheet calculate
#11
Accro XLPages

Inscription: 09/01/2008
De Montréal, Québec

Messages: 461

Système d'exploitation:
PC
Version Excel utilisée:
97 à 2016
Posté le : 08-06-2010 20h56
Décidément bluemoon91 ce n'est pas mon jour. Je devrais prendre quelques jours de repos de plus.

Encore un classeur joint.

Désolé de mon cafouillage. Je me pardonne néanmoins.

Cordialement,

Guy
Pièce jointe:
xls Classeur exemple.xls   [ Taille: 27.50 Ko - Téléchargements: 366 ]

Hors Ligne
Rapport   Haut 

Re: Executer une macro suite à un calcul avec worksheet calculate
#12
Aspirant XLPages

Inscription: 03/06/2010

Messages: 21

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 08-06-2010 21h31
ça fonctionne! :)

y a pas de mal Guy, c'est déjà tellement sympa de ta part de prendre le temps de faire tout ça ;)

bon, il me reste juste à insérer la macro, je vous tiens au courant,

merci!


Hors Ligne
Rapport   Haut 

Re: Executer une macro suite à un calcul avec worksheet calculate
#13
Aspirant XLPages

Inscription: 03/06/2010

Messages: 21

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 08-06-2010 21h56
re ;)

Je reviens au front car le problème persiste avec la macro.

Je m'explique:
J'ai mis comme tu me l'as indiqué le code directement de la macro à la place de MsgBox, ce qui donne:


Option Explicit

Public Sub ExecutionC1()

  Range("C4").Select
    ActiveCell.FormulaR1C1 = "=RC[-1]*RC[-2]"
    Range("C4").Select
    Selection.AutoFill Destination:=Range("C4:C8"), Type:=xlFillDefault
    Range("C4:C8").Select

End Sub


message d'erreur : "La méthode select de l'objet range a échoué"

C'est une toute petite macro test que j'ai faite, histoire de voir si ça fonctionne. Il s'agit de multiplier une colonne par une autre.

Je te joins le fichier pour que tu puisses y jeter un oeil si tu as le temps.

Par contre, devrai-je toujours mettre le code directement ainsi ou ne peut -on pas faire appel à une macro directement située dans un autre module? Je dis ça pour des macros plus complexes.


bien cordialement :)





Pièce jointe:
xlsm test.xlsm   [ Taille: 17.70 Ko - Téléchargements: 256 ]
Hors Ligne
Rapport   Haut 

Re: Executer une macro suite à un calcul avec worksheet calculate
#14
Accro XLPages

Inscription: 09/01/2008
De Montréal, Québec

Messages: 461

Système d'exploitation:
PC
Version Excel utilisée:
97 à 2016
Posté le : 10-06-2010 00h45
Bonjour bluemoon91,

Il se trouve que je suis particulièrement occupé, débordé en fait, ces jours-ci.
Alors mon cher ami (MyDearFriend) ou celles et ceux qui le veulent bien sont invités à reprendre ce fil.

Bonne chance dans ton apprentissage de la programmation. La côte peut te paraître abrupte mais ne te décourage pas et, quand tu as un peu de temps, jette un oeil au tutoriel que je t'ai proposé aussi tu peux chercher sur la toile il y a plein de ressources.

Très cordialement,

Guy

Hors Ligne
Rapport   Haut 

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

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1483

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016
Posté le : 10-06-2010 01h20
Bonsoir bluemoon91, Guy, le Forum,

Pas de problème Guy, compte tenu de tes préoccupations actuelles, c'est tout naturellement que je reprends la suite de ce fil. Dans l'attente, je te souhaite de surmonter au plus vite cette période difficile cher Guy.

Le temps d'assimiler le sujet, si bluemoon91 n'y voit pas d'inconvénient et si d'autres ne sont pas intervenus entre temps, je proposerai une solution.

Bien cordialement,

Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: Executer une macro suite à un calcul avec worksheet calculate
#16
Aspirant XLPages

Inscription: 03/06/2010

Messages: 21

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 10-06-2010 01h23
Merci encore d'avoir pris le temps de m'aider Guy!


Pour ceux qui souhaiteraient reprendre le fil, voici un petit résumé du problème:

Je vous joins le fichier test.

Dans ce fichier on a tout d'abord:
C1=A1*B1

Lorsque l'on change A1 ou B1, C1 se modifie. Cette modification  de cellule automatique entraine l'affichage d'un message: "Hello"

J'ai aussi enregistré une petite macro test: "Macro1" qui correspond à multiplier la colonne (A5;A9) par la colonne (B5;B9).
Lorsqu'on lance cette petite macro, les résultats sont affichés de C5 à C9.

Maintenant, je cherche le moyen de remplacer l'affichage du message "Hello" par le lancement de la "Macro1".
En clair, dès que C1 est modifiée automatiquement, cela déclenche la Macro1.
Mes tentatives de débutants m'amènent toujours à planter Excel

Pouvez vous me donner un petit coup de main?

merci!
Pièce jointe:
xlsm test calculate.xlsm   [ Taille: 17.69 Ko - Téléchargements: 291 ]
Hors Ligne
Rapport   Haut 

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

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1483

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016
Posté le : 10-06-2010 02h16
Re bluemoon91,

A la lueur de ton dernier exemple, tu trouveras ci-joint ton fichier modifié selon mon interprétation du problème...

J'ai simplifié à outrance ton code VBA et te propose le code ci-dessous en lieu et place :

DANS LE MODULE DE CODE DE LA FEUIL1 :
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    If Not Intersect(Target, Range("A1:B1")) Is Nothing Then
        MaMacro
    End If
End Sub
DANS UN MODULE DE CODE STANDARD (exemple : Module1) :
Option Explicit

Sub MaMacro()
    Range("C5").Formula = "= A5*B5"
    Range("C5").AutoFill Destination:=Range("C5:C9"), Type:=xlFillDefault
End Sub
Le code contenu dans le module ThisWorkbook est, quant à lui, supprimé.

Je te laisse d'abord regarder si l'exemple joint correspond bien à ce que tu veux obtenir, je te laisse également analyser le code simple utilisé (ci-dessus) et je me tiens à ta disposition pour t'expliquer le fonctionnement de l'ensemble et les erreurs que tu avais commises selon moi.

Il reste une question de fond également qu'il convient de se poser : quel est l'intérêt d'insérer des formules dans les cellules C5:C9 par un automatisme déclenché sur C1 ?
Je résume la situation : à chaque fois que C1 va changer, la macro va insérer (ou réinsérer) les mêmes formules dans la plage C5:C9. Quel en est l'intéret ? Pourquoi réinsérer des formules de calcul à chaque fois ?

Cordialement,

Pièce jointe:
xlsm mDF Test.xlsm   [ Taille: 14.14 Ko - Téléchargements: 295 ]

Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: Executer une macro suite à un calcul avec worksheet calculate
#18
Aspirant XLPages

Inscription: 03/06/2010

Messages: 21

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 10-06-2010 11h16
Bonjour à tous,

Tout d'abord, merci de reprendre le fil de cette discussion.

J'ai bien regardé ton fichier mais ce n'est pas ce que je recherche, je vais essayer de mieux formuler mon problème.

Dans ton fichier, la macro se lance quand on modifie "manuellement" A1 ou B1, il utilise la fonction Worksheet_change avec un Target.
Ce que je cherche, c'est quand C1 est modifié suite à un calcul, cela lance la macro.

Dans ce fichier, C1=A1*B1. Si par exemple dans ce meme fichier on remplace la formule par C1 = D1*E1, cela ne marche plus car ce n'est pas la modification de C1 qui lance la macro.
C'est pour cela que la fonction Worksheet_calculate semblait plus appropriée, car il faut se baser sur C1 seulement et non sur les paramètres.


J'ai essayé aussi de simplifier à outrance le problème pour l'adapter par la suite.

En fait, j'ai un chronometre qui enregistre en temps réel des temps intermédiaires dans une colonne. Au bout de X temps enregistré, cela lance une série d'opération qui me donne un résultat dans une cellule. Le but est qu'une macro se lance quand cette cellule est modifiée, donc à chaque fois que l'on a un nouveau résultat. Cette macro permet à Excel de "lire" le résultat, c'est à dire de transformer le texte en parole (on en avait parlé dans un autre post). Tout marche très bien indépendamment. Il me manque le lien entre le résultat et le  déclenchement de la macro.

Donc ici, la macro du fichier qui multiplie une colonne par une autre n'est en fait qu'un prétexte, elle n'a aucune importance. Je voulais essayé de résonner sur un fichier simple et une macro simple pour comprendre et essayer de me faire comprendre aussi ;)

Ce que je cherche, c'est quand une cellule est modifiée automatiquement (la cellule résultat), cela lance une macro et peut importe la macro.



Bien cordialement ;)







Hors Ligne
Rapport   Haut 

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

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1483

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016
Posté le : 10-06-2010 14h52
Bonjour bluemoon91, le Forum,

Je me doutais bien que le problème tournait autour de ça...

Je vais donc essayer de te détailler le problème de mon point de vue :
Tu souhaites déclencher une macro sur changement de valeur d'une cellule particulière (C1), Ok.

Cela dit, comme tu as dû le remarquer, l'évenènement Change() ne se déclenche malheureusement pas lors d'un recalcul d'une formule.

Il te reste donc 2 alternatives :

- soit avoir recours à l'évènement Calculate(). Ca peut être une piste à suivre... sauf que pour moi cet évènement possède un souci majeur : il ne possède pas d'argument Target. Cet évènement se déclenche donc à chaque recalcul de la feuille, mais tu ne peux obtenir la cellule à l'origine de son déclenchement. Ce n'est pas une façon optimisé de faire les choses puisque tu vas systématiquement faire dérouler un traitement, même si le recalcul est déclenché par un autre évènement ou une autre cellule que celle visée. Si j'ai bonne mémoire, tu souhaitais déjà avoir une précision au millième pour ton chrono... avec de telle procédure en parallèle, tu risques fort de t'éloigner de ton objectif.

- soit conserver le recours à l'évènement Change() comme je te l'ai proposé et qui surveillera, non pas la cellule contenant la dite formule (C1), mais la ou les cellules à l'origine du recalcul de cette formule (donc A1 ou B1 dans l'exemple précédent). A noter que dans ce cas, A1 ou B1 peuvent être saisies directement par l'utilisateur ou bien modifiées via une macro VBA (ça fonctionnera aussi). Evidemment, ça ne fonctionnera plus si ces cellules sont elles-mêmes des formules, dans ce cas, il faudrait se pencher sur leur propres cellules dépendantes et ainsi de suite...

Tu n'as pas d'autres choix, c'est soit la première méthode (via Calculate), soit la deuxième (via Change sur les cellules en amont de la formule). Mais en tout cas, ce n'est pas les 2 en même temps comme je l'ai vu dans ton exemple précédent.

Sinon, j'entrevois une autre piste à suivre peut-être :
Citation :
bluemoon91 a écrit :
En fait, j'ai un chronometre qui enregistre en temps réel des temps intermédiaires dans une colonne. Au bout de X temps enregistré, cela lance une série d'opération qui me donne un résultat dans une cellule. Le but est qu'une macro se lance quand cette cellule est modifiée

... plutôt que de surveiller la modification de cette cellule résultante d'une série d'opérations, pourquoi ne pas t'intéresser directement à l'évènement qui va déclencher la dite série d'opérations... Autrement dit : au bout de X temps enregistrés, je lance une série d'opérations ET je contrôle le résultat qui lui même déclenchera cette fameuse macro si la condition est remplie.

Cordialement,

Edité par myDearFriend! le 10/06/2010 15:08:22

Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: Executer une macro suite à un calcul avec worksheet calculate
#20
Aspirant XLPages

Inscription: 03/06/2010

Messages: 21

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 10-06-2010 15h25
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


Hors Ligne
Rapport   Haut 


Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Qui consulte actuellement ce sujet ?   1 Utilisateur(s) anonymes