|
|||||||||||||||||||||||||||||||||||||||||||||||
| Nom du champ | Type de données | Description |
Id |
NuméroAuto | Juste une clef primaire automatique. |
Heure Exécution |
Date/Heure | L'heure à laquelle notre programme doit
s'exécuter une fois par jour. Le fait de stocker cette heure dans une table et non dans le code VBA permet plus de souplesse lorsqu'il s'agira de modifier cette info. |
Dernière Exécution |
Date/Heure | Date et heure de la dernière fois où notre programme s'est exécuté. |
Passez en mode Saisie, et tapez une heure d'exécution (par exemple : 17:00).
Ceci crée un enregistrement numéroté 1, la date de dernière exécution
restant vide. A priori, notre table ne devrait contenir que cet unique
enregistrement.
Amélioration du timerIl faut maintenant que votre événement "
Sur minuterie" gère cette table. Voici un code amélioré :Private Sub Form_Timer()Dim varHeureExec As Variant Dim varDerniereExec As Variant' Lire l'heure d'exécutionvarHeureExec=DLookup("[Heure Exécution]","tbl Minuterie")If IsNull(varHeureExec)Then Exit Sub' Lire l'heure de dernière exécutionvarDerniereExec=DLookup("[Dernière Exécution]","tbl Minuterie")If IsNull(varDerniereExec)Then varDerniereExec=#1/1/1900 12:00:00 PM#' Si une exécution a eu lieu aujourd'hui, annuler le processusIf Format(varDerniereExec,"dd/mm/yyyy") =Format(Date,"dd/mm/yyyy")Then Exit Sub' Si l'heure actuelle est supérieure à celle de base, exécuter le processusIf Time>varHeureExec Then' Mettre à jour la date d'exécutionCurrentDb.Execute"UPDATE [tbl Minuterie] SET [Dernière exécution]=#"& _Format(Now,"mm/dd/yyyy hh:nn:ss") &"#"' Exécuter une action...MsgBox"Alarme !",vbInformation End If End Sub
Listing commenté
varHeureExec=DLookup("[Heure Exécution]","tbl Minuterie")
If IsNull(varHeureExec)Then Exit SubOn commence par lire le champ Heure Exécutionde la tabletbl Minuterie. La fonctionDLookup()permet ce type d'opération sans ouvrir directement la table. On suppose bien sûr quetbl Minuteriene contient qu'un enregistrement (sinon, seul le champHeure Exécutiondu 1er enregistrement serait pris en compte).Si ce champ est vide (
Null), l'heure d'exécution n'a pas été définie. On arrête immédiatement le processus.varDerniereExec=DLookup("[Dernière Exécution]","tbl Minuterie")
If IsNull(varDerniereExec)Then varDerniereExec=#1/1/1900 12:00:00 PM#On lit également le champ Dernière Exécution, toujours danstbl Minuterie.
Cette fois, si le champ est Null, c'est que la minuterie n'a jamais été exécutée. Dans ce cas, on part du principe que la dernière exécution - fictive - remonte au 1er janvier 1900 à midi. Ca facilitera les tests à venir.If Format(varDerniereExec,"dd/mm/yyyy") =Format(Date,"dd/mm/yyyy")Then Exit SubOn annule l'exécution de la minuterie si la date du jour (donnée par la fonction VBA Date) et la date de dernière exécution (varDerniereExec) sont égales. Sous-entendu : le programme a déjà été lancé une fois aujourd'hui...A noter que, pour faciliter les comparaisons de dates, on formate les 2 valeurs sous la forme
jj/mm/aaaa(en anglais puisqu'on est en VBA ;-)). En effet,varDerniereExeccontient non seulement la date, mais également l'heure, ce qui ne nous intéresse pas ici.If Time>varHeureExec Then
MsgBox"Alarme !",vbInformation
End If
On est maintenant sûr que l'exécution n'a pas été lancée aujourd'hui. Reste à vérifier si l'heure de lancement ( varHeureExec) est passée, en la comparant à l'heure actuelle (donnée par la fonction VBATime). On ne peut pas vraiment tester une égalité, puisque la minuterie s'exécute seulement toutes les 5 secondes.CurrentDb.Execute"UPDATE [tbl Minuterie] SET [Dernière exécution]=#"& _
Format(Now,"mm/dd/yyyy hh:nn:ss") &"#"Cette ligne met à jour la table tbl Minuterieen mémorisant la date actuelle (la fonction VBANowest une combinaison deDateet deTime, donnant à la fois la date et l'heure). Pour être traitée en SQL, il faut que la date soit au format#mm/jj/yyyy hh:nn:ss#(sachant que les "n" désignent les minutes, pour éviter la confusion avec les mois).Vous pouvez ouvrir votre formulaire... et attendre que l'heure de déclenchement soit écoulée !
Ouverture automatique du formulaire
Votre minuterie est désormais opérationnelle. La touche finale consiste à faire en sorte que le formulaire s'ouvre automatiquement avec la base de données (il sera d'ailleurs masqué pour "tourner" en arrière-plan).
- Dans la fenêtre , activez l'onglet .
- Cliquez sur le bouton .
- Dans la première cellule de la grille de macro, sélectionnez l'action
OuvrirFormulaire.- En bas de l'écran, un certain nombre d'arguments apparaissent. Réglez l'argument
Nom Formulairesurfrm Minuterie, et l'argumentMode FenêtresurMasquée.- Enregistrez la macro en la nommant précisément
AutoExec(les majuscules/minuscules sont sans importance).- Videz éventuellement la date de dernière exécution dans votre table
tbl Minuterie, fermez la base, rouvrez-la, et attendez...Rappel
Si vous ne souhaitez pas que la macroAutoExecne s'exécute au démarrage, ouvrez votre base de données tout en maintenant la touche [Majuscule] enfoncée.
| << 6. Maîtriser OpenForm et OpenReport | [ Sommaire ] | 8. Installer Access en réseau >> |
| Cette section vous intéresse ? Abonnez-vous ! |
![]() ![]() ![]() ![]() ![]() ![]() ![]() |
|
Notions de base Jargon Access :o) Syntaxe SQL Programmation ASP Scripting Runtime Le Grenier [FAQ Access] Les tutoriaux Self-Access Les Assistants Access Les livres sur Access ! |
|
Forums Access Abonnement gratuit Télécharger... |
|
Le saviez-vous ? Une base contient au maximum 32768 objets. De quoi voir venir ! A demain pour une nouvelle astuce ! |