ou
-------------------------------------------------------------------------------------
Do
Do While Counter < 5
newHour = Hour(Now())
newMinute = Minute(Now())
newsecond = Second(Now()) + 10
waittime = TimeSerial(newHour, newMinute, newsecond)
Counter = Counter + 1
Application.OnTime waittime, "total"
Exit Do
Loop
Loop Until Counter = 5
La boucle se fait 5 fois de suite, puis lance la fonction 5 fois, ce n'est pas le but, le but est de renouveler la fontion "total" toutes les minutes ...
cs_Orohena
Messages postés577Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention20 novembre 20104 13 déc. 2008 à 13:06
Bonjour zzskorupa et Sophie
1. zzskopura, tu as plusieurs problèmes dans ta macro :
a - la façon dont est générée l'heure waittime est incorrecte. Tu ne calcules pas l'heure ni la minute, mais seulement les secondes. Pour connaître quelle heure il sera dans une minute, utilise waittime DateAdd("n",1,Now), et pour savoir quelle heure il sera la minute suivante, waittime DateAdd("n", 1, waittime).
b - tu as 2 boucles imbriquées dont la plus profonde ne sert à rien :
Do While Counter < 5
...
Exit Do ' termine la boucle
Loop
c - ta boucle programme 5 fois la procédure "total" à la même heure. Je suppose que tu veux plutôt que les cinq programmations soient espacées d'une minute ? Dans ce cas, il vaudrait mieux :
- initialiser waittime avant la boucle : waittime = Now
- dans la boucle, avancer waittime d'une minute : waittime = DateAdd("n",1,waittime)
d - en dépit du conseil donné au point c, je te recommande de ne lancer qu'une seule programmation d'une même procédure "total" à la fois. La raison en est qu'à la fermeture de ton classeur, il te faudra gérer la déprogrammation des procédures en attente une par une, de façon à éviter qu'Excel ne rouvre intempestivement ton classeur. Une bonne pratique consiste à n'appeler qu'une seule fois la procédure "total", qui programme ensuite elle-même sa prochaine exécution. Il y a de bons exemples dans la documentation en ligne.
Concernant la durée de vie d'une variable déclarée dans une procédure, une telle variable est détruite à la fin de l'exécution de la procédure, à moins qu'elle soit déclarée en Static, auquel cas elle conserve sa valeur pendant toute l'exécution du code. Mais ne sachant à quelle variable et quelle procédure tu fais allusion, je ne peux rien te dire de plus sur ce point.
zzskorupa
Messages postés4Date d'inscriptionsamedi 22 septembre 2007StatutMembreDernière intervention17 décembre 2008 13 déc. 2008 à 07:50
Bonjour Orohena & Lillith212
Mon instruction
newsecond = Second(Now()) + 10 est en fait un essai pour ne pas attendre la minute.
L'instruction DateAdd("n", 1, Now) donne le même résultat que ce que j'ai déjà fait, c'est à dire que
la boucle se fait 5 fois de suite, puis lance la fonction 5 fois.
Pour la version modifiée du timer, je n'ai rien compris, si je fais un copier/coller vers le microsoft visualbasic, ca ne marche pas, je ne sais pas avec quoi lancer cette macro.
Je pense que j'ai un problème dans la structure de ma macro, j'ai lu quelque par que si tu défini une variable dans une procédure elle est détruite à la fin de cette procédure donc tu perd la valeur contenu.
Merci pour vos réponses, je suis toujours preneur de nouvelles idées
Vous n’avez pas trouvé la réponse que vous recherchez ?