formateur informatique

Alertes sur les dates anniversaires avec Access

Accueil  >  Bureautique  >  Access  >  Access Astuces  >  Alertes sur les dates anniversaires avec Access
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 :


Alertes sur les anniversaires

Pour calculer l'écart entre deux dates, Access offre une fonction semblable à la fonction volatile Datedif d'Excel. Il s'agit de la fonction DiffDate. Cette nouvelle astuce propose de l'exploiter sous une forme plutôt originale.

Alertes visuelles sur les dates d-échéance sur un formulaire Access

Sur l'exemple finalisé illustré par la capture, dès que la date anniversaire d'une personne approche, une alerte est automatiquement déclenchée. Un bandeau rouge surgit dans la partie inférieure du formulaire en indiquant le nombre de jours restants jusqu'à l'échéance. Dans le même temps, un paquet cadeau apparaît pour renforcer le signal de l'alerte.

Base de données et formulaire
Afin de concentrer l'étude sur la manipulation des dates, nous suggérons de récupérer une base de données offrant ce formulaire déjà structuré. Comme l'indique le volet de navigation sur la gauche de l'écran, cette petite base de données est constituée d'une table et d'un formulaire.
  • Dans ce volet de navigation, double cliquer sur le formulaire f_ecart pour l'exécuter,
Comme vous le constatez, un message d'erreur apparaît. Il indique que la source de ce formulaire est manquante. En effet, il s'agit de la requête à construire pour calculer les écarts entre les dates d'anniversaires et la date du jour en perpétuelle évolution.
  • Valider cette alerte en cliquant sur le bouton Ok,
  • Dans le volet de navigation, cliquer droit sur le formulaire f_ecart,
  • Dans le menu contextuel, choisir de l'ouvrir en mode création,
Nous basculons ainsi dans la vue en conception du formulaire. Et cette fois, comme il n'est pas en cours d'exécution, aucune alerte ne se déclenche.
  • Activer l'onglet Données de sa feuille de propriétés,
Requête Access utilisée comme source de données du formulaire

Comme l'indique sa propriété Source, ce formulaire doit être construit sur un objet nommé r_ecart. Il s'agit de la requête que nous devons bâtir. Trois champs calculés seront nécessaires pour livrer le décompte des jours séparant la date en cours à celle de la date anniversaire. Il s'agira de respecter scrupuleusement ces noms de champs attendus par le formulaire.
  • Fermer le formulaire en cliquant sur la croix de son onglet,
  • Dans le volet de navigation, double cliquer sur la table Commerciaux,
Table Access des dates anniversaires

Nous l'affichons ainsi en mode feuille de données.

Des personnes y sont recensées très simplement avec leur date de naissance en dernière colonne. C'est ce champ que nous allons fort logiquement exploiter dans la requête de manière à calculer l'âge en années, l'écart avec la date en cours en nombres de jours et enfin l'écart avec l'échéance de l'anniversaire.

Ecart entre deux dates - Fonction DiffDate
Nous allons donc découvrir la fonction Access DiffDate. Elle attend trois paramètres obligatoires :

DiffDate(intervalle; date1; date2)

Les deux derniers concernent les deux dates à partir desquelles il s'agit d'établir la différence. Cette différence se chiffre en fonction de l'intervalle ou unité de temps fourni en premier paramètre. Par exemple, avec le paramètre aaaa, nous calculons l'écart en années. Avec le paramètre m, nous le calculons en nombre de mois et en nombre de jours avec le paramètre j.

En revanche, cette fonction DiffDate est moins souple que son homologue Excel Datedif. Cette dernière permet en effet de combiner les paramètres pour l'unité de temps. Par exemple, avec la valeur md, elle permet de calculer directement le nombre de jours ayant dépassé ou restant à atteindre la date butoir, sans considérer l'année. Par exemple, la date anniversaire est le 16/12/1988 et nous sommes le 10/12/2020. La fonction DateDif renverra -4. Ce n'est pas possible avec la fonction Access DiffDate. Et c'est là que réside l'astuce. Par le biais de champs calculés intermédiaires, nous allons manipuler les années et les jours pour retomber sur nos pattes.
  • Fermer la table Commerciaux en cliquant sur la croix de son onglet,
  • En haut de la fenêtre Access, cliquer sur l'onglet Créer pour activer son ruban,
  • Dans la section Requêtes du ruban, cliquer sur le bouton Création de requête,
Une boîte de dialogue apparaît. La table Commerciaux est sélectionnée par défaut puisqu'elle est seule dans cette base de données.
  • Cliquer sur le bouton Ajouter puis sur le bouton Fermer,
Nous sommes dans l'éditeur de requête Access. La table est présente sous sa forme schématisée.
  • Sélectionner et glisser tous les champs vers la grille de requête,
Ajouter les champs de table dans la grille de requête Access

Nous proposons de commencer par calculer l'âge de chaque personne, dans la première colonne vide à droite du champ c_date.
  • Dans la zone champ de cette première colonne vide, construire la syntaxe suivante :
Annees:DiffDate("aaaa"; [c_date]; Maintenant())
  • Puis, la valider par la touche Entrée du clavier,
Le calcul est trivial. Tout d'abord, nous nommons notre champ calculé: Annees. Comme l'impose la syntaxe Access, il est suivi du symbole deux points (:) pour annoncer le calcul à suivre. Ensuite, grâce au paramètre aaaa, nous calculons l'écart en années entre la date d'anniversaire ([c_date]) et la date du jour (Maintenant()). Le champ de la date d'anniversaire doit nécessairement être mentionné entre crochets. Quant à la fonction Access Maintenant, elle renvoie la date actuelle à l'heure et à la minute près.
  • Dans la zone champ de la prochaine colonne vide, construire la syntaxe suivante :
Jours:DiffDate("j"; [c_date]; Maintenant())
  • Puis, la valider avec la touche Entrée du clavier,
Le principe est strictement identique au précédent. Mais cette fois, avec l'unité de temps j mentionnée en premier paramètre, nous calculons cet écart en nombre de jours.
  • Enregistrer la requête (CTRL + S) sous le nom r_ecart,
Ce nom doit être strictement respecté. Souvenez-vous, c'est lui qui fait la jonction avec le formulaire.
  • A gauche du ruban Créer, cliquer sur le bouton Affichage,
Nous exécutons ainsi la requête en mode feuille de données.

Calculer les écarts de dates en nombres d-années et de jours

Comme vous pouvez l'apprécier, nous obtenons bien les différences entre les dates en nombres d'années et de jours. Nous devons maintenant exploiter ces calculs pour déterminer le nombre de jours restants pour atteindre la date anniversaire de chacun.
  • A gauche du ruban Accueil, cliquer sur le bouton Affichage pour revenir en mode création,
  • Dans la zone Champ de la prochaine colonne vide, construire la syntaxe suivante :
Ecart:(365,25*[Annees])-[Jours]
  • Puis, la valider avec la touche Entrée du clavier,
Nous créons donc le nouveau champ calculé Ecart.

Tous ces noms de champs doivent être strictement respectés. Ils sont attendus par le formulaire. Nous multiplions l'âge en années par 365,25 pour tenir compte des années bissextiles. Nous lui retranchons l'âge en nombre de jours. Il doit en résulter le nombre de jours restants pour atteindre la date anniversaire lorsque la date est supérieure. Le cas échéant, c'est fort logiquement une valeur négative qui doit être retournée.
  • Enregistrer la requête puis cliquer sur le bouton Exécuter à gauche du ruban Créer,
Calculer le nombre de jours restants entre deux dates par requête Access

Comme vous pouvez le voir, les résultats sont parfaitement corrects à une petite virgule près. Si l'écart en années n'est pas un multiple de 4 pour les années bissextiles équilibrées, cette petite différence s'opère fort logiquement. Par exemple entre l'année 1984 et 2020, il y a précisément 10 années bissextiles. Ce décompte rond conduit à un écart rond sur le nombre de jours restants (4 ici). Vous l'aurez compris, vos résultats diffèrent forcément de ceux proposés par la capture. Il s'agit d'une vue figée à l'instant T. Les différences vont s'actualiser naturellement au fil de l'évolution des jours.
  • Fermer la requête en cliquant sur la croix de son onglet,
Formulaire Access pour calculer les écarts entre des dates et déclencher des alertes pour les anniversaires

Maintenant, si vous double cliquez sur le formulaire f_ecart, il s'ouvre sans souci. Tous les éléments attendus existent désormais. Effectivement, vous notez déjà la présence de l'âge mais ce n'est pas tout et nous allons le découvrir.

Date anniversaire en approche
Avant de gérer les alertes à déclencher, nous devons vérifier si cette différence en jours pour atteindre l'anniversaire est dans la fourchette d'une semaine (>=0 et <=7). C'est ce critère arbitraire qui devra être utilisé pour alerter l'utilisateur sur la date anniversaire en approche.
  • Afficher le formulaire en mode création,
Zone de texte masquée sur formulaire Access pour calculer écart entre deux dates en nombre de jours

Tout d'abord, vous notez la présence de la zone de texte Ecart, en bas à gauche du formulaire. Bien entendu, elle prélève son information à partir du champ calculé de la requête. Pourtant, nous ne l'avons pas remarquée sur le formulaire en exécution. En effet, ce contrôle est masqué. Sa vocation est simplement d'aider au déclenchement des alertes lorsque cette différence en jours se situe dans la fourchette.

Si vous cliquez sur le bandeau rouge en bas du formulaire, vous notez qu'il est décomposé en deux zones de texte.

Zones de texte du formulaire Access pour calculer le nombre de jours restants pour atteindre la date anniversaire

La première se nomme calcul. Vous pouvez le constater après l'avoir sélectionnée, en consultant sa feuille de propriétés. C'est elle qui doit accueillir la formule permettant de déclencher l'alerte. La seconde restitue l'information du champ c_date de la requête, lui-même prélevé depuis la table. C'est un format personnalisé (Feuille de propriétés, onglet Format) qui permet de l'afficher sous forme explicite, sans l'information sur l'année : jj\mmmm.

Dans cette zone calcul, nous souhaitons afficher un message indiquant le nombre de jours restants pour atteindre la date anniversaire. Mais souvenez-vous, ce message est jugé pertinent si et seulement s'il reste moins de sept jours. Une double condition doit donc être satisfaite. Et comme vous le savez, l'équivalent de la fonction Excel Si est la fonction Access VraiFaux. Sa construction est strictement identique.
  • Cliquer sur la zone de texte calcul pour la sélectionner,
  • Taper le symbole égal (=) pour initier la syntaxe de la formule,
  • Inscrire le nom de la fonction conditionnelle suivie d'une parenthèse, soit : VraiFaux(,
  • Mentionner le champ Ecart entre crochets, soit : [Ecart],
Ce n'est pas parce qu'il n'est pas visible que nous ne pouvons pas l'utiliser.
  • Puis, taper le premier critère suivant : >=0,
Il s'agit de la borne inférieure de la fourchette qui détermine si la date d'anniversaire est en approche.
  • Ajouter un espace, inscrire l'opérateur ET suivi d'un nouvel espace, soit : Et ,
En effet, avec Access, le recoupement de conditions se fait avec cet opérateur et non avec une fonction, du même nom d'ailleurs, dans Excel.
  • Mentionner de nouveau le champ Ecart entre crochets, soit : [Ecart],
  • Puis, taper le nouveau critère suivant : <=7,
L'écart en nombres de jours doit être supérieur ou égal à zéro et inférieur ou égal à sept, donc situé dans la fourchette de la semaine.
  • Taper un point-virgule (;) pour passer dans la branche Alors de la fonction VraiFaux,
  • Entre guillemets, inscrire le texte suivant : "Anniversaire dans ",
Il s'agit du début de l'annonce lorsque le double critère est honoré.
  • Ajouter un espace suivi du caractère de concaténation, suivi d'un espace, soit : & ,
  • Puis, inscrire la formulation suivante : Int([Ecart]),
En raison de la division et des années bissextiles plus ou moins complètes sur la période, nous obtenons un écart décimal. Et bien évidemment, nous souhaitons annoncer l'échéance en nombre de jours, donc de chiffres entiers. Et c'est la fonction Int qui permet de raboter la partie décimale pour ne conserver que la valeur entière.
  • Ajouter un espace suivi du caractère de concaténation, suivi d'un espace, soit : & ,
  • Puis, ajouter le texte suivant : " jours, le : ",
Attention, il y a un espace après le premier guillemet et un autre avant le guillemet fermant. Tout est une question de construction de phrase entre les parties statiques et les parties dynamiques.

Dans le cas où la fourchette est respectée, cette construction annonce la date anniversaire du champ colocataire c_date.
  • Taper un point-virgule (;) pour passer dans la branche Sinon de la fonction VraiFaux,
  • Puis, inscrire deux guillemets, soit : "",
De cette manière, nous conservons vide la zone de texte lorsque les deux conditions ne sont pas respectées, donc lorsque l'intervalle en jours n'est pas situé dans la semaine restante.
  • Fermer la parenthèse de la fonction VraiFaux,
  • Enfin, valider la syntaxe en enfonçant la touche Entrée du clavier,
  • Enregistrer les modifications (CTRL + S) puis exécuter le formulaire (F5),
Calculer le nombre de jours avant la date anniversaire sur un formulaire Access

En faisant défiler les enregistrements avec la barre de navigation en bas à gauche du formulaire, vous notez que la zone de texte reste tantôt muette et tantôt loquasse. Parfois, un décalage est à observer sur le nombre de jours restants pour atteindre l'échéance. Il y a deux raisons à cela. La première émane de la fonction Maintenant qui entame le jour en cours qu'il restitue à la minute près. La seconde tient au réajustement sur les années bissextiles qui doivent obtenir un compte rond sur l'intervalle. Des fonctions Access permettent de corriger le tir. Néanmoins, la fourchette est parfaitement respectée et l'alerte peut être donnée.

Alerte sur les écarts de dates
Ce sont désormais des actions de macros qui peuvent mettre l'utilisateur en éveil. Si la zone calcul est vide, le paquet cadeau et l'information sur le jour de l'anniversaire ne doivent pas être affichés. Dans le cas contraire, elles doivent l'être avec en sus, l'information sur le nombre de jours restants issu de la zone de texte calcul. Trois contrôles (c_date, calcul et cadeau pour l'image) doivent tantôt être masqués ou affichés. La condition est simple. Si la zone calcul est vide, tous doivent être cachés. Dans le cas contraire, tous doivent être affichés. Et ce sont des actions de macros qui tendent à y parvenir. Mais encore faut-il les déclencher sur le bon événement. Ce dernier concerne l'activation du formulaire. Celui-ci est activé à chaque changement d'enregistrement, notamment par le biais de la barre de navigation.
  • En conception, cliquer sur le carré grisé à l'intersection des règles horizontale et verticale,
Sélectionner le formulaire Access en mode création pour le paramétrer

De cette manière, le formulaire est explicitement désigné.
  • Dès lors, activer l'onglet Evénement de sa feuille de propriétés,
  • A droite de son événement Sur activation, cliquer sur le petit bouton qui se propose,
  • Dans la boîte de dialogue qui suit, choisir Générateur de macro et cliquer sur le bouton Ok,
De fait, nous basculons dans l'éditeur de macro Access.
  • Déployer la liste déroulante qui se suggère,
  • Dès lors, choisir la commande Si,
Il s'agit de l'instruction conditionnelle destinée à vérifier un critère. Selon le calcul que nous avons bâti en amont, elle doit vérifier si la zone calcul est remplie ou vide. Si elle est remplie, les contrôles calcul, c_date et cadeau doivent être visibles ou masqués dans le cas contraire.
  • Dans la zone Expression conditionnelle, taper l'expression suivante : [calcul]<>"",
Nous cherchons simplement à savoir, selon le précédent calcul, si la zone de texte est renseignée ou non. Lorsqu'elle l'est, nous savons que la date anniversaire est en approche. Dans ce cas, les trois contrôles susnommés doivent être affichés. Dans le cas contraire, ils doivent être masqués.
  • Déployer la liste déroulante du dessous,
  • Choisir l'action DéfinirPropriété,
  • Dans la zone Nom du contrôle, mentionner le champ calcul,
  • Dans la zone Propriété, cibler l'attribut Visible,
  • Dans la zone Valeur, saisir True,
True pour Vrai, donc nous conservons visible cette zone de texte. Nous devons faire de même pour les deux autres éléments.
  • Dans l'enchaînement, exploiter la même action de macro pour les champs c_date et cadeau,
Actions de macro Access pour rendre visibles des contrôles de formulaire selon condition
  • En dessous à droite de la dernière action, cliquer sur le lien Ajouter sinon,
Nous créons ainsi la branche opposée de l'instruction conditionnelle.
  • De la même façon, créer l'état masqué pour les trois mêmes contrôles,
Masquer des contrôles sur un formulaire Access par actions de macro

De cette manière, lorsque l'écart en nombre de jours n'est pas situé dans la fourchette, nous masquons l'image du paquet cadeau ainsi que les informations sur le nombre de jours restants et la date anniversaire.
  • Dans le ruban Création, cliquer sur le bouton Enregistrer puis sur le bouton Fermer,
  • De retour sur le formulaire, l'enregistrer à son tour (CTRL + S),
  • Exécuter ce dernier en enfonçant la touche F5 du clavier,
A l'heure de la conception, la première date anniversaire est en approche. De fait, le bandeau d'alerte surgit. Mais si vous passez sur l'enregistrement suivant, il disparaît. Selon la date à laquelle vous exécutez la solution, il convient d'ajuster les anniversaires dans la table source pour faire réagir les indicateurs dynamiques sur le formulaire.

Notez néanmoins que l'astuce a consisté à exploiter la fonction Access DiffDate pour calculer ces écarts de dates et à exploiter ses résultats par actions de macro pour déclencher des alertes sur le formulaire, comme le ferait n'importe quel gestionnaire professionnel sur un calendrier annuel.

Alertes approche dates anniversaire sur un formulaire Access

 
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