Forums XLPages

Tous les messages (bluemoon91)

1 2 3 »
Re: Executer une macro suite à un calcul avec worksheet calculate
#1
Aspirant XLPages

Inscription: 03/06/2010

Messages: 21

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 10-06-2010 16h50
Re,

Je tiens à vous présenter à tous mes excuses si vous pensez que j'ai manqué de respect à qui que ce soit.

Comme vous l'avez vu, je suis totalement novice dans le domaine et effectivement j'ai posté sur d'autres forums la meme problématique car voyant que cela pouvait poser une difficulté, j'ai pensé pouvoir avoir plusieurs avis différents sur la questions.
Quoi qu'il en soit, j'ai toujours utilisé le meme pseudo partout, donc je n'ai pas voulu le dissimuler.
D'autant plus que j'actualise les réponses en fonction de ce que je trouve chez les uns et les autres, et je ne pars pas comme un voyou car je respecte le travail des autres.

Ceci dit, je viens de lire ton lien sur les multiposts et je comprends tout à fait ton point de vu, on a besoin d'avoir la discussion dans son ensemble pour plus de clarté.
Je reconnais donc mon erreur.


Quoi qu'il en soit, en "bidouillant" le code de Laurent Longre à la manière d'un débutant, le problème est résolu.
Je ne sais pas pourquoi ça fonctionne, mais il suffisait d'intervertir 2 lignes de codes dans Private Sub Verif:

Public ValPrec

Private Sub Worksheet_Calculate()
 Verif
End Sub

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
  If Intersect(Target, Range("C1")) Is Nothing Then Exit Sub
  Verif
 
 
End Sub

Private Sub Verif()
  If VarType(Range("A1")) = VarType(ValPrec) Then _
    If ValPrec = Range("C1") Then Exit Sub
 
  ValPrec = Range("C1")

   Macro1
     
                 
End Sub
 




et maintenant, cela fonctionne très bien, je vous poste le fichier que j'ai posté ici mais modifié.

Dans le code de Laurent Longre, Msgbox était suivi de ValPrec = Ranga("C1), j'avais donc remplacé MsgBox par Macro1, ce qui me semblait logique, mais cela ne marchait pas.

J'ai donc essayé de mettre Macro1 à la fin, et cela fonctionne.

Il est donc possible de lancer une macro à partir d'un changement automatique de cellule, cela pourra en plus m'etre très utile pour d'autres choses.

Je vous remercie infiniement pour votre patience et le temps que vous avez accordé à mon problème.

Et encore une fois, je vous présente mes excuses pour le multipost.


bien cordialement




Pièce jointe:
xlsm test calculate ok.xlsm   [ Taille: 16.31 Ko - Téléchargements: 617 ]
Hors Ligne
Rapport   Haut 

Re: Executer une macro suite à un calcul avec worksheet calculate
#2
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 

Re: Executer une macro suite à un calcul avec worksheet calculate
#3
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
#4
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: 677 ]
Hors Ligne
Rapport   Haut 

Re: Executer une macro suite à un calcul avec worksheet calculate
#5
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: 628 ]
Hors Ligne
Rapport   Haut 

Re: Executer une macro suite à un calcul avec worksheet calculate
#6
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
#7
Aspirant XLPages

Inscription: 03/06/2010

Messages: 21

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 08-06-2010 20h19
Re ;)

merci encore, mais malheureusement il ne se passe toujours rien quand on modifie C1 :(
La fenetre ne s'affiche pas...

ça marche bien chez toi?


cordialement ;)




Hors Ligne
Rapport   Haut 

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

Inscription: 03/06/2010

Messages: 21

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 08-06-2010 19h11
Merci pour le fichier ;)

Mais désolé, ça ne semble pas fonctionner...
En fait, le code tel quel du fichier joint n'affiche plus la fenetre "coucou" lorsque C1 est modifié.


J'ai fait un test (juste pour voir) en remplaçant cette ligne de code:

If VarType(Range("c1")) = VarType(ValPrec) And Not (ValPrec = Range("c1")) Then

par l'ancienne et la fenetre "coucou" réapparait bien à chaque modification de C1.

Avec ce code modifié, par contre toujours le meme probleme du lancement de la macro, dans le module modproc, lorsque je remplace Msgbox par Macro1:

Option Explicit

Public Sub ExecutionC1()

  ' Placer ici le code à exécuter en lieu et place du message "coucou"
 
  macro1 'Ou call macro1

End Sub



les messages de bug réapparaissent et je retourne au meme point qu'au premier message :(

Première question: peux tu tester le fichier que tu m'as joint pour voir si ça marche chez toi et que tu vois la fenetre "coucou" s'afficher à chaque changement de C1?

Seconde question: qu'elle est la ligne de commande exacte qu'il faut marquer à la place de Msgbox pour lancer une macro dont le lom est "Macro1"?


merci infiniment pour ta patience!

cordialement


Hors Ligne
Rapport   Haut 

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

Inscription: 03/06/2010

Messages: 21

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 08-06-2010 17h46
et puis aussi dernière petite requete, que dois-je mettre à la place de Msgbox "coucou" pour lancer la "macro1", simplement call "macro1" par exemple?

merci encore ;)
Hors Ligne
Rapport   Haut 

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

Inscription: 03/06/2010

Messages: 21

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 08-06-2010 17h40

merci pour la suite ;)

cependant, désolé pour le niveau de mes questions, mais comment faire pour que le nom du module porte le nom modProc?

doit-on écrire:
Private sub modProc()?
puis la fin de ton code?

Ou alors, pourrais tu poster l'intégralité du code s'il te plait?
ça sera un peu plus simple pour moi ;)
Car là, il me met "erreur de compilation, variable non définie" pour modProc.

Encore désolé et merci pour ta patience!

Hors Ligne
Rapport   Haut 

1 2 3 »