Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :Action à une heure précise
Avec cette nouvelle astuce, nous allons apprendre à déclencher automatiquement l'
ouverture d'un formulaire Access, Ã une
heure souhaitée, par le
code VBA. Le salarié est en train de travailler sur une application de gestion de l'entreprise. Tôt ou tard dans la journée, il sait qu'il doit repasser par le formulaire de saisie des clients. Pour ne pas oublier, il programme son
ouverture automatique à une
heure précise.
Base de données Access à télécharger
Pour développer cette solution, nous suggérons d'appuyer l'étude sur un
formulaire Access offrant déjà quelques outils.
Comme l'indique le volet de navigation, cette base est composée de
cinq formulaires.
Les quatre premiers ne sont là que pour réaliser des tests d'ouvertures différents.
- Dans le volet de navigation, double cliquer sur le formulaire fParcourir,
C'est lui que nous devons paramétrer. Il est doté d'une
zone de texte pour définir l'
heure d'ouverture. Il offre une
liste déroulante pour choisir le
formulaire à ouvrir. Le
bouton à l'icône de l'horloge doit
programmer cette ouverture, selon ces deux indications. Le deuxième bouton permet simplement de fermer le formulaire.
La variable de déclenchement
Pour débuter le développement, nous avons besoin de déclarer une
variable publique. Son rôle est de savoir, à tout moment, si une
boucle de temps (un chronomètre) est en cours.
- A gauche du ruban Accueil, cliquer sur la flèche du bouton Affichage,
- Dans les propositions, choisir le mode Création,
Nous basculons ainsi sur la vue en conception du formulaire.
- Réaliser le raccourci clavier ALT + F11 pour basculer dans l'éditeur VBA Access,
- Dans l'explorateur de projets sur la gauche, double cliquer sur l'élément Form_fParcourir,
Ainsi, nous affichons la feuille de code associée au formulaire de programmation des ouvertures. Elle apparaît au centre de l'écran.
- Sous les deux déclaratives déjà présentes, ajouter la déclaration de variable suivante :
...
Option Compare Database
Option Explicit
Dim ouvert As Boolean
...
Il s'agit donc d'une
variable booléenne dont nous basculerons l'état selon le contexte, pour contrôler l'
horloge.
Régler la minuterie
Access sait naturellement gérer les
intervalles de temps par le biais de ses
formulaires. Et pour cela, il propose un événement dédié qui permet de déclencher une
minuterie. C'est grâce à elle que nous serons en mesure de
contrôler l'heure pour provoquer l'
ouverture d'un formulaire à l'instant précisément souhaité.
- Revenir sur le formulaire en conception (ALT + Tab),
Normalement, il doit déjà être sélectionné dans sa globalité. C'est ce que doit indiquer sa
feuille de propriétés, avec le nom
Formulaire. Si ce n'est pas le cas, vous devez cliquer sur le carré grisé, à l'intersection des règles en haut à gauche du formulaire. Il se transforme ainsi en un carré noir.
- Activer l'onglet Evénement de sa feuille de propriétés,
- Vers le bas de la liste, régler l'attribut Intervalle minuterie sur 10000,
Une minuterie scrute le temps toutes les
millisecondes. De cette manière, nous demandons d'agir toutes les
10 secondes. Nous ne sommes pas à 10 secondes près par rapport à l'heure précise qui sera invoquée. Et de cette manière, nous ne consommerons pas trop les ressources.
- Juste au-dessus, cliquer sur le petit bouton à trois points de l'événement Sur minuterie,
- Dans la boîte de dialogue, choisir le générateur de code et valider par Ok,
Ainsi, nous sommes de retour dans l'
éditeur de code VBA Access, entre les bornes de la
procédure événementielle Form_Timer. C'est elle qui va gérer les
incréments de temps. Nous développerons son code en dernier. Nous avons quelques réglages supplémentaires à effectuer avant cela.
Initialiser au chargement
Au lancement du formulaire, comme aucune action n'a encore été programmée, nous devons initialiser la
variable booléenne publique, pour indiquer qu'aucune minuterie n'est en cours.
- Revenir sur le formulaire en conception (ALT + Tab),
- S'il n'est plus sélectionné, cliquer sur le carré grisé en haut à gauche,
- Puis, revenir dans l'onglet Evénement de sa feuille de propriétés,
- Cliquer sur le petit bouton associé à son événement Sur chargement,
- Dans la boîte de dialogue, choisir le Générateur de code et valider par Ok,
Nous revenons une fois de plus dans l'
éditeur VBA Access, mais cette fois entre les bornes de la
procédure événementielle Form_Load. Son code se déclenchera au
lancement du formulaire.
- Dans cette procédure, ajouter les deux lignes VBA suivantes :
Private Sub Form_Load()
dh.Value = ""
ouvert = False
End Sub
Dans cet état (False), la
variable booléenne indique à l'application qu'aucune programmation n'est en cours. Nous verrons comment. Nous en profitons aussi pour réinitialiser la zone de saisie pour la date et l'heure d'ouverture. Elle se nomme en effet dh. Vous pouvez le constater en consultant la feuille de propriétés, après avoir sélectionné ce contrôle sur le formulaire.
Programmer l'ouverture
Une fois que l'utilisateur a défini une date et une heure et qu'il a choisi un formulaire à ouvrir, il doit cliquer sur le
bouton Programmer (Icône de l'horloge) pour lancer la minuterie. Son code doit entre autres basculer l'état de la variable booléenne publique afin d'indiquer au programme que les calculs d'écarts de temps peuvent reprendre.
- Revenir sur le formulaire en conception (ALT + Tab),
- Cliquer sur le bouton à l'icône de l'horloge pour le sélectionner,
- Dans l'onglet Evénement de sa feuille, cliquer sur le bouton de son événement Au clic,
- Dans la boîte de dialogue, choisir le Générateur de code et valider par Ok,
Nous revenons une fois de plus dans l'
éditeur VBA Access, cette fois entre les bornes de la
procédure événementielle programmer_Click. Son code se déclenchera au clic sur ce bouton.
- Dans les bornes de cette procédure, ajouter les instructions VBA suivantes :
Private Sub programmer_Click()
If dh.Value <> "" And choix.Value <> "" Then
ouvert = False
Me.TimerInterval = 10000
Else
MsgBox "La date et le formulaire doivent être désignés" & Chr(13) & Chr(10) & "Action non programmée", vbExclamation
End If
End Sub
Tout d'abord, nous nous assurons que la date (dh.Value) et que le formulaire à ouvrir (choix.Value), sont bien renseignés (<> ""). Si tel est le cas (Then), nous recalibrons les
incréments de la minuterie sur
10 secondes, grâce à la
propriété TimerInterval de l'
objet Me qui désigne le
formulaire en cours. Le cas échéant, nous en alertons l'utilisateur avec une boîte de dialogue pour qu'il fournisse les renseignements manquants avant de recommencer.
Calculer les écarts de temps
C'est maintenant que nous devons travailler dans la
minuterie puisque le booléen indique qu'une programmation en bonne et due forme a été initialisée. Pour cela, toutes les 10 secondes, nous devons vérifier si le
temps qu'il est et qui progresse inexorablement, a atteint ou dépassé l'
heure d'ouverture prévue. Pour
calculer ces écarts de temps régulièrement, nous devons employer la
fonction Access DateDiff que nous avions démontrée pour
calculer l'âge exact en VBA. Dès lors que la
différence est négative, nous devons indiquer au programme de
déclencher l'ouverture du formulaire souhaité par l'utilisateur.
- Dans les bornes de la procédure Form_Timer, créer l'instruction conditionnelle suivante :
...
If dh.Value <> "" And choix.Value <> "" And ouvert = False Then
End If
...
Pour accepter ce
traitement récursif toutes les 10 secondes, nous devons tout d'abord vérifier une
triple condition. L'heure doit être précisée (dh.Value <> ""), un formulaire à ouvrir doit être défini (choix.Value <> "") et le booléen doit être recalé à False (ouvert = False), indiquant qu'aucune boucle de temps n'est encore en cours.
Si tous les voyants sont au vert, dans cette
boucle de temps, donc
toutes les 10 secondes, nous devons vérifier si l'heure programmée n'a pas été dépassée. Pour cela, il suffit d'exercer un test sur la
différence entre l'
heure en cours et l'
heure choisie pour l'ouverture, grâce à la
fonction VBA Access DateDiff.
- Dans la première instruction conditionnelle, créer la nouvelle double condition suivante :
...
If IsDate(dh.Value) And DateDiff("s", Now, dh.Value) < 0 Then
End If
...
Tout d'abord et malgré la présence du contrôle calendrier sur le formulaire, nous nous assurons que l'information inscrite dans la
zone dh est bien au
format date. Pour cela, nous exploitons la
fonction logique IsDate. Ensuite, grâce à la
fonction DateDiff, nous calculons l'
écart en secondes ("s"), entre l'
heure actuelle (Now) et celle programmée. Si la différence est négative (<0), nous en concluons qu'il est temps d'ouvrir le formulaire demandé.
Ouvrir à l'heure prévue
Ces multiples tests étant passés avec succès, nous pouvons ordonner l'
ouverture du formulaire choisi. Mais ne l'oublions pas, dans l'enchaînement, la
boucle de temps doit être neutralisée, sans quoi la condition sur l'heure sera toujours vérifiée. En conséquence, le formulaire sera rouvert récursivement.
- Dans la seconde instruction conditionnelle imbriquée, ajouter les lignes VBA suivantes :
...
DoCmd.OpenForm choix.Value
Me.TimerInterval = 150000
ouvert = True
...
Classiquement, nous exploitons la
méthode OpenForm de l'
objet VBA Access DoCmd pour ordonner l'
ouverture du formulaire choisi par l'utilisateur et passé en paramètre (choix.Value). Ensuite, nous neutralisons la minuterie en réglant son incrément sur un intervalle très grand. Puis, en guise de double sécurité, nous basculons l'état du
booléen Ã
True. Cet indicateur assure qu'au moins l'une des conditions n'est pas remplie et n'autorise plus le Timer à agir.
Tester l'ouverture programmée
Le programme est terminé. Il est temps de tester son efficacité.
- Enregistrer les modifications (CTRL + S) et revenir sur le formulaire (ALT + Tab),
- L'exécuter par exemple avec la touche F5 du clavier,
- Cliquer dans la zone de l'heure pour faire apparaître le contrôle calendrier,
- Grâce à lui, choisir la date du jour,
- Compléter son information avec une heure en approche, par exemple 07/03/2023 15:40:00,
- Choisir un formulaire à ouvrir avec la liste déroulante sur la droite,
- Puis, cliquer sur le bouton à l'horloge pour programmer l'ouverture,
Comme vous pouvez l'apprécier, dès que l'échéance est atteinte ou légèrement dépassée, en raison des vérifications faites seulement toutes les 10 secondes, le formulaire demandé est automatiquement ouvert. De plus et comme nous avons pris soin de neutraliser la minuterie, ce formulaire est ouvert une bonne fois pour toutes.