Realiser une tache toute les heures [Résolu]

Messages postés
7
Date d'inscription
dimanche 1 août 2004
Dernière intervention
30 septembre 2008
- - Dernière réponse : PCPT
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
- 25 févr. 2006 à 14:03
bonjour


voila j'aimerais savoir comment faire pour effectuer une tache toutes les "heures"


en effet je voudrais realiser un petit programme qui copie un fichier d'un dossier "A" vers un dossier "B" et ce chaque heure


pour la copie du fichier c'est bon ... mais la je seche sur la copie toute les heure.


merci d'avance pour vos reponces
Afficher la suite 

8 réponses

Meilleure réponse
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Dernière intervention
28 août 2015
3
Merci
Salut
Le plus simple est de mettre un composant Timer sur ta forme.
Interval : 60000 mSec = 1 minute
Double-click sur le Timer pour entrer le code suivant :

Static Heure As Integer
' Si on a déjà vu cette heure, on ressort
If Heure = Hour(Now) Then Exit Sub
' Nouvelle heure : Mémorise
Heure = Hour(Now)
' Exécute ton script ICI

Une variable déclarée en Static dans une Sub conserve sa valeur entre deux scrutations.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accro

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 95 internautes nous ont dit merci ce mois-ci

Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
0
Merci
salut,


ok pour le timer, mais executé à 21h59 et à 22h00.


donc toutes les nouvelles heures (changement).


pour toutes les nouvelles heures d'execution (lancement de l'appli) :





dans le timer à 1 minute :


Static iCpt as integer

iCtp = iCpt+1

if iCpt = 60 then

iCpt=0

Call TaProcedure

endif





++ ;)


PCPT [AFCK]
Messages postés
630
Date d'inscription
samedi 15 février 2003
Dernière intervention
9 octobre 2011
0
Merci
je sais pas quel est la valeur maxi d'un timer, mais pourquoi pas un timer à 3 600 000 mSec

Sinon tu peux aussi travailler avec les tâches planifiées, et tu réalises une tache pour chaque heure soit 24 tâches
La tâche execute ton programme qui effectue simplement la copie et se termine.
L'avantage c'est que tu utilises un service windows, et tu n'as pas à te casser la tête , comment démarrer ton timer, garder ton programme résident ect.....
(Sous XP Panneau de configurations/taches planifiées)
Messages postés
7
Date d'inscription
dimanche 1 août 2004
Dernière intervention
30 septembre 2008
0
Merci
merci de vos reponces

je rencontre quelque probleme avec l'utilisation de Hour (Now). En effet lorsque je lance le programme un message d'erreur s'affiche => "erreur de compilation incorrect à l'exterieur d'une procedure" et sa me souligne le "Now"

le but du programme et de copier un fichier toutes les heures "systeme" (1h00, 2h00, .....) et pas toutes les heure a partir d'un instant T. Exemple si on lance le programme a 1h30 (matin ou apres midi) il copira le fichier a 2h00 puis il se relancera de nouveau a 3h00 puis 4h00 ....

il est vrais que je pourrais utiliser les taches planifiées de windows mais ... pourquoi faire simple quand on peu faire compliqué.

merci d'avance pour vos reponce
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Dernière intervention
28 août 2015
0
Merci
Re
"Now" n'est pas reconnu ?
Avec quel VB fonctionnes-tu ? pas normal en VB6
Regarde dans l'aide, je ne comprends pas trop pourquoi il te le refuserait

PCTPT à raison pour ma méthode : Si tu lances ton programme à 21h30, il se déclenchera une première fois de suite, puis attendra 2h00.
Pour corriger, il suffit de faire tourner le Timer un peu plus vite : Interval 5000 mSec = 5 sec
et de tester les minutes :
If Minute(Now) = Heure Then Exit Sub ' Déjà traité
Heure = Minute(Now)
If Minute(Now) <> 0 Then Exit Sub ' Il n'est pas "l'heure précise"
' Exécution de la tache
End If
(tu pourras changer le nom de la variable Heure qui n'est plus cohérente, mais n'utilise pas Minute qui est un mot clé VB)
Le premier test permet de ne pas refaire l'action si tu exécutes plusieurs fois le code dans la même minute, ce qui est le cas avec un Interval inférieur à la minute.
Attention : Tu pourrais mettre 60000 mSec dans le Timer, mais les durées des Timer ne sont pas garanties : Tu risquerais donc de louper le xhh 00

Interval d'un Timer sous VB6 ne peut aller que jusqu'à 65535 mSec.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accro
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Dernière intervention
28 août 2015
0
Merci
Corrige : Le dernier End If est de trop
Messages postés
7
Date d'inscription
dimanche 1 août 2004
Dernière intervention
30 septembre 2008
0
Merci
re bonjour

alors un grand merci a JACK. en effet ta solution fonctionne tres bien, cependant j'ai modifié un petit truc => au lieu de mettre "Hour (Now)" j'ai utilisé "format(time, "hh")" se qui me donne se code :

<HR>
variable

Dim Heure As Integer

et dans le timer reglé à 1000ms

Private Sub Timer1_Timer()
If Heure = Format(Time, "hh") Then Exit Sub
Heure = Format(Time, "hh")
' execution du code
msgbox "fichier copier a"& format(time, "hh:mm:ss")
end sub


<HR>
merci encor a toutes les personnes qui m'on repondu
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
0
Merci
ps : pour ne pas lancer le première fois, il suffit d'initialiser dans le load (avant le déclenchement du timer donc...)

Heure = Format(Time, "hh")

++

PCPT [AFCK]

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.