I. Introduction▲
Sur le forum Access de nombreuses questions sont relatives à la planification.
Notre objectif est d'expliquer comment créer un formulaire d'agenda permettant de gérer les rendez-vous de clients.
Pour ce faire, après avoir donné un aperçu du formulaire souhaité, on décrira la structure des différents objets de l'application exemple, dans l'ordre de leur création :
- tables nécessaires ;
- requêtes ;
- formulaires ;
- module M_Planning.
Pour terminer, on détaillera 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 :
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 :
III. Tables nécessaires▲
Nous allons tout d'abord décrire la structure des tables permettant d'enregistrer les données.
L'application réduite au maximum comporte quatre 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 |
|
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 permet d'enregistrer 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.
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 :
Client
:
[NomClient] &
" "
&
[PrenomClient]
IV-B. Requête R_RendezVous▲
Elle relie les tables T_RendezVous et T_CouleurTypeRdv sur le champ IdCouleur.
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.
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.
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.
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.
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.
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.
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 :
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 :
Le code complet devient :
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.
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 :
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.
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 :
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 :
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.
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.
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 :
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.
VIII. Application à télécharger▲
La base exemplegestion-agenda.zip est 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.