Vous êtes sur la page 1sur 17

Calendrier pour grer les rendez-vous

par Denis Hulo


Date de publication : 2009-06-18 Dernire mise jour :

Calendrier des rendez-vous dans un formulaire Access. Niveau requis : intermdiaire. Commentez cet article :

Calendrier pour grer les rendez-vous par Denis Hulo

I - Introduction..............................................................................................................................................................3 II - Rendu final de l'application....................................................................................................................................3 III - Les tables ncessaires......................................................................................................................................... 4 III-A - La table "T_Horaire".....................................................................................................................................4 III-B - La table "T_RendezVous"............................................................................................................................ 4 III-C - La table "T_Patient"..................................................................................................................................... 5 IV - Les requtes......................................................................................................................................................... 5 IV-A - La requte "R_HoraireRDV1"...................................................................................................................... 5 IV-B - La requte "R_HoraireRDV2"...................................................................................................................... 6 IV-C - La requte "R_HoraireRDV3"......................................................................................................................7 V - Les formulaires...................................................................................................................................................... 7 V-A - Le formulaire "F_Calendrier"........................................................................................................................ 7 V-A-1 - La liste droulante "Mois".................................................................................................................... 8 V-A-1-a - La procdure vnementielle sur AfterUpdate............................................................................8 V-A-2 - La liste droulante "Anne"................................................................................................................. 8 V-A-2-a - La procdure vnementielle sur AfterUpdate............................................................................8 V-A-3 - Les boutons de dplacement "CmdPrecedent" et "CmdSuivant"........................................................ 9 V-A-3-a - La procdure vnementielle sur clic du bouton "CmdPrecedent"............................................. 9 V-A-3-b - La procdure vnementielle sur clic du bouton "CmdSuivant"..................................................9 V-A-4 - Les listes droulantes "Jour.."............................................................................................................10 V-A-4-a - La procdure "MajHorairesJour" sur l'vnement rception focus............................................10 V-A-4-b - La procdure "OuvrirFormRendezVous" sur l'vnement clic...................................................10 V-A-5 - Les zones de liste "Agenda.."............................................................................................................11 V-A-5-a - La procdure "OuvrirFormRendezVous2" sur l'vnement double-clic..................................... 11 V-B - Le formulaire "F_RendezVous"...................................................................................................................12 V-B-1 - La liste droulante "NP".....................................................................................................................13 V-B-2 - Le sous-formulaire "SF_Patient"........................................................................................................ 14 V-B-3 - Le bouton de commande "CmdValider".............................................................................................14 V-B-3-a - La procdure vnementielle sur clic........................................................................................14 VI - Le module "M_Calendrier" de l'application.........................................................................................................15 VI-A - Description de quelques routines.............................................................................................................. 15 VI-B - La procdure "MajCalendrier"................................................................................................................... 16 VII - Les applications tlcharger.......................................................................................................................... 17 VIII - Remerciements................................................................................................................................................. 17

-2Copyright 2009 Denis Hulo. Aucune reproduction, mme partielle, ne peut tre faite de ce site et 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 intrts. Cette page est dpose la SACD.
http://denishulo.developpez.com/tutoriels/access/calendrier/

Calendrier pour grer les rendez-vous par Denis Hulo

I - Introduction
Sur le forum Access de nombreuses questions sont relatives la planification. Voici donc un nouveau cas relativement simple de planification de rendez-vous mensuels des patients dans un cabinet mdical, facile adapter vos besoins : Nous considrons des horaires journaliers qui s'talent de 08:00 18:00 avec des crneaux horaires de 15 minutes. Ce calendrier se composera de 6x7 zones de listes (1 zone de liste par jour, sur 42 jours), chaque zone de liste contenant donc les RDV pour un jour donn. Au-dessus de chaque zone de liste, on disposera d'une liste droulante pour choisir l'horaire du rendez-vous ajouter. En plus du numro du patient, il nous faudra aussi sauvegarder dans une table la date du jour et l'horaire de dbut et de fin du rendez-vous. Ainsi le mieux sera de considrer l'horaire de dbut et l'horaire de fin du RDV comme des champs au format date gnrale (Date/Heure). En outre, pour simplifier la saisie des rendez-vous, il devra tre possible de choisir l'horaire et donc d'ajouter un RDV par un simple clic sur les listes droulantes situes au-dessus des zones de listes contenant la liste des RDV des jours. Enfin, pour faciliter son dveloppement et assurer sa portabilit, l'application n'utilisera pas de composants externes Access (ActiveX ou autre).

II - Rendu final de l'application


Voici le rendu du calendrier mensuel qui prsente les rendez-vous des patients sur 6x7 zones de listes, soit sur 42 jours (6 semaines). Un simple clic sur un crneau horaire situ dans une des listes droulantes ouvre le formulaire des rendez-vous pour la consultation ou la saisie.

Aperu du calendrier mensuel.

-3Copyright 2009 Denis Hulo. Aucune reproduction, mme partielle, ne peut tre faite de ce site et 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 intrts. Cette page est dpose la SACD.
http://denishulo.developpez.com/tutoriels/access/calendrier/

Calendrier pour grer les rendez-vous par Denis Hulo

Un double-clic sur un rendez-vous dans une des zones de listes ouvre le formulaire des rendez-vous pour la consultation ou la saisie.

Aperu du formulaire F_RendezVous ouvert sur le calendrier des rendez-vous.

III - Les tables ncessaires


Nous allons tout d'abord dfinir les tables et les champs qui contiendront les donnes : L'application rduite au maximum se contentera de 3 tables, la table T_Horaire, la table T_RendezVous et la table T_Patient.

III-A - La table "T_Horaire"


la table contient la liste des horaires journaliers. Nom du champ Horaire Type de donnes Description Horaire des rendez-vous de 08 heures 18 heures

Texte

III-B - La table "T_RendezVous"


Elle sert enregistrer les rendez-vous des patients.

-4Copyright 2009 Denis Hulo. Aucune reproduction, mme partielle, ne peut tre faite de ce site et 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 intrts. Cette page est dpose la SACD.
http://denishulo.developpez.com/tutoriels/access/calendrier/

Calendrier pour grer les rendez-vous par Denis Hulo

NR NP

Nom du champ

Type de donnes Numro auto Entier long Date/Heure Date/Heure Mmo

HoraireDebut HoraireFin Memo

Description Numro d'ordre du rendezvous. Numro d'ordre du patient ayant le RDV. Jour et horaire de dbut du RDV. Jour et horaire de fin du RDV. Note ou commentaire du mdecin sur le patient.

III-C - La table "T_Patient"


Elle contient les informations relatives aux patients. Nom du champ NP Nom Prnom DNaiss Rue CP Ville Tel Email Type de donnes Numro Auto Texte Texte Date Mmo Texte Texte Texte Texte Description Numro d'ordre du patient. Nom du patient. Prnom du patient. Date de naissance. Rue de la ville o rside le patient. Code postal de la ville o rside le patient. Ville o rside le patient. Tlphone du patient. Email.

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

IV - Les requtes
Pour pouvoir afficher la liste des horaires et des RDV dans les listes droulantes du calendrier, il nous faut crer une requte R_HoraireRDV3 : Pour cela on va d'abord crer les 2 sous-requtes R_HoraireRDV1 et R_HoraireRDV2. La 3me requte tant base sur la 2me requte, elle-mme base sur la 1re.

IV-A - La requte "R_HoraireRDV1"


Cette requte slectionne la liste des horaires de dbut et de fin, ainsi que les noms des patients pour les rendezvous du jour choisi sur le formulaire F_Calendrier : Elle a donc comme paramtre la zone de texte Jour du calendrier (Forms!F_Calendrier!Jour).

-5Copyright 2009 Denis Hulo. Aucune reproduction, mme partielle, ne peut tre faite de ce site et 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 intrts. Cette page est dpose la SACD.
http://denishulo.developpez.com/tutoriels/access/calendrier/

Calendrier pour grer les rendez-vous par Denis Hulo

Aperu de la requte R_HoraireRDV1 en mode cration. Par exemple, pour un jour donn, s'il y a un seul RDV du patient DUPONT de 10h 10h45, elle va afficher : HoraireDHoraireF RDV 10:00 10:45 DUPONT

IV-B - La requte "R_HoraireRDV2"


Cette requte, base sur la table T_Horaire et la requte prcdente, affiche tous les creneaux horaires, ainsi que les noms des patients pour les rendez-vous du jour choisi sur le formulaire F_Calendrier.

Aperu de la requte R_HoraireRDV2 en mode cration. Par exemple, pour un jour donn, s'il y a un seul RDV du patient DUPONT de 10h 10h45, elle va afficher : Horaire 10:00 10:15 10:30 RDV DUPONT DUPONT DUPONT

-6Copyright 2009 Denis Hulo. Aucune reproduction, mme partielle, ne peut tre faite de ce site et 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 intrts. Cette page est dpose la SACD.
http://denishulo.developpez.com/tutoriels/access/calendrier/

Calendrier pour grer les rendez-vous par Denis Hulo

IV-C - La requte "R_HoraireRDV3"


Cette requte, base sur la table T_Horaire et la requte prcdente, affiche tous les horaires du jour choisi, accompagns du nom du patient s'il y a un RDV : On effectue une jointure gauche entre la table T_Horaire et la requte R_HoraireRDV2 pour avoir tous les horaires du jour. Cette requte sera affecte la proprit Contenu des listes droulantes du calendrier.

Aperu de la requte R_HoraireRDV3 en mode cration. Par exemple, pour un seul RDV (dans la journe) du patient DUPONT de 10h 10h45, elle va afficher : Horaire 08:00 .. 10:00 10:15 10:30 .. 17:45 RDV .. DUPONT DUPONT DUPONT ..

V - Les formulaires
La troisime tape consiste crer les formulaires.

V-A - Le formulaire "F_Calendrier"


Il contient le tableau des zones de listes (6x7) et des listes droulantes (6x7), plus les boutons de commande pour avancer ou reculer d'un mois et 2 listes droulantes pour choisir le mois et l'anne. Ces contrles sont crs manuellement dans le formulaire en mode cration.

-7Copyright 2009 Denis Hulo. Aucune reproduction, mme partielle, ne peut tre faite de ce site et 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 intrts. Cette page est dpose la SACD.
http://denishulo.developpez.com/tutoriels/access/calendrier/

Calendrier pour grer les rendez-vous par Denis Hulo

Aperu du formulaire F_Calendrier en mode cration.

V-A-1 - La liste droulante "Mois"


Ce contrle est utilis pour permettre l'utilisateur de slectionner un mois, et ainsi pour afficher le calendrier du mois choisi.

V-A-1-a - La procdure vnementielle sur AfterUpdate


Cette procdure s'excute quand on choisit un mois dans la liste droulante : Elle permet d'afficher le calendrier du mois choisi.
Private Sub Mois_AfterUpdate() ' Premier jour du calendrier. DateDebut = DebutSemaine(DateSerial(Me.Anne, Me.Mois.ListIndex + 1, 1)) ' Mise jour du calendrier. MajCalendrier End Sub

V-A-2 - La liste droulante "Anne"


Ce contrle est utilis pour permettre l'utilisateur de slectionner une anne, et ainsi pour afficher le calendrier du mois et de l'anne choisis.

V-A-2-a - La procdure vnementielle sur AfterUpdate


Cette procdure s'excute quand on choisit une anne dans la liste droulante : Elle permet d'afficher le calendrier du mois et de l'anne choisis.

-8Copyright 2009 Denis Hulo. Aucune reproduction, mme partielle, ne peut tre faite de ce site et 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 intrts. Cette page est dpose la SACD.
http://denishulo.developpez.com/tutoriels/access/calendrier/

Calendrier pour grer les rendez-vous par Denis Hulo

Private Sub Anne_AfterUpdate() ' Premier jour du calendrier. DateDebut = DebutSemaine(DateSerial(Me.Anne, Me.Mois.ListIndex + 1, 1)) ' Mise jour du calendrier. MajCalendrier End Sub

V-A-3 - Les boutons de dplacement "CmdPrecedent" et "CmdSuivant"


Ces boutons de commande situs en haut droite permettent d'avancer ou de reculer d'un mois sur le calendrier.

V-A-3-a - La procdure vnementielle sur clic du bouton "CmdPrecedent"


Ce code permet de reculer d'un mois et de mettre jour le calendrier.
Private Sub CmdPrecedent_Click() ' Recule d'1 mois sur le calendrier. If (Me!Mois.ListIndex > 0) Then ' Si le mois est suprieur 1 (Janvier), Me.Mois = Me.Mois.ItemData(Me!Mois.ListIndex - 1) ' on affiche le mois prcdent. Else Me.Mois = Me.Mois.ItemData(11) ' Sinon on affiche le dernier mois Me.Anne = Me.Anne - 1 ' et l'anne prcdente. End If ' Premier jour du calendrier. DateDebut = DebutSemaine(DateSerial(Me.Anne, Me.Mois.ListIndex + 1, 1)) ' Mise jour du calendrier. MajCalendrier End Sub

V-A-3-b - La procdure vnementielle 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'1 mois sur le calendrier. If (Me!Mois.ListIndex < 11) Then ' Si le mois est infrieur 12 (Dcembre), Me.Mois = Me.Mois.ItemData(Me!Mois.ListIndex + 1) ' on affiche le mois suivant. Else Me.Mois = Me.Mois.ItemData(0) ' Sinon on affiche le premier mois Me.Anne = Me.Anne + 1 ' et l'anne suivante. End If ' Premier jour du calendrier. DateDebut = DebutSemaine(DateSerial(Me.Anne, Me.Mois.ListIndex + 1, 1)) ' Met jour le calendrier. MajCalendrier End Sub

-9Copyright 2009 Denis Hulo. Aucune reproduction, mme partielle, ne peut tre faite de ce site et 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 intrts. Cette page est dpose la SACD.
http://denishulo.developpez.com/tutoriels/access/calendrier/

Calendrier pour grer les rendez-vous par Denis Hulo

V-A-4 - Les listes droulantes "Jour.."


Ces 6*7 listes affichent les horaires et leur rendez-vous ventuel pour les 42 jours du calendrier. Elles permettent de choisir un horaire disponible pour la saisie d'un RDV.

V-A-4-a - La procdure "MajHorairesJour" sur l'vnement rception focus


Elle met jour la liste droulante qui reoit le focus et qui affiche tous les horaires et les rendez-vous du jour choisi :
Public Sub MajHorairesJour(i As Byte) Me!Jour = DateDebut + (i - 1) ' affecte la zone de texte Jour, ' le jour correspondant la liste droulante choisie. Me("Jour" & i).RowSource = "R_HoraireRDV3" ' affecte la requte source de la liste droulante. End Sub

Ensuite, sur l'vnement rception focus d'une zone de liste droulante, par exemple la premire (Jour1), on appelle la procdure MajHorairesJour(1) :
Private Sub Jour1_GotFocus() MajHorairesJour (1) End Sub

V-A-4-b - La procdure "OuvrirFormRendezVous" sur l'vnement clic


Pour ajouter un rendez-vous, on souhaite, aprs avoir choisi un horaire disponible dans une liste droulante, pouvoir ouvrir le formulaire F_RendezVous. Pour ce faire, on cre une procdure qui s'excute sur l'vnement clic de la liste :
Public Sub OuvrirFormRendezVous(i As Integer) ' Ouvre le formulaire F_RendezVous sur un clic dans une liste droulante du calendrier. ' Prend en arguments les indices de ligne et de colonne. Dim Dim Dim Dim DateC db As LeSql rsRdV As Date ' Jour et Horaire choisis. DAO.Database As String As DAO.Recordset

If (Me("Jour" & i).Value <> "") Then ' Si la liste droulante n'est pas vide. ' On value la date gnrale correspondant au jour et l'horaire choisis dans la liste. DateC = IndicesToHoraire(i, Me("Jour" & i).ListIndex + 1) Set db = CurrentDb ' Puis on slectionne dans un recordset le rendez-vous correspondant au crneau choisi par ' un simple clic. LeSql = "SELECT T_RendezVous.* " & _ "FROM T_RendezVous " & _ "WHERE T_RendezVous.HoraireDebut<=" & FormatDateUS(DateC) & _ " And T_RendezVous.HoraireFin>" & FormatDateUS(DateC) Set rsRdV = db.OpenRecordset(LeSql, dbOpenForwardOnly) ' s'il y a un RDV, alors copier dans la variable DateC l'horaire de dbut du RDV. If Not (rsRdV.EOF) Then DateC = rsRdV!HoraireDebut ' Ouvre le formulaire F_RendezVous sur l'horaire choisi. DoCmd.OpenForm "F_RendezVous", , , "HoraireDebut=" & FormatDateUS(DateC) - 10 Copyright 2009 Denis Hulo. Aucune reproduction, mme partielle, ne peut tre faite de ce site et 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 intrts. Cette page est dpose la SACD.
http://denishulo.developpez.com/tutoriels/access/calendrier/

Calendrier pour grer les rendez-vous par Denis Hulo

Forms!F_RendezVous!Indice = i Forms!F_RendezVous!DateRdV = DateC ' Met jour les horaires de dbut et de fin sur le formulaire. Forms!F_RendezVous!HoraireD = Format(DateC, "hh:nn") If Not (rsRdV.EOF) Then Forms!F_RendezVous!HoraireF = Format(rsRdV!HoraireFin, "hh:nn") Else Forms!F_RendezVous!HoraireF = Format(DateAdd("n", 30, DateC), "hh:nn") End If rsRdV.Close Set rsRdV = Nothing Set db = Nothing End If Me("Jour" & i).Value = Format(Me!Jour, "dd mmmm yyyy") End Sub

Ensuite, sur l'vnement clic d'une liste droulante, par exemple la premire (Jour1), on appelle la procdure OuvrirFormRendezVous(1) :
Private Sub Jour1_Click() OuvrirFormRendezVous (1) End Sub

V-A-5 - Les zones de liste "Agenda.."


Ces 6*7 listes affichent les rendez-vous pour chacun des 42 jours du calendrier. Elles permettent de choisir un RDV pour afficher son dtail.

V-A-5-a - La procdure "OuvrirFormRendezVous2" sur l'vnement double-clic


Pour consulter un rendez-vous, on souhaite, en double-cliquant sur un horaire dans une zone de liste, pouvoir ouvrir le formulaire F_RendezVous. Pour ce faire, on cre une procdure qui s'excute sur l'vnement double-clic de la liste :
Public Sub OuvrirFormRendezVous2(i As Integer) ' Ouvre le formulaire F_RendezVous sur un double-clic dans une zone de liste du calendrier. ' Prend en arguments les indices de ligne et de colonne. Dim Dim Dim Dim DateC As Date ' Jour et Horaire choisis. db As DAO.Database sql1 As String recRV As DAO.Recordset If (Me("Agenda" & i).Value <> "") Then Si la zone de liste n'est pas vide.

' On value la date gnrale correspondant au jour et l'horaire choisis dans la liste. DateC = HoraireDuJour(i, Me("Agenda" & i).Value) Set db = CurrentDb ' Puis on slectionne dans un recordset le rendez-vous correspondant au crneau choisi par ' un double-clic. LeSql = "SELECT T_RendezVous.* " & _ "FROM T_RendezVous " & _ - 11 Copyright 2009 Denis Hulo. Aucune reproduction, mme partielle, ne peut tre faite de ce site et 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 intrts. Cette page est dpose la SACD.
http://denishulo.developpez.com/tutoriels/access/calendrier/

Calendrier pour grer les rendez-vous par Denis Hulo "WHERE T_RendezVous.HoraireDebut<=" & FormatDateUS(DateC) & _ " And T_RendezVous.HoraireFin>" & FormatDateUS(DateC) Set rsRdV = db.OpenRecordset(LeSql, dbOpenForwardOnly) ' S'il y a un RDV, alors copier dans la variable DateC l'horaire de dbut du RDV. If Not (rsRdV.EOF) Then DateC = rsRdV!HoraireDebut ' Ouvre le formulaire F_RendezVous sur l'horaire choisi. DoCmd.OpenForm "F_RendezVous", , , "HoraireDebut=" & FormatDateUS(DateC) Forms!F_RendezVous!Indice = i Forms!F_RendezVous!DateRdV = DateC Forms!F_RendezVous!HoraireD = Format(DateC, "hh:nn") If Not (rsRdV.EOF) Then Forms!F_RendezVous!HoraireF = Format(rsRdV!HoraireFin, "hh:nn") Else Forms!F_RendezVous!HoraireF = Format(DateAdd("n", 30, DateC), "hh:nn") End If rsRdV.Close Set rsRdV = Nothing Set db = Nothing End If End Sub

Et aprs, sur l'vnement double-clic d'une zone de liste, par exemple la premire (Agenda1), on appelle la procdure OuvrirFormRendezVous2(1) :
Private Sub Agenda1_DblClick(Cancel As Integer) OuvrirFormRendezVous2 (1) End Sub

V-B - Le formulaire "F_RendezVous"


Il permet d'ajouter, de modifier ou de supprimer un rendez-vous. Ce formulaire s'ouvre sur l'vnement clic des zones de listes du calendrier (F_Calendrier). Il a pour source de donnes la table T_RendesVous.

Aperu du formulaire
- 12 Copyright 2009 Denis Hulo. Aucune reproduction, mme partielle, ne peut tre faite de ce site et 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 intrts. Cette page est dpose la SACD.
http://denishulo.developpez.com/tutoriels/access/calendrier/

Calendrier pour grer les rendez-vous par Denis Hulo

V-B-1 - La liste droulante "NP"


Cette liste permet de choisir un patient pour le rendez-vous. Elle est lie au champ NP de la table source T_RendezVous, reli lui-mme au champ NP de la table T_Patient. Elle affiche la liste des noms de patients et leur numro dans l'ordre croissant des noms. Pour ce faire, sa proprit Contenu contient le code SQL :
SELECT Nom, NP FROM T_Patient ORDER BY Nom;

Cette liste comporte donc 2 colonnes et sa colonne lie est la numro 2 (pour le champ NP).

Aperu en mode cration des proprits de la liste NP Si le nom du patient saisi n'est pas prsent dans la liste, on doit pouvoir proposer l'utilisateur de l'ajouter. Sur l'vnement absence dans liste on va donc mettre le code suivant inspir de celui de la faq :
Private Sub NP_NotInList(NewData As String, Response As Integer) ' Si le patient n'est pas dans la liste alors on propose de l'ajouter. If MsgBox("Voulez-vous ajouter " & NewData & " la liste des patients ?", _ vbYesNo + vbQuestion + vbDefaultButton2, "Ajout") = vbYes Then DoCmd.SetWarnings False DoCmd.RunSQL "INSERT INTO T_Patient ( Nom ) SELECT """ & NewData & """;" DoCmd.SetWarnings True Response = acDataErrAdded Else Response = acDataErrContinue NP.Undo End If End Sub

- 13 Copyright 2009 Denis Hulo. Aucune reproduction, mme partielle, ne peut tre faite de ce site et 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 intrts. Cette page est dpose la SACD.
http://denishulo.developpez.com/tutoriels/access/calendrier/

Calendrier pour grer les rendez-vous par Denis Hulo

V-B-2 - Le sous-formulaire "SF_Patient"


Ce sous-formulaire, contenu dans le formulaire F_RendezVous, permet d'afficher la signaltique du patient slectionn dans la liste NP. Sa source de donnes est la table T_Patient et il est synchronis avec son formulaire principal (F_RendezVous) sur le champ NP : Les proprits champs fils et champs pres du contrle sousformulaire sont gales NP.

Aperu en mode cration des proprits du contrle du sous-formulaire

V-B-3 - Le bouton de commande "CmdValider"


Il sert valider la saisie.

V-B-3-a - La procdure vnementielle sur clic


Une fois que les choix ont t effectus sur le formulaire, il faut les valider : Si les horaires slectionns chevauchent d'autres RDV, ou que les zones de texte NP ou Memo sont vides alors l'utilisateur est invit corriger sa saisie. Sur l'vnement clic du bouton de commande CmdValider, on a donc :
Private Sub CmdValider_Click() ' Valide les choix effectus sur le formulaire F_RendezVous. Dim db As DAO.Database Dim LeSql As String, HD As Date, HF As Date, DateC As Date Dim rsRdV As DAO.Recordset DateC = CDate(Me!DateRdV) ' Si les zones de texte NP ou Memo ne sont pas vides. If ((Me!NP <> "") And Not IsNull(Me!NP)) Or _ ((Me!Memo <> "") And Not IsNull(Me!Memo)) Then HD = CDate(Format(Me!DateRdV, "dd/mm/yy ") & Me!HoraireD) HF = CDate(Format(Me!DateRdV, "dd/mm/yy ") & Me!HoraireF) Set db = CurrentDb - 14 Copyright 2009 Denis Hulo. Aucune reproduction, mme partielle, ne peut tre faite de ce site et 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 intrts. Cette page est dpose la SACD.
http://denishulo.developpez.com/tutoriels/access/calendrier/

Calendrier pour grer les rendez-vous par Denis Hulo

' On recherche des RDV dont les horaires de dbut et de fin chevauchent les ' horaires choisis sur le formulaire. LeSql = "SELECT * " & _ "FROM T_RendezVous " & _ "WHERE (HoraireDebut<>" & FormatDateUS(DateC) & ") And HoraireDebut<" & FormatDateUS(HF) & _ " And HoraireFin>" & FormatDateUS(HD) Set rsRdV = db.OpenRecordset(LeSql, dbOpenForwardOnly) If (Format(HF, "hh:nn") <= "18:00") And (HD < HF) Then ' si aucun RDV n'a t trouv, la plage horaire est donc disponible et on peut ' enregistrer le RDV. If rsRdV.EOF Then Me!HoraireDebut = HD Me!HoraireFin = HF Me.Requery ' Actualise le formulaire. ' Actualise les listes correspondantes sur le calendrier. Forms!F_Calendrier("Agenda" & Me!Indice).Requery Forms!F_Calendrier("Jour" & Me!Indice).Requery DoCmd.Close Else MsgBox ("Saisie incorrecte !") End If Else MsgBox ("Saisie incorrecte !") End If rsRdV.Close Set rsRdV = Nothing Set db = Nothing Else MsgBox ("Saisie incorrecte !") End If End Sub

VI - Le module "M_Calendrier" de l'application


Enfin nous prsentons le module de l'application.

VI-A - Description de quelques routines


Quelques routines utilisant les fonctions Date et Heure :
Option Compare Database Option Explicit ' Dans la partie dclaration du module on dfinit la date du 1er jour du calendrier. Public DateDebut As Date ' Les fonctions du module. Public Function FormatDateUS(laDate As Date) As String - 15 Copyright 2009 Denis Hulo. Aucune reproduction, mme partielle, ne peut tre faite de ce site et 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 intrts. Cette page est dpose la SACD.
http://denishulo.developpez.com/tutoriels/access/calendrier/

Calendrier pour grer les rendez-vous par Denis Hulo ' Formate la date passe en argument en date US. FormatDateUS = Chr(35) & Format(laDate, "m-d-yy hh:nn:ss") & Chr(35) End Function ' Date au format US.

Private Function EstWeek(laDate As Date) EstWeek = ((WeekDay(laDate) > 1) And (WeekDay(laDate) < 7)) ' est un jour diffrent du week-end. End Function Function DebutSemaine(ByVal DateSemaine As Date) As Date ' Prend en argument un jour donn dans la semaine ' et renvoie la date du premier jour de cette semaine. Dim i As Integer i = WeekDay(DateSemaine, vbMonday) DebutSemaine = DateAdd("d", -i + 1, DateSemaine) End Function Function DebutCalendrier(ByVal DateJ As Date) As Date ' Prend en argument un jour donn dans le mois ' et renvoie la date du premier jour du calendrier du mois. DebutCalendrier = DebutSemaine(DateSerial(Year(DateJ), Month(DateJ), 1)) End Function Public Function IndicesToHoraire(ByVal J As Integer, ByVal l As Integer) As Date ' La fonction IndicesToHoraire prend en arguments les indices de ligne (horaire) et ' de colonne (jour) sur le Calendrier et renvoie l'horaire correspondant. Dim DateC As Date Dim h As Integer Dim m As Integer DateC = DateAdd("d", (J - 1), DateDebut) h = (8) ' prvoir 8 heures pour le premier horaire. m = (h * 60) + 15 * (l - 1) DateC = DateAdd("n", m, DateC) IndicesToHoraire = DateC End Function Public Function HoraireDuJour(J As Integer, h As String) As Date ' La fonction HoraireDuJour prend en argument l'indice du jour slectionn sur le Calendrier et ' l'horaire choisi dans la liste agenda et renvoie l'horaire gnral correspondant. Dim DateC As Date ' Donne la date et l'heure correspondant la ligne choisie sur la liste agenda. DateC = DateDebut + (J - 1) DateC = CDate(Format(DateC, "dd/mm/yyyy ") & h) HoraireDuJour = DateC End Function

VI-B - La procdure "MajCalendrier"


Pour mettre jour le calendrier aprs avoir choisi un mois et une anne sur les listes du mme nom, on doit crer une procdure d'affichage des rendez-vous dans les zones de liste du calendrier, en fonction de la date de dbut contenue dans ce contrle : La procdure doit slectionner, pour chaque zone de liste Agenda, les RDV compris entre la date courante (DateC) et la date courante + 1 jour (DateC+1) et mettre jour la liste en question. La date courante parcourt les jours du calendrier du 1er au 42me jour.

- 16 Copyright 2009 Denis Hulo. Aucune reproduction, mme partielle, ne peut tre faite de ce site et 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 intrts. Cette page est dpose la SACD.
http://denishulo.developpez.com/tutoriels/access/calendrier/

Calendrier pour grer les rendez-vous par Denis Hulo

Public Sub MajCalendrier() ' La procdure d'affichage des rendez-vous dans les zones de liste du calendrier ' en fonction de la date de dbut: ' La procdure slectionne, pour chaque liste agenda, les RDV compris entre la ' date courante (DateC) et la date courante + 1 jours (DateC+1), et met jour la liste. Dim Dim Dim Dim Dim i As Integer DateC As Date ' Variable pour parcourir les jours du calendrier. LeSql As String m As Integer ' Variable qui indique le mois. a As Integer ' Variable qui indique l'anne.

DateC = DateDebut Forms!F_Calendrier!Titre.Caption = "CALENDRIER DU MOIS DE " & UCase(Forms!F_Calendrier!Mois) & _ " " & Forms!F_Calendrier!Anne m = Forms!F_Calendrier!Mois.ListIndex + 1 ' Mois de la date courante. a = Forms!F_Calendrier!Anne.Value ' Anne de la date courante. For i = 1 To 42 ' 42 jours sur le Calendrier. ' Affiche les jours du Calendrier. Forms!F_Calendrier("Jour" & i).Value = Format(DateC, "dd mmmm yyyy") ' Prpare le sql destin aux listes agenda. LeSql = "SELECT Format(HoraireDebut,'hh:nn'),Format(HoraireFin,'hh:nn'), " & "IIf(Not IsNull(T_RendezVous.[NP]),T_Patient.Nom,'Autre') As "FROM T_RendezVous LEFT JOIN T_Patient ON T_RendezVous.NP = T_Patient.NP " & "WHERE T_RendezVous.HoraireDebut between " & FormatDateUS(DateC) & " And " & FormatDateUS(DateC + 1) & _ " ORDER BY T_RendezVous.HoraireDebut;" If (m = Month(DateC)) And (a = ' Si la date courante est dans Forms!F_Calendrier("Jour" & Forms!F_Calendrier("Agenda" Year(DateC)) Then le mois en cours. i).Enabled = True ' On active les listes. & i).Enabled = True _ RDV " & _ _ _

Else Forms!F_Calendrier("Jour" & i).Enabled = False ' Sinon on dsactive les listes. Forms!F_Calendrier("Agenda" & i).Enabled = False End If Forms!F_Calendrier("Agenda" & i).RowSource = LeSql ' Affecte le code sql la liste d'indice i. DateC = DateC + 1 ' Passe au jour suivant. Next i End Sub

VII - Les applications tlcharger


La base exemple n1 est au format Access 2000. La base exemple n2 est au format Access 2000, elle prend en compte les congs et jours fris. La base exemple n3 est au format Access 2000, elle n'utilise pas DAO (Data Access Objects) et prend aussi en compte les congs et jours fris.

VIII - Remerciements
Je tiens remercier Arkham46, jeannot45 et toute l'quipe Office pour m'avoir guid dans la ralisation de cette article, ainsi que jacques_jean pour sa relecture.

- 17 Copyright 2009 Denis Hulo. Aucune reproduction, mme partielle, ne peut tre faite de ce site et 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 intrts. Cette page est dpose la SACD.
http://denishulo.developpez.com/tutoriels/access/calendrier/

Vous aimerez peut-être aussi