Créer une gestion de calendrier

Créer un formulaire de calendrier pour gérer vos réunions, vos rendez-vous, etc.

Niveau requis : intermédiaire.

Commentez cet article : 27 commentaires Donner une note  l'article (5)

Article lu   fois.

L'auteur

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Introduction

L'objectif est de décrire la création d'un formulaire de calendrier pour gérer simplement vos rendez-vous et vos événements professionnels ou personnels.

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.

Après avoir donné un aperçu du formulaire de calendrier, nous détaillerons ensuite les différents objets dans l'ordre de leur création, afin de vous aider à reproduire l'exemple.

II. Rendu final du calendrier

Il affiche donc les rendez-vous sur les 42 jours (6 semaines).

Image non disponible
Calendrier mensuel

Un double-clic sur un rendez-vous situé dans une des listes ouvre le formulaire de saisie pour consulter ou modifier un enregistrement.

Image non disponible
Formulaire de saisie ouvert sur le calendrier

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.

Image non disponible
Requête R_HeuresJour en mode création

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 :

Image non disponible
Affichage de la liste des heures

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.

Image non disponible
Requête R_Personnes en mode création

Champ calculé pour afficher le nom complet des personnes :

Personne: [NomPersonne] & " " & [PrenomPersonne]

Exemple d'affichage dans le formulaire de saisie :

Image non disponible
Affichage de la liste des personnes

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.

Image non disponible
Aperçu du formulaire F_Calendrier

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.

 
Sélectionnez
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.

 
Sélectionnez
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.

 
Sélectionnez
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.

 
Sélectionnez
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.

 
Sélectionnez
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.

Image non disponible
Propriétés Format

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.

Image non disponible
Propriétés Données

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.

Procédure Form_Open
Sélectionnez
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.

Image non disponible
formulaire en mode création

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 :

Image non disponible
Aperçu en mode création des propriétés de la liste

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.

Image non disponible
Aperçu en mode création des propriétés de la liste

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 :

Procédure sur clic du bouton de commande CmdValider
Cacher/Afficher le codeSélectionnez

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 :

Extrait du module M_Calendrier
Cacher/Afficher le codeSélectionnez

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.

Fonction OuvrirFormSaisie
Cacher/Afficher le codeSélectionnez
Fonction OuvrirFormAjout
Cacher/Afficher le codeSélectionnez

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.
 
Cacher/Afficher le codeSélectionnez

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.

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Copyright © 2009 Denis Hulo. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés à Developpez LLC.