Agenda hebdomadaire pour gérer les rendez-vous

Objectif : créer un agenda pour gérer vos rendez-vous dans Access.

Niveau requis : intermédiaire.

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

Article lu   fois.

L'auteur

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Introduction

Sur le forum Access de nombreuses questions sont relatives à la planification.

Notre objectif est de décrire un exemple simple de gestion de rendez-vous dans un formulaire de planning.

Pour ce faire, après avoir donné un aperçu du formulaire souhaité, on présentera dans l'ordre de leur création les différents objets de l'application :

  • tables nécessaires ;
  • requêtes ;
  • formulaires ;
  • module M_Planning.

Pour terminer, on décrira le fonctionnement du formulaire de paramétrage du planning.

II. Aperçu du formulaire de planning

Dans cet agenda hebdomadaire, nous aurons donc en en-têtes de lignes les heures, et en en-têtes de colonnes les jours de la semaine. La plage horaire journalière et la durée des tranches d'heure étant paramétrables :

Image non disponible
Planning hebdomadaire des rendez-vous

La saisie d'un rendez-vous se fait naturellement par un double-clic sur une case du planning correspondant à une heure et un jour précis :

Image non disponible
Formulaire de saisie des rendez-vous.

III. Tables nécessaires

Nous allons tout d'abord décrire les tables et les champs qui contiendront les données.

L'application réduite au maximum comporte trois tables.

III-A. Table T_RendezVous

Elle sert à enregistrer les rendez-vous des clients.

Nom du champ

Type de données

Description

IdRendezVous

Numéro auto

Identifiant du rendez-vous

IdClient

Entier long

Identifiant du client ayant le rendez-vous

DateHeureDebut

Date/Heure

Date et heure de début du rendez-vous

DateHeureFin

Date/Heure

Date et heure de fin du rendez-vous

Memo

Mémo

Commentaire sur le rendez-vous

On enregistre donc la date et l'heure de début du rendez-vous dans un seul champ, même chose pour la date et l'heure de fin du RDV.

III-B. Table T_Client

Elle contient les informations sur les clients.

Nom du champ

Type de données

Description

IdClient

Numéro Auto

Identifiant du client

NomClient

Texte

Nom du client

PrénomClient

Texte

Prénom du client

TelDomicile

Texte

Numéro de téléphone au domicile

TelPortable

Texte

Numéro de téléphone du portable

Email

Texte

E-mail du client

Note

Texte

Note sur le client

Dans notre cas, seuls les trois premiers champs de la table sont indispensables.

III-C. Table T_CouleurTypeRdv

Elle contient les couleurs selon le type de rendez-vous.

Nom du champ

Type de données

Description

IdCouleur

Numéro Auto

Identifiant de la couleur

DescriptionTypeRdv

Texte

Description du type de rendez-vous associé à la couleur

CodeCouleur

Entier long

Code numérique de la couleur

Le but étant de la mettre en relation avec la table T_RendezVous sur le champ IdCouleur.

III-D. Table T_Parametres

Elle contient les paramètres du planning.

Nom du champ

Type de données

Description

IdParametres

Numéro Auto

Identifiant

HauteurLabelsDetail

Long

Hauteur des labels et donc hauteur des lignes du planning en twips

HeureDebut

Texte

Heure à laquelle commencent les prises de rendez-vous dans la journée

TrancheHeure

Entier long

Durée des tranches d'heure sur le planning

NbreLignes

Entier long

Nombre total de lignes du planning

Valeurs de paramètres par défaut :

Nom du champ

Valeur

IdParametres

1

HauteurLabelsDetail

400

HeureDebut

08:00

TrancheHeure

15

NbreLignes

48

Ces paramètres enregistrés dans la table sont lus à l'ouverture du formulaire de planning. Ils vont permettre de dimensionner les tranches horaires correspondant aux rendez-vous au moment de rafraîchir l'agenda.

IV. Requêtes

Détaillons maintenant les requêtes.

IV-A. Requête R_Clients

Elle affiche la liste des noms complets des clients avec leur identifiant.

Code SQL de la requête
Sélectionnez
SELECT T_Client.IdClient, [NomClient] & " " & [PrenomClient] AS Client
FROM T_Client
ORDER BY [NomClient] & " " & [PrenomClient];

Le champ calculé Client concatène le nom et le prénom :

 
Sélectionnez
Client: [NomClient] & " " & [PrenomClient]

IV-B. Requête R_RendezVous

Elle relie les tables T_RendezVous et T_CouleurTypeRdv sur le champ IdCouleur.

Image non disponible
R_RendezVous en mode création

La procédure de rafraîchissement du planning se base sur cette requête pour parcourir les rendez-vous de la semaine choisie.

V. Formulaires

La deuxième étape consiste à créer les formulaires.

V-A. Sous-formulaire SF_Planning

Il contient dans son en-tête les étiquettes lblCol1..7 pour afficher les dates des jours de la semaine, et dans son détail, le tableau des labels lblTrancheHeure.._. permettant d'afficher les tranches horaires.

Image non disponible
Formulaire SF_Planning en mode création

Les étiquettes sont créées dynamiquement dans le formulaire à l'aide du formulaire F_Parametres disponible dans la base exemple.

V-A-1. Étiquettes « lblCol1..7 »

Ces contrôles situés dans l'en-tête du formulaire permettent d'afficher les dates des jours compris dans la période choisie.

V-A-2. Étiquettes « lblTrancheHeure.._. »

Ces contrôles placés dans le détail du formulaire permettent d'afficher les tranches horaires pour chaque rendez-vous compris dans la semaine choisie.

V-B. Formulaire principal F_Planning

Il contient :

  • la zone de texte txtDateDebut pour choisir la semaine ;
  • la liste déroulante cmbEmploye pour choisir un employé ;
  • les boutons de commande pour avancer ou reculer d'une semaine ;
  • le sous-formulaire SF_Planning pour afficher le planning.
Image non disponible
Formulaire F_Planning en mode création

V-B-1. Zone de texte txtDateDebut

Il permet à l'utilisateur de choisir un jour, et ainsi d'afficher le planning de la semaine correspondante.

V-B-1-a. Procédure sur Changement

Cette procédure s'exécute quand on choisit un jour, donc une semaine, dans le calendrier. Elle permet d'afficher le planning de la semaine choisie.

 
Sélectionnez
Private Sub txtDateDebut_Change()
    dateDebut = DebutSemaine(CDate(Me.txtDateDebut.Text)) ' copie dans la variable le 1er jour de la semaine choisie
    MajPlanning ' rafraîchit le planning
End Sub

V-B-2. Liste déroulante cmbEmploye

Elle permet à l'utilisateur de choisir un employé, et ainsi d'afficher son planning.

V-B-2-a. Procédure sur Après MAJ

Cette procédure s'exécute quand on choisit un employé sur le planning. Elle permet d'afficher le planning de l'employé choisi.

 
Sélectionnez
Private Sub cmbEmploye_AfterUpdate()
    MajPlanning ' on rafraîchit le planning
End Sub

V-B-3. Boutons de déplacement CmdPrecedent et CmdSuivant

Ces boutons de commande situés en haut du formulaire permettent d'avancer ou de reculer d'une semaine sur le planning.

V-B-3-a. Procédure sur clic du bouton CmdPrecedent

Ce code permet de reculer d'une semaine et de mettre à jour le planning.

 
Sélectionnez
Private Sub CmdPrecedent_Click()
    ' Sur l'évènement Clic du bouton de commande CmdPrecedent
    dateDebut = dateDebut - 7 ' Recule de 7 jours dans le temps
    MajPlanning ' Met à jour le planning
End Sub

V-B-3-b. Procédure sur clic du bouton CmdSuivant

Ce code permet d'avancer d'une semaine et de mettre à jour le planning.

 
Sélectionnez
Private Sub CmdSuivant_Click()
    ' Sur l'évènement Clic du bouton de commande CmdSuivant
    dateDebut = dateDebut + 7 ' Avance de 7 jours dans le temps
    MajPlanning ' Met à jour le planning
End Sub

V-B-4. Procédure sur ouverture du formulaire

Elle copie dans des variables les paramètres du planning (heure de début, tranche d'heure, nombre et hauteur de lignes). Puis, évalue la date du 1er jour de la semaine, et met à jour le planning :

Extrait du code n°1
Cacher/Afficher le codeSélectionnez

Enfin, pour consulter ou modifier un rendez-vous en double-cliquant sur une tranche horaire sur le planning, elle va affecter à la propriété OnDblClick des étiquettes lblTrancheHeure.. les expressions de la fonction permettant d'ouvrir le formulaire de saisie en mode édition ou ajout :

Extrait du code n°2
Cacher/Afficher le codeSélectionnez

Le code complet devient :

Procédure Form_Open
Cacher/Afficher le codeSélectionnez

V-C. Formulaire F_RendezVous

Il permet d'ajouter, de modifier ou de supprimer un rendez-vous. Ce formulaire s'ouvre sur l'évènement double-clic des labels du planning.

Image non disponible
Aperçu du formulaire

Détaillons quelques contrôles de ce formulaire.

V-C-1. Liste déroulante CmbClient

Cette liste permet de choisir un client pour le rendez-vous. Elle est liée au champ IdClient de la table source T_RendezVous, relié lui-même au champ IdClient de la table T_Client.

Elle affiche la liste des noms complets des clients classés dans l'ordre croissant. Pour ce faire, on affecte à sa propriété Contenu la requête R_Clients vue précédemment.

Cette liste comporte donc deux colonnes et sa colonne liée est la numéro 1 correspondant au champ IdClient :

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

V-C-2. Sous-formulaire SF_Client

Ce sous-formulaire, contenu dans le formulaire F_RendezVous, permet d'afficher les informations sur le client sélectionné dans la liste cmbClient. Sa source de données est la table T_Client, et il est synchronisé avec son formulaire principal sur le champ IdClient : les propriétés champs fils et champs pères du contrôle Sous-formulaire indiquent le champ IdClient.

Image non disponible
Aperçu en mode création des propriétés du contrôle sous-formulaire

V-C-3. Bouton de commande CmdValider

Il sert à valider la saisie.

V-C-3-a. Procédure sur clic

Une fois que les choix ont été effectués sur le formulaire, il faut les valider.

Si les horaires sélectionnés chevauchent d'autres RDV, si les contrôles cmbClient ou txtMemo sont vides alors l'utilisateur est invité à corriger sa saisie.

Sur l'évènement Clic du bouton de commande CmdValider, on a donc :

Procédure CmdValider_Click
Cacher/Afficher le codeSélectionnez

VI. Module M_Planning de l'application

Enfin, nous présentons le module de l'application.

VI-A. Description de quelques routines

Elles utilisent les fonctions Date et Heurefonctions Date et Heure :

Extrait du module
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. Procédure InitPlanning

La procédure InitPlanning efface le contenu des étiquettes, redimensionne les labels à leur taille d'origine et met à jour les en-têtes de colonnes avec les jours de la semaine choisie.

Procédure InitPlanning
Cacher/Afficher le codeSélectionnez

VI-C. Procédure MajPlanning

Déroulé de la procédure :

  • sélectionne les rendez-vous compris dans la période choisie ;
  • initialise le planning en effaçant les anciens rendez-vous ;
  • pour chaque rendez-vous sélectionné, redimensionne le label correspondant à la tranche d'heure du début du rendez-vous.
Procédure MajPlanning
Cacher/Afficher le codeSélectionnez

Elle est déclarée publique pour pouvoir l'appeler depuis n'importe quel formulaire.

VI-D. Fonction OuvrirFormRendezVous

Elle permet d'ouvrir le formulaire de saisie sur l'évènement double-clic des labels du planning :

Fonction OuvrirFormRendezVous
Cacher/Afficher le codeSélectionnez

La fonction est appelée sur l'évènement double-clic d'une étiquette dans le détail du planning. Par exemple, pour la première tranche d'heure identifiée par le label lblTrancheHeure1_1, on met :

lblTrancheHeure1_1.OnDblClick = "=OuvrirFormRendezVous(1, 1)"

Elle est déclarée publique pour pouvoir l'appeler depuis n'importe quel formulaire.

VII. Création dynamique du planning

Le formulaire F_Parametres, permet de créer dynamiquement les étiquettes du planning. Il suffit d'indiquer le nom du formulaire contenant le planning, le nombre de colonnes et de lignes de l'agenda, les noms génériques des étiquettes avec leurs dimensions et de valider le tout.

La procédure CreerPlanning supprime alors, en mode création, tous les contrôles du formulaire, et crée dynamiquement les labels du planning dans l'ordre inverse, du dernier au premier, pour permettre la superposition des étiquettes du haut sur celles du bas.

Image non disponible
Formulaire F_Parametres

VIII. Application à télécharger

La base exemplegestion-agenda.zipest au format Access accdb.

Pour faciliter son développement et assurer sa portabilité, l'application n'utilisera pas de composants externes à Access (ActiveX ou autres).

IX. Remerciements

Je tiens à remercier Jean Ballat de m'avoir guidé dans la réalisation de ce premier article et ram-0000 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.