formateur informatique

Ouvrir un formulaire Access à une heure précise en VBA

Accueil  >  Bureautique  >  Access  >  Access VBA  >  Ouvrir un formulaire Access à une heure précise en VBA
Livres à télécharger


Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :


Inscription Newsletter    Abonner à Youtube    Vidéos astuces Instagram
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.

Liste des formulaires de la base de données Access

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,
Formulaire Access pour programmer heure d-ouverture

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.

Sélectionner tout le formulaire Access en conception
  • 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.

Régler la minuterie du formulaire Access
  • 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,
Programmer l-ouverture d-un formaulaire Access à une heure précise en VBA

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.

 
Sur Facebook
Sur Youtube
Les livres
Contact
Mentions légales



Abonnement à la chaîne Youtube
Partager la formation
Partager sur Facebook
Partager sur Twitter
Partager sur LinkedIn