Repeter une fonction toutes les minutes ? [Résolu]

zzskorupa 4 Messages postés samedi 22 septembre 2007Date d'inscription 17 décembre 2008 Dernière intervention - 10 déc. 2008 à 21:19 - Dernière réponse : zzskorupa 4 Messages postés samedi 22 septembre 2007Date d'inscription 17 décembre 2008 Dernière intervention
- 17 déc. 2008 à 17:32
 Hello every body,

Voilà, j'ai fait une macro pour récupérer des infos d'un fichier .TXT que je voudrais renouveler toutes les minutes, mais je n'y arrive pas !!!

J'ai essayer  :                                          
-------------------------------------------------------------------------------------
Counter = 0 ' Initialise la variable.
newHour = Hour(Now())
newMinute = Minute(Now())
newsecond = Second(Now()) + 10
waitTime = TimeSerial(newHour, newMinute, newsecond)Do While Counter < 5
newHour = Hour(Now())
newMinute = Minute(Now())
newsecond = Second(Now()) + 10
waitTime = TimeSerial(newHour, newMinute, newsecond)
Application.Wait waitTime
total
Counter = Counter + 1
Loop






Le processeur tourne toujours et j'aime pas.......



-------------------------------------------------------------------------------------

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 ...

 please, SVP, help me ça m'enerve
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
cs_Orohena 578 Messages postés vendredi 26 septembre 2008Date d'inscription 20 novembre 2010 Dernière intervention - 13 déc. 2008 à 13:06
3
Merci
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.

Bon courage !

Merci cs_Orohena 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 72 internautes ce mois-ci

Commenter la réponse de cs_Orohena
cs_Orohena 578 Messages postés vendredi 26 septembre 2008Date d'inscription 20 novembre 2010 Dernière intervention - 10 déc. 2008 à 21:47
0
Merci
Bonjour zzskorupa


Ton instruction newsecond = Second(Now()) + 10 me paraît louche. Quand Second(Now()) est à 59, newsecond vaut 69, non ????

Pourquoi n'utilises-tu pas  DateAdd("n", 1, Now) ?


Amicalement
Commenter la réponse de cs_Orohena
lillith212 1231 Messages postés vendredi 16 novembre 2007Date d'inscription 16 juin 2009 Dernière intervention - 11 déc. 2008 à 08:30
0
Merci
Bonjour,
Tu fais une macro donc tu dois etre en vba...
En vb6 tu utilises un timer mais il n'existe pas en vba. Pour cela utilise la version modifiée du timer :
http://www.vbfrance.com/codes/ALTERNATIVE-TIMER-VBA_41396.aspx
bon courage

S.L.B.
<hr />
Commenter la réponse de lillith212
zzskorupa 4 Messages postés samedi 22 septembre 2007Date d'inscription 17 décembre 2008 Dernière intervention - 13 déc. 2008 à 07:50
0
Merci
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
Commenter la réponse de zzskorupa
zzskorupa 4 Messages postés samedi 22 septembre 2007Date d'inscription 17 décembre 2008 Dernière intervention - 17 déc. 2008 à 17:31
0
Merci
Bonjour Orohena,

J'ai suivi tes conseils, et ça marche. J'ai utilisé le "c"

Merci
Commenter la réponse de zzskorupa
zzskorupa 4 Messages postés samedi 22 septembre 2007Date d'inscription 17 décembre 2008 Dernière intervention - 17 déc. 2008 à 17:32
0
Merci
Bonjour Orohena,

J'ai suivi tes conseils, et ça marche. J'ai utilisé le point c

Merci
Commenter la réponse de zzskorupa

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.