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, ArgumentProcedureLa 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 IFL'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 SubPour 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 SubIV. 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 SubIV-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 SubIV-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 SubV. Base de données à télécharger▲
La base jointeprogrammer-taches-recurrentes décrite dans le tutoriel est au format accdb.







