I. Introduction▲
Après avoir donné un aperçu du résultat souhaité, on décrira la structure des différents objets de l'application exemple, dans l'ordre de leur création.
L'article comportera donc cinq parties principales :
- rendu final du calendrier
- tables nécessaires
- requêtes
- formulaires
- module M_Calendrier
II. Rendu final du calendrier▲
Ce calendrier contient un tableau de 6x7 zones de listes (1 zone de liste par jour, sur 42 jours), chaque liste contenant les rendez-vous pour un jour donné avec au-dessus la date.
Il affiche donc les rendez-vous sur les 42 jours (6 semaines).
Un double-clic sur un rendez-vous situé dans une des listes ouvre le formulaire de saisie pour consulter ou modifier un enregistrement.
Détaillons ensuite les différents objets de la base exemple.
III. Tables nécessaires▲
Nous allons tout d'abord décrire les tables principales permettant d'enregistrer les données.
III-A. Table T_Heure▲
Elle contient la liste des heures de la journée espacées d'une certaine tranche horaire.
Nom du champ |
Type de données |
Description |
---|---|---|
Heure |
Texte |
Heure des rendez-vous, par exemple 08:00, 09:00,…, 18:00 |
Exemples de valeurs :
08:00 08:15 08:30 08:45 09:00 .. 17:30 17:45 18:00
III-B. Table T_Calendrier▲
Elle sert à enregistrer les rendez-vous ou les événements à une date et pour un horaire précis.
Nom du champ |
Type de données |
Description |
---|---|---|
IdCalendrier |
Numéro auto |
Identifiant du rendez-vous ou de l'événement |
DateCalendrier |
Date/heure |
Date du rendez-vous |
HeureDebut |
Texte |
Heure de début du rendez-vous |
HeureFin |
Texte |
Heure de fin du rendez-vous ou de l'événement |
Note |
Texte |
Note ou commentaire sur l'événement |
IdFiltre |
Entier long |
Identifiant du filtre appliqué au calendrier |
IdPersonne |
Entier long |
Identifiant de la personne concernée par le rendez-vous |
Si le champ IdPersonne est vide, il faut enregistrer une note pour la réunion ou l'événement.
III-C. Table T_Personne▲
Elle contient les informations relatives aux personnes.
Nom du champ |
Type de données |
Description |
---|---|---|
IdPersonne |
Numéro-Auto |
Identifiant de la personne |
NomPersonne |
Texte |
Nom de la personne |
PrenomPersonne |
Texte |
Prénom de la personne |
TelDomicile |
Texte |
Téléphone au domicile |
TelPortable |
Texte |
Téléphone mobile |
… |
… |
… |
Dans notre cas, seuls les trois premiers champs de la table sont indispensables.
III-D. Table T_FiltreCalendrier▲
Elle contient les filtres permettant de sélectionner les rendez-vous ou les événements selon un certain critère.
Nom du champ |
Type de données |
Description |
---|---|---|
IdFiltre |
Entier long |
Identifiant du filtre |
NomFiltre |
Texte |
Nom du filtre |
Exemples de valeurs si le filtre concerne des salles de réunion :
1, Réfectoire 2, Salle de conférences
IV. Requêtes▲
Voici le détail des requêtes.
IV-A. Requête R_HeuresJour▲
Pour pouvoir afficher la liste des heures avec leur rendez-vous sur le formulaire de saisie, il nous faut créer une requête.
Cette requête sélectionne la liste des heures avec leur rendez-vous pour le jour saisi dans le formulaire F_Saisie. Elle a comme paramètre la zone de texte zdtDateCalendrier du formulaire de saisie.
Champ calculé pour afficher le rendez-vous correspondant à l'heure et à la date affichées sur le formulaire de saisie :
Note: RechDom("Personne";"R_CalendrierPersonne";"DateCalendrier=#" & Format([Forms]![F_Saisie]![zdtDateCalendrier];"mm-jj-aaaa") & "# and (HeureDebut<='" & [Heure] & "') and (HeureFin>'" & [Heure] & "')")
La requête R_CalendrierPersonne permet simplement de relier les personnes aux rendez-vous sur le champ IdPersonne.
Exemple d'affichage dans le formulaire de saisie :
IV-B. Requête R_Personnes▲
Cette requête affiche la liste des noms et prénoms des personnes avec leur numéro d’enregistrement.
Champ calculé pour afficher le nom complet des personnes :
Personne: [NomPersonne] & " " & [PrenomPersonne]
Exemple d'affichage dans le formulaire de saisie :
V. Formulaires▲
La troisième étape consiste à créer les formulaires.
V-A. Formulaire F_Calendrier▲
Il contient dans son en-tête :
- une liste pour filtrer le calendrier sur le champ IdFiltre de la table T_Calendrier ;
- des boutons de commande pour avancer ou reculer d'un mois ;
- deux listes déroulantes pour choisir le mois et l'année.
Dans le détail du formulaire :
- un tableau de 6x7 zones de liste pour afficher les rendez-vous ;
- un tableau de 6x7 zones de texte pour afficher les dates.
Ces contrôles sont créés manuellement dans le formulaire en mode création.
V-A-1. Liste déroulante CmbFiltreCalendrier▲
Elle permet à l'utilisateur de filtrer le calendrier suivant un certain critère.
V-A-1-a. La procédure sur AfterUpdate▲
Cette procédure s'exécute quand on choisit un filtre dans la liste déroulante. Elle permet d'afficher le calendrier pour le filtre choisi.
Private
Sub
CmbFiltreCalendrier_AfterUpdate
(
)
' Mise à jour du calendrier.
MajCalendrier
End
Sub
V-A-2. Liste déroulante cmbMois▲
Ce contrôle est utilisé pour permettre à l'utilisateur de sélectionner un mois, et pour afficher le calendrier du mois choisi.
V-A-2-a. La procédure sur AfterUpdate▲
Cette procédure s'exécute quand on choisit un mois dans la liste déroulante. Elle permet d'afficher le calendrier du mois choisi.
Private
Sub
cmbMois_AfterUpdate
(
)
' Mise à jour du calendrier.
MajCalendrier
End
Sub
V-A-3. Liste déroulante cmbAnnee▲
Ce contrôle est utilisé pour permettre à l'utilisateur de sélectionner une année, et pour afficher le calendrier du mois et de l'année choisis.
V-A-3-a. La procédure sur AfterUpdate▲
Cette procédure s'exécute quand on choisit une année dans la liste déroulante. Elle permet d'afficher le calendrier du mois et de l'année choisis.
Private
Sub
cmbAnnee_AfterUpdate
(
)
' Mise à jour du calendrier.
MajCalendrier
End
Sub
V-A-4. Boutons de déplacement CmdPrecedent et CmdSuivant▲
Ces boutons de commande situés en haut à droite permettent d'avancer ou de reculer d'un mois sur le calendrier.
V-A-4-a. Procédure sur clic du bouton CmdPrecedent▲
Ce code permet de reculer d'un mois et d'actualiser le calendrier.
Private
Sub
CmdPrecedent_Click
(
)
' Recule d'un mois dans le temps.
If
(
Me.cmbMois.Value
>
1
) Then
' Si l'indice du mois est supérieur à 1 (janvier),
Me.cmbMois
=
Me.cmbMois.Value
-
1
' affiche le mois précédent.
Else
Me.cmbMois
=
12
' Sinon affiche le dernier mois
Me.cmbAnnee
=
Me.cmbAnnee
-
1
' et l'année précédente.
End
If
' Met à jour le calendrier
MajCalendrier
End
Sub
Si la liste cmbMois affiche le mois de janvier, on recule d'une année et on passe au mois de décembre, sinon, on passe simplement au mois précédent.
V-A-4-b. Procédure sur clic du bouton CmdSuivant▲
Ce code permet d'avancer d'un mois et de mettre à jour le calendrier.
Private
Sub
CmdSuivant_Click
(
)
' Avance d'un mois dans le temps.
If
(
Me!cmbMois.Value
<
12
) Then
' Si l'indice du mois est inférieur à 12 (décembre),
Me.cmbMois
=
Me.cmbMois.Value
+
1
' affiche le mois suivant.
Else
Me.cmbMois
=
1
' Sinon affiche le premier mois
Me.cmbAnnee
=
Me.cmbAnnee
+
1
' et l'année suivante
End
If
MajCalendrier ' actualise le calendrier
End
Sub
Si la liste cmbMois affiche le mois de décembre, on avance d'une année et on passe au mois de janvier, sinon, on passe simplement au mois suivant.
V-A-5. Zones de texte « zdtJourCalendrier.. »▲
Ces 6*7 zones de texte affichent les dates des 42 jours du calendrier. Un double-clic sur ces zones permet d'ouvrir le formulaire de saisie pour ajouter un événement à la date choisie.
V-A-6. Zones de liste « zdlJourCalendrier.. »▲
Ces 6*7 listes affichent les rendez-vous pour chacun des 42 jours du calendrier.
Elles comportent 4 colonnes, dont une masquée contenant l'identifiant du rendez-vous.
Au moment de rafraîchir le calendrier, pour éviter d’interroger 42 sources de données liées aux listes, il faut plutôt mettre leur propriété Origine Source à « liste de valeurs » et les alimenter à partir d'un seul jeu d'enregistrements basé sur la table T_Calendrier.
V-A-7. Procédure sur ouverture du formulaire▲
Pour consulter ou modifier un rendez-vous, on souhaite, en double-cliquant sur un RDV dans une zone de liste, pouvoir ouvrir le formulaire F_Saisie. On veut aussi avoir la possibilité d'ajouter un événement, en double-cliquant sur une zone de texte affichant une date.
Pour cela, on va, sur ouverture du formulaire, affecter à la propriété OnDblClick de ces contrôles les expressions des fonctions permettant d'ouvrir le formulaire de saisie en mode édition ou ajout.
Private
Sub
Form_Open
(
Cancel As
Integer
)
Dim
j As
Long
' variable d'indice pour parcourir les 42 jours du calendrier
Me.cmbFiltreCalendrier
=
Me.cmbFiltreCalendrier.ItemData
(
0
) ' sélection du 1er filtre pour le calendrier
Me.cmbMois
=
Me.cmbMois.ItemData
(
Month
(
Date
) -
1
) ' indice du mois courant
Me!cmbAnnee =
Year
(
Date
) ' indice de l'année courante
For
j =
1
To
42
' on parcourt les 42 zones de texte et de liste du calendrier
' on affecte les fonctions pour ouvrir le formulaire de saisie à l'événement sur double-clic des contrôles
Me
(
"zdtJourCalendrier"
&
j).OnDblClick
=
"=OuvrirFormAjout("
&
j &
")"
Me
(
"zdlJourCalendrier"
&
j).OnDblClick
=
"=OuvrirFormSaisie("
&
j &
")"
Next
j
MajCalendrier ' mise à jour du calendrier
End
Sub
V-B. Formulaire F_Saisie▲
Il permet d'ajouter, de modifier ou de supprimer un rendez-vous. Ce formulaire s'ouvre sur l'événement double-clic des zones de listes du calendrier. Il a pour source de données la table T_Calendrier.
V-B-1. Liste déroulante CmbIdPersonne▲
Cette liste permet de choisir une personne pour le rendez-vous. Elle est liée au champ IdPersonne de la table source T_Calendrier, lié lui-même au champ NumPersonne de la table T_Personne.
Elle affiche la liste des noms des personnes dans l'ordre croissant, et est basée sur la requête R_Personnes :
V-B-2. Liste déroulante CmbHeureDebut▲
Cette liste permet de choisir une heure de début pour le rendez-vous. Elle est liée au champ HeureDebut de la table source T_Calendrier.
Elle est alimentée par la requête R_HeuresJour vue précédemment, et affiche la liste des heures et des rendez-vous pour la date saisie dans le formulaire.
V-B-3. Sous-formulaire SF_Personne▲
Il est contenu dans le formulaire F_Saisie, et permet d'afficher les informations de la personne sélectionnée dans la liste CmbIdPersonne. Sa source de données est la table T_Personne et il est synchronisé avec son formulaire principal sur le champ IdPersonne.
V-B-4. Bouton de commande CmdValider▲
Il sert à valider la saisie.
V-B-4-a. Procédure sur clic▲
Une fois les choix effectués sur le formulaire, il faut les valider. Si aucune personne ni aucune note n'ont été saisies, ou si les heures sont restées vides, alors l'utilisateur est invité à corriger sa saisie :
VI. Module M_Calendrier▲
Enfin nous présentons le module de l'application.
VI-A. Description de quelques routines▲
Quelques routines utilisant les fonctions Date et Heurefonctions Date et Heure :
Le module contient aussi la fonction EstFerie permettant de savoir si une date est un jour férié ou pas. Elle est disponible dans la faqfonction estferie.
VI-B. Fonctions OuvrirFormSaisie et OuvrirFormAjout▲
Elles permettent d'ouvrir le formulaire de saisie en mode édition ou ajout, en double-cliquant sur un rendez-vous ou une date dans le calendrier.
Elles sont déclarées publiques pour pouvoir les appeler depuis n'importe quel formulaire.
VI-C. Procédure MajCalendrier▲
Pour mettre à jour le calendrier après avoir choisi un mois et une année sur les listes déroulantes, on doit créer une procédure d'affichage des rendez-vous correspondants dans les zones de liste du calendrier.
Déroulé de la procédure
- Elle parcourt les 42 jours du calendrier.
- Pour chaque jour, affiche sa date dans la zone de texte correspondante et ses rendez-vous dans la zone de liste.
- Pour chaque jour, active ou désactive également la zone de texte et la zone de liste.
- Pour chaque jour, colorie aussi la zone de texte et la zone de liste.
Mettre à jour ces 42 zones de liste peut nécessiter un certain temps, surtout si les données sont situées sur un serveur et si chaque liste est liée à une source de données. C'est pourquoi nous avons plutôt choisi d'ouvrir un seul jeu d'enregistrements basé sur la table T_Calendrier, puis de le parcourir pour alimenter les zones de liste avec les valeurs de chaque enregistrement.
VII. Application à télécharger▲
La base exemplegestion-calendrier est au format accdb.
Pour faciliter son développement et assurer sa portabilité, l'application n'utilisera pas de composants externes à Access (ActiveX ou autre).
VIII. Remerciements▲
Je tiens à remercier Arkham46, jeannot45 et toute l'équipe Office pour m'avoir guidé dans la réalisation de cet article, ainsi que jacques_jean pour sa relecture.