Re: Executer une macro suite à un calcul avec worksheet calculate | ||
---|---|---|
Inscription: 09/01/2008
De Montréal, Québec
Messages:
463
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 |
|
|
Re: Executer une macro suite à un calcul avec worksheet calculate | ||
---|---|---|
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! |
|
|
Re: Executer une macro suite à un calcul avec worksheet calculate | ||
---|---|---|
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 :) |
|
|
Re: Executer une macro suite à un calcul avec worksheet calculate | ||
---|---|---|
Inscription: 09/01/2008
De Montréal, Québec
Messages:
463
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 |
|
|
Re: Executer une macro suite à un calcul avec worksheet calculate | ||
---|---|---|
Inscription: 18/05/2006
De Saône-et-Loire (71)
Messages:
1539
Système d'exploitation: PC Version Excel utilisée: 97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365 |
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
Le Webmaster La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien |
|
|
Re: Executer une macro suite à un calcul avec worksheet calculate | ||
---|---|---|
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! |
|
|
Re: Executer une macro suite à un calcul avec worksheet calculate | ||
---|---|---|
Inscription: 18/05/2006
De Saône-et-Loire (71)
Messages:
1539
Système d'exploitation: PC Version Excel utilisée: 97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365 |
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 Option Explicit 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, Didier_mDF
Le Webmaster La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien |
|
|
Re: Executer une macro suite à un calcul avec worksheet calculate | ||
---|---|---|
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 ;) |
|
|
Re: Executer une macro suite à un calcul avec worksheet calculate | ||
---|---|---|
Inscription: 18/05/2006
De Saône-et-Loire (71)
Messages:
1539
Système d'exploitation: PC Version Excel utilisée: 97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365 |
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 : ... 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
Le Webmaster La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien |
|
|
Re: Executer une macro suite à un calcul avec worksheet calculate | ||
---|---|---|
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." "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). ' 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 |
|
|