Developpez.com - Access
X

Choisissez d'abord la catégorieensuite la rubrique :


Calendrier pour gérer les rendez-vous

Date de publication : 10 mai 2009

Par Denis Hulo
 

Calendrier des rendez-vous dans un formulaire Access.
Niveau requis : intermédiaire.

               Version PDF (Miroir)   Version hors-ligne (Miroir)

I. Introduction
II. Rendu final de l'application
III. Les tables nécessaires
III-A. La table "T_Horaire"
III-B. La table "T_RendezVous"
III-C. La table "T_Patient"
IV. Les requêtes
IV-A. La requête "R_HoraireRDV1"
IV-B. La requête "R_HoraireRDV2"
IV-C. La requête "R_HoraireRDV3"
V. Les formulaires
V-A. Le formulaire "F_Calendrier"
V-A-1. Le contrôle DateTimePicker "DateD"
V-A-1-a. Installation du contrôle
V-A-1-b. La procédure évènementielle sur changement
V-A-2. Les boutons de déplacement "CmdPrecedent" et "CmdSuivant"
V-A-2-a. La procédure évènementielle sur clic du bouton "CmdPrecedent"
V-A-2-b. La procédure évènementielle sur clic du bouton "CmdSuivant"
V-A-3. Les listes déroulantes "Jour.."
V-A-3-a. La procédure "MajHorairesJour" sur l'évènement réception focus
V-A-3-b. La procédure "OuvrirFormRendezVous" sur l'évènement clic
V-A-4. Les zones de liste "Agenda.."
V-A-4-a. La procédure "OuvrirFormRendezVous2" sur l'évènement double-clic
V-B. Le formulaire "F_RendezVous"
V-B-1. La liste déroulante "NP"
V-B-2. Le sous-formulaire "SF_Patient"
V-B-3. Le bouton de commande "CmdValider"
V-B-3-a. La procédure évènementielle sur clic
VI. Le module "M_Calendrier" de l'application
VI-A. Description de quelques routines
VI-B. La procédure "MajCalendrier"
VII. L'application à télécharger


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 médical, facile à adapter à vos besoins :

Nous considérons des horaires journaliers qui s'étalent de 08:00 à 18:00 avec des créneaux horaires de 15 minutes.

Ce calendrier se composera de 5x7 zones de listes (1 zone de liste par jour, sur 35 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 déroulante pour choisir l'horaire du rendez-vous à ajouter.

En plus du numéro du patient, il nous faudra aussi sauvegarder dans une table la date du jour et l'horaire de début et de fin du rendez-vous. Ainsi le mieux sera de considérer l'horaire de début et l'horaire de fin du RDV comme des champs au format date générale (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 déroulantes situées au-dessus des zones de listes contenant la liste des RDV des jours.

Enfin, pour faciliter son développement et assurer sa portabilité, à l'exception du contrôle DTPicker (normalement disponible dans Autres contrôles de la boîte à outils), 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 présente les rendez-vous des patients sur 5x7 zones de listes, soit sur 35 jours (5 semaines). Un simple clic sur un créneau horaire situé dans une des listes déroulantes ouvre le formulaire des rendez-vous pour la consultation ou la saisie.

Apercu du calendrier mensuel.

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.

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

III. Les tables nécessaires

Nous allons tout d'abord définir les tables et les champs qui contiendront les données :

L'application réduite 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 Type de données Description
Horaire Texte Horaire des rendez-vous de 08 heures à 18 heures

III-B. La table "T_RendezVous"

Elle sert à enregistrer les rendez-vous des patients.

Nom du champ Type de données Description
NR Numéro auto Numéro d'ordre du rendez-vous.
NP Entier long Numéro d'ordre du patient ayant le RDV.
HoraireDebut Date/Heure Jour et horaire de début du RDV.
HoraireFin Date/Heure Jour et horaire de fin du RDV.
Memo Mémo Note ou commentaire du médecin sur le patient.

III-C. La table "T_Patient"

Elle contient les informations relatives aux patients.

Nom du champ Type de données Description
NP Numéro Auto Numéro d'ordre du patient.
Nom Texte Nom du patient.
Prénom Texte Prénom du patient.
DNaiss Date Date de naissance.
Rue Mémo Rue de la ville où réside le patient.
CP Texte Code postal de la ville où réside le patient.
Ville Texte Ville où réside le patient.
Tel Texte Téléphone du patient.
Email Texte Email.

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


IV. Les requêtes

Pour pouvoir afficher la liste des horaires et des RDV dans les listes déroulantes du calendrier, il nous faut créer une requête R_HoraireRDV3: Pour celà on va d'abord créer les 2 sous-requêtes R_HoraireRDV1 et R_HoraireRDV2. La 3ème requête étant basée sur la 2ème requête, elle-même basée sur la 1ère.


IV-A. La requête "R_HoraireRDV1"

Cette requête sélectionne la liste des horaires de début et de fin, ainsi que les noms des patients pour les rendez-vous du jour choisi sur le formulaire F_Calendrier : Elle a donc comme paramètre la zone de texte Jour du calendrier (Forms!F_Calendrier!Jour).

Apercu de la requête R_HoraireRDV1 en mode création.

Par exemple, pour un jour donné, s'il y a un seul RDV du patient DUPONT de 10h à 10h45, elle va afficher:

HoraireD HoraireF RDV
10:00 10:45 DUPONT

IV-B. La requête "R_HoraireRDV2"

Cette requête, basée sur la table T_Horaire et la requête précédente, affiche tous les creneaux horaires, ainsi que les noms des patients pour les rendez-vous du jour choisi sur le formulaire F_Calendrier.

Apercu de la requête R_HoraireRDV2 en mode création.

Par exemple, pour un jour donné, s'il y a un seul RDV du patient DUPONT de 10h à 10h45, elle va afficher:

Horaire RDV
10:00 DUPONT
10:15 DUPONT
10:30 DUPONT

IV-C. La requête "R_HoraireRDV3"

Cette requête, basée sur la table T_Horaire et la requête précédente, affiche tous les horaires du jour choisi, accompagnés du nom du patient s'il y a un RDV: On effectue une jointure gauche entre la table T_Horaire et la R_HoraireRDV2 pour avoir tous les horaires du jour. Cette requête sera affectée à la propriété Contenu des listes déroulantes du calendrier.

Apercu de la requête R_HoraireRDV3 en mode création.

Par exemple, pour un seul RDV (dans la journée) du patient DUPONT de 10h à 10h45, elle va afficher:

Horaire RDV
08:00  
.. ..
10:00 DUPONT
10:15 DUPONT
10:30 DUPONT
.. ..
17:45  

V. Les formulaires

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


V-A. Le formulaire "F_Calendrier"

Il contient le tableau des zones de listes (5x7) et des listes déroulantes (5x7), plus les boutons de commande pour avancer ou reculer d'une semaine et le contrôle DTPicker pour choisir un jour.

Ces contrôles sont créés manuellement dans le formulaire en mode création.

Apercu du formulaire F_Calendrier en mode création.
 


V-A-1. Le contrôle DateTimePicker "DateD"

Ce contrôle est utilisé pour permettre à l'utilisateur de sélectionner une date, et pour afficher cette valeur au format spécifié. Les utilisateurs peuvent ainsi choisir une date dans un calendrier.


V-A-1-a. Installation du contrôle

Pour l'inscrire dans la base de registres, sous Access 2000 à 2003, choisir dans le menu Outils, l'item Contrôles ActiveX. Le contrôle doit normalement apparaître dans la liste des ActiveX :

Apercu de la liste des contrôles ActiveX

Si le contrôle n'est pas présent dans la liste, appuyer sur le bouton Inscrire dans la base de registres et chercher le fichier c:\Windows\system32\MSCOMCT2.OCX.

Une fois le contrôle enregistré dans la base de registres, il ne vous reste plus qu'à le sélectionner dans Autres contrôles :

Apercu de la liste des autres contrôles ActiveX

Pour les utilisateurs d'Access 2007, il faut utiliser une zone de texte à la place du contrôle DTPicker et ajouter la prise en charge du calendrier à ce contrôle.


V-A-1-b. La procédure évènementielle sur changement

Cette procédure s'exécute quand on choisit une date sur le contrôle DTPicker: Cette date se change aussitôt dans le 1er jour de la semaine choisie (lundi), puis le calendrier est aussitôt mis à jour en fonction de cette nouvelle date de début.

Private Sub DateD_Change()
DateDebut = DebutSemaine(DateD.Value) ' Choix du 1er jour de la semaine.
MajCalendrier ' Mise à jour du calendrier.
End Sub

V-A-2. Les boutons de déplacement "CmdPrecedent" et "CmdSuivant"

Ces boutons de commande situés en haut à droite permettent d'avancer ou de reculer d'une semaine sur le calendrier.


V-A-2-a. La procédure évènementielle sur clic du bouton "CmdPrecedent"

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

Private Sub CmdPrecedent_Click()
' Recule de 7 jours sur le calendrier.
DateDebut = DateDebut - 7
MajCalendrier ' Met à jour le calendrier
End Sub

V-A-2-b. La procédure évènementielle sur clic du bouton "CmdSuivant"

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

Private Sub CmdSuivant_Click()
' Avance de 7 jours sur le calendrier.
DateDebut = DateDebut + 7
MajCalendrier ' Met à jour le calendrier
End Sub

V-A-3. Les listes déroulantes "Jour.."

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


V-A-3-a. La procédure "MajHorairesJour" sur l'évènement réception focus

Elle met à jour la liste déroulante qui reçoit 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 déroulante choisie.

Me("Jour" & i).RowSource = "R_HoraireRDV3" ' affecte la requête source de la liste déroulante.
End Sub
Ensuite, sur l'évènement réception focus d'une zone de liste déroulante, par exemple la première (Jour1), on appelle la procédure MajHorairesJour(1) :

Private Sub Jour1_GotFocus()
MajHorairesJour (1)
End Sub

V-A-3-b. La procédure "OuvrirFormRendezVous" sur l'évènement clic

Pour ajouter un rendez-vous, on souhaite, après avoir choisi un horaire disponible dans une liste déroulante, pouvoir ouvrir le formulaire F_RendezVous. Pour ce faire, on crée une procédure qui s'exécute sur l'évènement clic de la liste:

Public Sub OuvrirFormRendezVous(i As Integer)
' Ouvre le formulaire F_RendezVous sur un clic dans une liste déroulante du calendrier.
' Prend en arguments les indices de ligne et de colonne.

Dim DateC As Date ' Jour et Horaire choisis.
Dim LeSql As String
Dim rsRdV As Recordset

   If (Me("Jour" & i).Value <> "") Then ' Si la liste déroulante n'est pas vide.
   
   ' On évalue la date générale correspondant au jour et à l'horaire choisis dans la liste.
   DateC = IndicesToHoraire(i, Me("Jour" & i).ListIndex + 1) 
     
   ' Puis on sélectionne dans un recordset le rendez-vous correspondant au créneau 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 = CurrentDb.OpenRecordset(LeSql, dbOpenForwardOnly)
                    
    ' s'il y a un RDV, alors copier dans la variable DateC l'horaire de début 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
    
    ' Met à jour les horaires de début 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
   
    End If
   
Me("Jour" & i).Value = Format(Me!Jour, "dd mmmm yyyy")
   
End Sub
Ensuite, sur l'évènement clic d'une liste déroulante, par exemple la première (Jour1), on appelle la procédure OuvrirFormRendezVous(1) :

Private Sub Jour1_Click()
OuvrirFormRendezVous (1)
End Sub

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

Ces 5*7 listes affichent les rendez-vous pour chacun des 35 jours du calendrier. Elles permettent de choisir un RDV pour afficher son détail.


V-A-4-a. La procédure "OuvrirFormRendezVous2" sur l'évènement 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 crée une procédure qui s'exécute sur l'évènement 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 DateC As Date ' Jour et Horaire choisis.
Dim sql1 As String
Dim recRV As Recordset
   
   If (Me("Agenda" & i).Value <> "") Then  Si la zone de liste n'est pas vide.
   
   ' On évalue la date générale correspondant au jour et à l'horaire choisis dans la liste.
   DateC = HoraireDuJour(i, Me("Agenda" & i).Value)
     
   ' Puis on sélectionne dans un recordset le rendez-vous correspondant au créneau choisi par
   ' un double-clic.
   
   LeSql = "SELECT T_RendezVous.* " & _
   "FROM T_RendezVous " & _
   "WHERE T_RendezVous.HoraireDebut<=" & FormatDateUS(DateC) & _ 
                                     " And T_RendezVous.HoraireFin>" & FormatDateUS(DateC)
   
    Set rsRdV = CurrentDb.OpenRecordset(LeSql, dbOpenForwardOnly)
                    
    ' S'il y a un RDV, alors copier dans la variable DateC l'horaire de début 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
   
    End If
   
   
End Sub
Et après, sur l'évènement double-clic d'une zone de liste, par exemple la première (Agenda1), on appelle la procédure 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'évènement clic des zones de listes du calendrier (F_Calendrier). Il a pour source de données la table T_RendesVous.

Aperçu du formulaire



V-B-1. La liste déroulante "NP"

Cette liste permet de choisir un patient pour le rendez-vous. Elle est liée au champ NP de la table source T_RendezVous relié lui-même au champ NP de la table T_Patient. Elle affiche la liste des noms de patients et leur numéro dans l'ordre croissant des noms. Pour ce faire, sa propriété Contenu contient le code SQL:

SELECT Nom, NP 
FROM T_Patient 
ORDER BY Nom;
Cette liste comporte donc 2 colonnes et sa colonne liée est la numéro 2 (pour le champ NP).

Aperçu en mode création des propriétés de la liste NP

Si le nom du patient saisi n'est pas présent dans la liste, on doit pouvoir proposer à l'utilisateur de l'ajouter. Sur l'évènement 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

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

Ce sous-formulaire, contenu dans le formulaire F_RendezVous, permet d'afficher la signalétique du patient sélectionné dans la liste NP. Sa source de données est la table T_Patient et il est synchronisé avec son formulaire principal (F_RendezVous) sur le champ NP: Les propriétés champs fils et champs pères du contrôle sous-formulaire sont égales à NP.

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

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

Il sert à valider la saisie.


V-B-3-a. La procédure évènementielle 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, ou que les zones de texte NP ou Memo sont vides alors l'utilisateur est invité à corriger sa saisie. Sur l'évènement clic du bouton de commande CmdValider, on a donc :

Private Sub CmdValider_Click()
' Valide les choix effectués sur le formulaire F_RendezVous.

Dim d As Integer
Dim LeSql As String, HD As Date, HF As Date, DateC As Date
Dim rsRdV As 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)
      
' On recherche des RDV dont les horaires de début 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 = CurrentDb.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
   
   Else
   MsgBox ("Saisie incorrecte !")
   End If

End Sub

VI. Le module "M_Calendrier" de l'application

Enfin nous présentons 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 déclaration du module on définit la date du 1er jour du calendrier.

Public DateDebut As Date

' Les fonctions du module.

Public Function FormatDateUS(laDate As Date) As String
' Formate la date passée en argument en date US.

FormatDateUS = Chr(35) & Format(laDate, "m-d-yy hh:nn:ss") & Chr(35)  ' Date au format US.
End Function

Private Function EstWeek(laDate As Date)
EstWeek = ((WeekDay(laDate) > 1) And (WeekDay(laDate) < 7)) ' est un jour différent du week-end.
End Function

Function DebutSemaine(ByVal DateSemaine As Date) As Date
' Prend en argument un jour dans la semaine choisie 
' 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

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) ' prévoir 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 sélectionné sur le Calendrier et
' l'horaire choisi dans la liste agenda et renvoie l'horaire général 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 procédure "MajCalendrier"

Pour mettre à jour le calendrier après avoir choisi une date sur le contrôle DTPicker, on doit créer une procédure d'affichage des rendez-vous dans les zones de liste du calendrier, en fonction de la date de début contenue dans ce contrôle : La procédure doit sélectionner, 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 ou 35ème jour.

Public Sub MajCalendrier()
Dim i As Integer
Dim DateC As Date ' Variable pour parcourir les jours du calendrier.
Dim LeSql As String
Dim m As Integer ' variable qui indique le mois.
Dim t(0 To 1) As Long ' Contient les codes des couleurs alternées sur le calendrier.

t(0) = 13303807 ' Codes des couleurs.
t(1) = -2147483624

DateC = DateDebut ' La variable date courante commence par prendre la valeur de la date de début.

' Affiche le titre du calendrier.
Forms!F_Calendrier!Titre.Caption = "Calendrier DU " & _ 
                                   UCase(Format(DateDebut, "dd mmmm yyyy")) & " AU " & _ 
                                   UCase(Format(DateDebut + 34, "dd mmmm yyyy"))
                                   
Forms!F_Calendrier!DateD.Value = DateDebut

m = Month(DateC) ' Mois de la date courante.

For i = 1 To 35 ' 35 jours sur le Calendrier

' Affiche les jours du Calendrier dans les listes déroulantes.
Forms!F_Calendrier("Jour" & i).Value = Format(DateC, "dd mmmm yyyy") 

' Prépare le SQL destiné aux listes agenda.
' La fonction FormatDateUS passe les dates au format US pour le SQL.
LeSql = "SELECT Format(HoraireDebut,'hh:nn'),Format(HoraireFin,'hh:nn'), _ 
         IIf(Not IsNull(T_RendezVous.[NP]),T_Patient.Nom,'Autre') As RDV " & _
"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) Then
      Forms!F_Calendrier("Agenda" & i).BackColor = t((m - 1) Mod 2) ' Affecte la couleur.
   Else
      m = Month(DateC)
      Forms!F_Calendrier("Agenda" & i).BackColor = t((m - 1) Mod 2)
   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. L'application à télécharger

La base exemple est au format Access 2000.



               Version PDF (Miroir)   Version hors-ligne (Miroir)

Valid XHTML 1.1!Valid CSS!

Copyright © 2009 Denis Hulo. Aucune reproduction, même 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 intérêts.

Responsables bénévoles de la rubrique Access : Pierre Fauconnier - Arkham46 -