I. Introduction▲
Un premier tutoriel expliquant comment générer des tâches planifiéesgénérer des tâches planifiées a déjà été publié par Jean-Philippe AndréJean-Philippe André.
L'objectif de cet article est d'expliquer, au travers d'une base exemple, comment enregistrer dans une table des tâches récurrentes (sauvegardes de fichiers, alertes, transferts de tables..) en les associant à des procédures et à une période, pour ensuite les exécuter au bon moment en utilisant la méthode Run d'Access.
Pour mieux comprendre le fonctionnement de cet outil, on décomposera sa présentation en trois parties :
- table pour enregistrer les données des tâches ;
- procédure d'exécution des tâches ;
- code des procédures associées aux tâches.
II. Table pour enregistrer les données des tâches▲
On part d'une table T_Tache pour enregistrer les informations sur les tâches à exécuter :
Champ |
Type de données |
Description |
---|---|---|
IdTache |
Numéro-auto |
Numéro d'enregistrement |
IntituleTache |
Texte |
Intitulé de la tâche |
UniteTemps |
Texte |
Unité de temps (seonde, minute, heure, jour, mois, semaine, année) |
PeriodeTemps |
entier long |
période en nombre de secondes, minutes, heures, jours, semaines, mois, ou années |
DateProchaineExecution |
Date/heure |
Date de prochaine exécution de la tâche |
DateFinExecution |
Date/heure |
Date de fin d'exécution de la tâche |
NomProcedure |
Texte |
Nom de la procédure à exécuter |
ArgumentProcedure |
Texte |
Argument de la procédure à exécuter |
Active |
Booléen |
Indique si la tâche est active ou non |
Exemples de tâches à exécuter :
Sauvegarde du fichier Access toutes les 30 minutes.
Transfert tous les mois des données sur les factures du mois précédent.
Alerte pour relancer un client toutes les semaines pour payer sa facture.
Pour exécuter la procédure on utilise la méthode Run avec le nom de la procédure en argument.
III. Procédure d'exécution des tâches▲
Extrait de l'aide :
Vous pouvez utiliser la méthode Run pour exécuter une procédure ou une fonction spécifiée par l’utilisateur ou Microsoft Access.
Syntaxe
expression.Run (Procédure, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9, Arg10, Arg11, Arg12, Arg13, _ Arg14_, Arg15, Arg16, Arg17, Arg18, Arg19, Arg20, Arg21, Arg22, Arg23, Arg24, Arg25, Arg26, _ Arg27_, Arg28, Arg29, Arg30)
expression est une variable qui représente un objet Application.
...
Dans notre cas, on n'utilisera au plus qu'un argument, et la ligne de code ressemblera donc à :
application.
Run
NomProcedure, ArgumentProcedure
La procédure d'exécution des tâches les parcourt une à une :
- On ouvre le Recordset contenant les informations sur les tâches actives ;
- Pour chaque enregistrement, on teste si la date de prochaine exécution de la tâche est inférieure ou égale à maintenant ;
- Si c'est le cas, on exécute la procédure associée à la tâche avec la méthode Run ;
- Puis on met à jour la date de sa prochaîne exécution.
Gros plan sur les commandes de lancement d'une procédure :
'
il
faut
lancer
la
tâche
et
recalculer
la
date
de
prochaîne
exécution
de
la
tâche
If
Nz
(
rs!ArgumentProcedure, "
"
) =
"
"
Then
'
si
pas
d'argument
à
la
procédure
Run (
rs!NomProcedure) '
on
exécute
la
procédure
à
l'aide
de
la
méthode
run
Else
'
sinon
'
on
exécute
la
procédure
à
l'aide
de
la
méthode
run
avec
un
argument
supplémentaire
Run rs!NomProcedure, rs!ArgumentProcedure
End
IF
L'exécution des tâches s'effectue sur l'événement Timer du formulaire F_ProgrammerTaches .
III-A-1. Exécution des tâches sur timer▲
Pour paramétrer le Timer du formulaire on a besoin de définir l'intervalle minuterie en millisecondes, par exemple, pour exécuter la procédure RunTasks toutes les 60 secondes, on saisit sur cette propriété 60 000 (ms).
Ensuite, on doit placer la procédure d'exécution des tâches sur l'événement Timer :
Private
Sub
Form_Timer
(
)
RunTasks '
exécution
des
tâches
sur
timer
End
Sub
Pour définir manuellement l'intervalle d'exécution de la procédure sur Timer on peut aussi saisir une valeur dans la zone de texte IntervalleMinuterie, représentant l'intervalle de temps exprimé en millisecondes entre 2 exécutions :
Private
Sub
IntervalleMinuterie_AfterUpdate
(
)
'
définit
l'intervalle
minuterie
après
mise
à
jour
de
la
zone
de
texte
'
si
0
arrêt
du
timer
Me.
TimerInterval
=
Me.
IntervalleMinuterie
'
copie
de
la
valeur
de
la
zone
de
texte
dans
la
propriété
TimerInterval
du
formulaire
End
Sub
IV. Procédures associées aux tâches▲
On décrit les procédures contenues dans le module M_Taches et permettant d'exécuter les différentes tâches.
IV-A. SaveFile▲
La procédure sauvegarde la totalité de la base active :
Public
Sub
SaveFile
(
)
'
Procédure
de
sauvegarde
du
fichier
Access
Dim
fso As
Object '
référence
à
fso
Dim
cheminFichier As
String
'
variable
pour
le
chemin
complet
du
fichier
sur
le
disque
Dim
nomFichier As
String
'
variable
pour
le
nom
du
fichier
Dim
nomDossier As
String
'
variable
pour
le
nom
du
dossier
de
sauvegarde
Set
fso =
CreateObject
(
"
Scripting.FileSystemObject
"
) '
Création
de
l'objet
fso
nomDossier =
CurrentProject.
Path
&
"
\Sauvegarde
"
'
dossier
de
sauvegarde
cheminFichier =
CurrentProject.
FullName
'
chemin
complet
du
fichier
Access
nomFichier =
CurrentProject.
Name
'
nom
du
fichier
Access
If
Dir
(
nomDossier, vbDirectory) =
"
"
Then
'
si
le
dossier
n'existe
pas
fso.
CreateFolder
nomDossier '
création
du
dossier
de
sauvegarde
End
If
'
copie
du
fichier
Access
dans
le
dossier
de
sauvegarde
fso.
CopyFile
cheminFichier, nomDossier &
"
\
"
&
nomFichier &
"
-
"
&
Format
(
Date
, "
yyyy-mm-dd
"
) &
"
.accdb
"
'
Affichage
du
message
de
succès
de
la
sauvegarde
MsgBox
"
Sauvegarde
du
fichier
réalisée
avec
succès
!
"
, vbExclamation
'
On
libère
la
variable
fso
Set
fso =
Nothing
End
Sub
IV-B. TransferSpreadSheet▲
La procédure transfère dans un fichier Excel les données des factures du mois précédent, affichées dans la requête R_FactureMoisPrecedent :
Public
Sub
TransferSpreadSheet
(
)
'
Procédure
de
transfert
des
données
de
la
requête
R_FactureMois
dans
un
fichier
Excel
Dim
fso As
Object '
référence
à
fso
Dim
cheminFichier As
String
'
variable
pour
le
chemin
complet
du
fichier
sur
le
disque
Dim
nomDossier As
String
'
variable
pour
le
nom
du
dossier
de
sauvegarde
Set
fso =
CreateObject
(
"
Scripting.FileSystemObject
"
)
nomDossier =
CurrentProject.
Path
&
"
\Factures
mensuelles
"
'
dossier
de
sauvegarde
cheminFichier =
nomDossier &
"
\Factures
"
&
Format
(
DateAdd
(
"
m
"
, -
1
, Date
), "
yyyy-mm
"
) &
"
.xlsx
"
'
chemin
complet
du
fichier
Access
If
Dir
(
nomDossier, vbDirectory) =
"
"
Then
'
si
le
dossier
n'existe
pas
fso.
CreateFolder
nomDossier '
création
du
dossier
de
sauvegarde
End
If
'
transfert
de
la
table
Access
vers
le
fichier
Excel
DoCmd.
TransferSpreadSheet
acExport, acSpreadsheetTypeExcel12Xml, "
R_FactureMoisPrecedent
"
, cheminFichier, True
'
Affichage
du
message
de
succès
du
transfert
MsgBox
"
Transfert
de
la
table
réalisé
avec
succès
!
"
, vbExclamation
'
On
libère
la
variable
fso
Set
fso =
Nothing
End
Sub
IV-C. Alert▲
La procédure affiche le message d'alerte passé en argument:
Public
Sub
Alert
(
msg As
String
)
'
on
affiche
le
message
d'alerte
passé
en
argument
MsgBox
msg, vbExclamation
, "
Alerte
!
"
End
Sub
V. Base de données à télécharger▲
La base jointeprogrammer-taches-recurrentes décrite dans le tutoriel est au format accdb.