Intégrer un agenda dans votre application Access

Denis Hulo

Objectif : intégrer dans votre application Access un agenda généré à l'aide du module de classe clAgenda.

Niveau requis : avancé.

Commentez cet article : Commentez

- Titre : Intégrer un agenda dans votre application Access

- Auteur : Denis Hulo

- Parution : 7 octobre 2016

- Licence : Copyright ® 2016 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.

Sommaire

- I. Introduction

- II. Le module de classe clAgenda

- II-A. Les propriétés de paramétrage de l'apparence du planning

- II-A-1. Row

- II-A-2. Col

- II-A-3. Rows

- II-A-4. Cols

- II-A-5. RowsHeight

- II-A-6. ColsWidth

- II-A-7. BackColor

- II-A-8. GridColor

- II-A-9. FieldsRowsWidth

- II-A-10. FieldsRowsColor

- II-A-11. FieldsColsWidth

- II-A-12. FieldsColsColor

- II-B. Les propriétés de paramétrage temporel de l'agenda

- II-B-1. StartDate

- II-B-2. StartTime

- II-B-3. EndTime

- II-B-4. TimeLine

- II-B-5. CurrentDate

- II-B-6. CurrentTime

- II-C. Les propriétés pour relier l'agenda au sous-formulaire

- II-C-1. FormControl

- II-C-2. FormName

- II-C-3. SubFormName

- II-D. Les propriétés pour associer les fonctions aux événements sur clic et double-clic

- II-D-1. FunctionName1

- II-D-2. FunctionName2

- II-E. Les méthodes de création et d'initialisation de l'agenda

- II-E-1. Create

- II-E-2. Clear

- II-F. Les méthodes d'affichage du texte et des rendez-vous sur l'agenda

- II-F-1. ShowRdv

- II-F-2. ShowRectRdv

- II-F-3. WriteFieldRow

- II-F-4. WriteFieldCol

- II-G. Comment ajouter une méthode à la classe

- III. Le module moAgenda

- IV. Le sous-formulaire sfAgenda

- IV-A. Le nombre maximum de rendez-vous affichés dans le sous-formulaire d'agenda

- V. Le formulaire fAgenda

- V-A. Le bouton de commande cmTester

- V-A-1. La procédure événementielle sur clic

- V-B. Le bouton de commande cmEffacer

- V-B-1. La procédure événementielle sur clic

- V-C. Le contrôle sous-formulaire sfAgenda

- VI. Exemple d'intégration de l'agenda

- VI-A. Agenda pour la gestion de rendez-vous

- VII. La base de données à télécharger

- VIII. Remerciements

I - Introduction

On souhaite intégrer et paramétrer un agenda généré à l'aide du module de classe clAgenda. Ce type d'agenda peut s'afficher sur une période de 8, 10, 12 heures, etc., avec des tranches horaires de 10, 15, 30, 60 minutes, et peut comporter jusqu'à environ 50 lignes pour 7 colonnes. Il pourra donc servir d'agenda hebdomadaire et être facilement intégré dans votre application Access.

Pour ce faire, nous allons présenter les objets qui devront être ajoutés à votre base de données Access. Enfin, nous proposerons un exemple d'intégration de l'agenda.

II - Le module de classe clAgenda

Ce module permet de créer dynamiquement un quadrillage de contrôles étiquette avec des en-têtes de lignes et de colonnes, mais aussi des rectangles définissant les rendez-vous sur le planning (cf. FAQ).

Vous pouvez bien sûr ajouter de nouvelles propriétés ou de nouvelles méthodes, ou encore modifier les propriétés existantes, si vous souhaitez inclure de nouvelles fonctionnalités à vos plannings. Nous donnerons à ce sujet un exemple simple d'ajout d'une méthode à la fin de cette section.

II-A - Les propriétés de paramétrage de l'apparence du planning

Ces propriétés vont permettre de paramétrer la mise en forme du planning au moment de sa création.

II-A-1 - Row

Vous pouvez utiliser la propriété Row pour définir ou connaître la ligne sélectionnée sur l'agenda. Entier long en lecture/écriture.

Exemple

Le code suivant définit la ligne 3 comme ligne sélectionnée sur le planning.

obAgenda.Row=3

II-A-2 - Col

Vous pouvez utiliser la propriété Col pour définir ou connaître la colonne sélectionnée sur le planning. Entier long en lecture/écriture.

Exemple

Le code suivant définit la colonne 4 comme colonne sélectionnée sur l'agenda.

obAgenda.Col=4

Illustration

Sélection de la ligne 3 et de la colonne 4 sur l'agenda.

Aperçu de la sélection sur l'agenda

II-A-3 - Rows

Vous pouvez utiliser la propriété Rows pour définir ou connaître le nombre de lignes du planning. Entier long en lecture/écriture.

Exemple

Le code suivant définit 30 lignes pour le planning.

obAgenda.Rows=30

II-A-4 - Cols

Vous pouvez utiliser la propriété Cols pour définir ou connaître le nombre de colonnes de l'agenda. Entier long en lecture/écriture.

Exemple

Le code suivant définit 7 colonnes pour le planning.

obAgenda.Cols=7

II-A-5 - RowsHeight

Vous pouvez utiliser la propriété RowsHeight pour ajuster la hauteur des lignes du planning à des dimensions spécifiques. Entier long en lecture/écriture.

Exemple

Le code suivant ajuste la hauteur des lignes de l'agenda à 450 twips.

obAgenda.RowsHeight=450

II-A-6 - ColsWidth

Vous pouvez utiliser la propriété ColsWidth pour ajuster la largeur des colonnes du planning à des dimensions spécifiques. Entier long en lecture/écriture.

Exemple

Le code suivant ajuste la largeur des colonnes du planning à 125 twips.

obAgenda.ColsWidth=125

II-A-7 - BackColor

Utilisez la propriété BackColor pour spécifier la couleur de fond du planning. Entier long en lecture/écriture.

Exemple

Le code suivant colorie en blanc le fond de l'agenda.

obAgenda.BackColor=vbWhite

Aperçu de l'agenda avec fond blanc

Le code suivant colorie en jaune clair le fond de l'agenda.

obAgenda.BackColor = RGB(255, 249, 139)

Aperçu de l'agenda avec fond jaune clair

II-A-8 - GridColor

Vous pouvez utiliser la propriété GridColor pour spécifier la couleur du quadrillage du planning. Entier long en lecture/écriture.

Exemple

Le code suivant colorie en noir la grille du planning.

obAgenda.GridColor=vbBlack

Aperçu de l'agenda avec une grille en noir

Le code suivant colorie en gris la grille du planning.

obAgenda.GridColor=RGB(89, 89, 89)

Aperçu de l'agenda avec une grille en gris

II-A-9 - FieldsRowsWidth

Utilisez la propriété FieldsRowsWidth pour ajuster la largeur des en-têtes de lignes à des dimensions spécifiques. Entier long en lecture/écriture.

Exemple

Le code suivant ajuste la largeur des en-têtes de lignes à gauche du planning à 100.

obAgenda.FieldsRowsWidth=100

II-A-10 - FieldsRowsColor

Vous pouvez utiliser la propriété FieldsRowsColor pour définir la couleur de fond pour les en-têtes de lignes situés à gauche du planning. Entier long en lecture/écriture.

Exemple

Le code suivant colorie en gris la colonne à gauche de l'agenda.

obAgenda.FieldsRowsColor=vbGrey

II-A-11 - FieldsColsWidth

Utilisez la propriété FieldsColsWidth pour ajuster la largeur des en-têtes de colonnes à des dimensions spécifiques. Entier long en lecture/écriture.

Exemple

Le code suivant ajuste la largeur des en-têtes de colonnes en haut du planning à 100.

obAgenda.FieldsColsWidth=100

II-A-12 - FieldsColsColor

Vous pouvez utiliser la propriété FieldsColsColor pour définir la couleur de fond pour les en-têtes de colonnes situés en haut du planning. Entier long en lecture/écriture.

Exemple

Le code suivant colorie en gris la ligne en haut (en-têtes de colonnes) de l'agenda.

obAgenda.FieldsColsColor=vbGrey

II-B - Les propriétés de paramétrage temporel de l'agenda

Ces propriétés vont permettre de définir la période et la tranche horaire sur le planning.

II-B-1 - StartDate

Vous pouvez utiliser la propriété StartDate pour définir ou connaître la date du 1er jour sur l'agenda. Date en lecture/écriture.

Exemple

Le code suivant définit la date de début au 17 octobre 2016 sur le planning.

obAgenda.StartDate=#10/17/2016#

II-B-2 - StartTime

Vous pouvez utiliser la propriété StartTime pour définir ou connaître l'heure du début de la journée sur l'agenda. Date en lecture/écriture.

Exemple

Le code suivant définit l'heure de début de la journée à 8 heures.

obAgenda.StartTime=#08:00 AM#

II-B-3 - EndTime

Vous pouvez utiliser la propriété EndTime pour définir ou connaître l'heure de fin de la journée sur l'agenda. Date en lecture/écriture.

Exemple

Le code suivant définit l'heure de fin de la journée à 20 heures.

obAgenda.EndTime=#08:00 PM#

II-B-4 - TimeLine

Vous pouvez utiliser la propriété TimeLine pour définir ou connaître la durée en minutes de la tranche horaire sur l'agenda. Entier long en lecture/écriture.

Exemple

Le code suivant définit la durée de la tranche horaire à 30 minutes.

obAgenda.TimeLine=30

II-B-5 - CurrentDate

Vous pouvez utiliser la propriété CurrentDate pour définir ou connaître la date choisie sur l'agenda. Date en lecture/écriture.

Exemple

Le code suivant définit la date courante au 17 octobre 2016 sur le planning.

obAgenda.CurrentDate=#10/17/2016#

II-B-6 - CurrentTime

Vous pouvez utiliser la propriété CurrentTime pour définir ou connaître l'heure cliquée sur l'agenda. Date en lecture/écriture.

Exemple

Le code suivant définit l'heure courante à 15 heures.

obAgenda.CurrentTime=#03:00 PM#

II-C - Les propriétés pour relier l'agenda au sous-formulaire

Elles permettent de définir le contrôle sur lequel on va créer et paramétrer l'agenda.

II-C-1 - FormControl

Utilisez la propriété FormControl pour spécifier le contrôle formulaire sur lequel on va créer le planning.

Exemple

Le code suivant spécifie le contrôle formulaire sfAgenda du formulaire courant.

obAgenda.FormControl = Me.sfAgenda

II-C-2 - FormName

Utilisez la propriété FormName pour définir le nom du formulaire contenant le sous-formulaire de l'agenda.

Exemple

Le code suivant spécifie le nom du formulaire fAgenda courant.

obAgenda.FormName = "fAgenda"

II-C-3 - SubFormName

Utilisez la propriété SubFormName pour spécifier le nom du sous-formulaire de planning.

Exemple

Le code suivant spécifie le nom du sous-formulaire sfAgenda.

obAgenda.SubFormName = "sfAgenda"

II-D - Les propriétés pour associer les fonctions aux événements sur clic et double-clic

Elles permettent de définir les fonctions qui vont s'exécuter sur les événements clic et double-clic des étiquettes.

II-D-1 - FunctionName1

Utilisez la propriété FunctionName1 pour spécifier le nom de la fonction à exécuter sur l'événement clic du planning.

Exemple

Le code suivant spécifie le nom de la fonction SelectCreneau sur clic.

obAgenda.FunctionName1 = "SelectCreneau"

II-D-2 - FunctionName2

Utilisez la propriété FunctionName2 pour spécifier le nom de la fonction à exécuter sur l'événement double-clic du planning.

Exemple

Le code suivant spécifie le nom de la fonction OuvrirFormSaisie sur double-clic.

obAgenda.FunctionName2 = "OuvrirFormSaisie"

II-E - Les méthodes de création et d'initialisation de l'agenda

II-E-1 - Create

Cette méthode crée l'agenda d'origine (quadrillage vide) avec les en-têtes de lignes et de colonnes.

Exécution du code

obAgenda.Create

II-E-2 - Clear

Cette méthode efface les RV de l'agenda pour revenir au quadrillage vide avec les en-têtes de lignes et de colonnes.

Exécution du code

obAgenda.Clear

II-F - Les méthodes d'affichage du texte et des rendez-vous sur l'agenda

II-F-1 - ShowRdv

Cette méthode permet d'afficher un rendez-vous correspondant à sa date (DateRdv) et à son heure de début (StartTimeRdv) et de fin (EndTimeRdv).

Paramètre

Type

Explication

Ind

Long

Indice du contrôle étiquette associé au rendez-vous.

DateRdv

Date/Heure

Date du rendez-vous ou de l'événement

StartTimeRdv

Date/Heure

Heure de début du rendez-vous ou de l'événement

EndTimeRdv

Date/Heure

Heure de fin du rendez-vous ou de l'événement

Id,Nb

Long

Indices permettant de positionner et dimensionner le RV sur la colonne.

Text

String

Texte à écrire. Peut contenir des retours à la ligne (vbCrLf).

TextSize

Long

Taille du texte en pixels.

AlignHoriz

Long

Alignement horizontal (1 : gauche, 2 : centre, 3 : droite).

AlignVert

Long

Alignement vertical (1 : haut, 2 : centre, 3 : bas).

FontBold

Boolean

Caractères en gras (oui, non).

BackColor

Long

Couleur de fond.

BorderColor

Long

Couleur de la bordure.

BorderWidth

Long

Épaisseur de la bordure.

Exemple

Le code suivant affiche le rendez-vous de "Dupont" positionné entre 9 heures et 10 h 30.

obAgenda.ShowRdv 1, obAgenda.StartDate + 2, #9:00:00 AM#, #10:30:00 AM#, 1, 1, "DUPONT", 9, 2, 1, True, vbGreen, vbBlack, 1

Aperçu du rectangle du rendez-vous sur l'agenda

II-F-2 - ShowRectRdv

Cette méthode permet d'afficher un rendez-vous dans un rectangle délimité par les coordonnées de début (Row1,Col1), correspondant à la région en haut à gauche, et les coordonnées de fin (Row2,Col2), correspondant à la région en bas à droite.

Paramètre

Type

Explication

Ind

Long

Indice du contrôle étiquette associé au rendez-vous.

Row1,Col1,Row2,Col2

Integer

Coordonnées du rectangle

Id,Nb

Long

Indices permettant de positionner et dimensionner le RV sur la colonne.

Text

String

Texte à écrire. Peut contenir des retours à la ligne (vbCrLf).

TextSize

Long

Taille du texte en pixels.

AlignHoriz

Long

Alignement horizontal (1 : gGauche, 2 : centre, 3 : droite).

AlignVert

Long

Alignement vertical (1 : haut, 2 : centre, 3 : bas).

FontBold

Boolean

Caractères en gras (oui, non).

BackColor

Long

Couleur de fond.

BorderColor

Long

Couleur de la bordure.

BorderWidth

Long

Épaisseur de la bordure.

Exemple

Le code suivant écrit le texte "Dupont" dans un rectangle vert de coordonnées (3, 3, 5, 3).

obAgenda.ShowRectRdv 1, 3, 3, 5, 3, 1, 1, "DUPONT", 9, 2, 1, True, vbGreen, vbBlack, 1

Aperçu du rectangle du rendez-vous sur l'agenda

II-F-3 - WriteFieldRow

Cette méthode permet d'écrire du texte dans l'en-tête de la ligne d'indice Row.

Paramètre

Type

Explication

Row

Long

Indice de l'en-tête de colonne

Text

String

Texte à écrire. Peut contenir des retours à la ligne (vbCrLf).

TextSize

Long

Taille du texte en pixels.

AlignHoriz

Long

Alignement horizontal (1 : gauche, 2 : centre, 3 : droite).

AlignVert

Long

Alignement vertical (1 : haut, 2 : centre, 3 : bas).

FontBold

Boolean

Caractères en gras (oui, non).

Exemple

Le code suivant écrit le texte "08:00" dans l'en-tête de la 1ère ligne.

obAgenda.WriteFieldRow 1, "08:00", 9, 2, 1, True

II-F-4 - WriteFieldCol

Cette méthode permet d'écrire du texte dans l'en-tête de la colonne d'indice Col.

Paramètre

Type

Explication

Col

Long

Indice de l'en-tête de colonne

Text

String

Texte à écrire. Peut contenir des retours à la ligne (vbCrLf).

TextSize

Long

Taille du texte en pixels.

AlignHoriz

Long

Alignement horizontal (1 : gauche, 2 : centre, 3 : droite).

AlignVert

Long

Alignement vertical (1 : haut, 2 : centre, 3 : bas).

FontBold

Boolean

Caractères en gras (oui, non).

Exemple

Le code suivant écrit le texte "Lundi" dans l'en-tête de la 1ère colonne.

obAgenda.WriteFieldCol 1, "Lundi", 9, 2, 1, True

II-G - Comment ajouter une méthode à la classe

Pour ceux qui souhaitent enrichir la classe de nouvelles propriétés ou de nouvelles méthodes pour ajouter des fonctionnalités au planning, je vous propose un exemple simple : ajoutez une méthode pour colorier la case située à l'intersection d'une ligne et d'une colonne.

Pour ce faire, il vous faut ajouter la procédure ColorSquare qui devient automatiquement une méthode pour la classe. Le code devrait donc ressembler à ceci :

'----------------------------------------------------------------------------------------
' Colorie la case d'indices (Row, Col) sur le planning
'----------------------------------------------------------------------------------------
Public Sub ColorSquare(Row As Integer, Col As Integer, BackColor As Long)

With Forms(vFormName)(vSousFormName)("creneau" & Row & "_" & Col)
.BackColor = BackColor
End With

End Sub

Ajoutez le code à la suite des propriétés et méthodes, dans le module de classe clAgenda.

Exemple d'utilisation

Le code suivant colorie en vert la cellule située à l'intersection de la ligne 3 et de la colonne 4 de l'agenda.

obAgenda.ColorSquare 3, 4, vbGreen

III - Le module moAgenda

Contient la variable publique obAgenda, ainsi que les fonctions placées sur les événements clic et double-clic du planning.

Intégrez ce module de la base jointe à votre projet et ajoutez-y vos propres procédures et fonctions de gestion du planning.

Extrait du module

Option Compare Database
Option Explicit

'----------------------------------------------------------------------------------------
' Variable permettant de créer une instance de la classe clAgenda pour paramétrer l'agenda
' et afficher ses différents éléments sur le sous-formulaire de planning.
'----------------------------------------------------------------------------------------
Public obAgenda As clAgenda

'----------------------------------------------------------------------------------------
' Affiche les indices (Row, Col) de la case double-cliquée sur le formulaire
' de planning.
'----------------------------------------------------------------------------------------
Public Function AfficherMessage(Row As Long, Col As Long) As Boolean
MsgBox ("Ligne : " & Row & " " & " Colonne : " & Col)

End Function

'----------------------------------------------------------------------------------------
' Permet de sélectionner une case d'indices (Row, Col) cliquée sur le formulaire
' de planning.
'----------------------------------------------------------------------------------------
Public Function SelectCreneau(Row As Long, Col As Long) As Boolean

If (obAgenda.Row <> 0) And (obAgenda.Col <> 0) Then
Forms!fAgenda!sfAgenda.Form("creneau" & obAgenda.Row & "_" & obAgenda.Col).BorderWidth = 1
ElseIf (obAgenda.Row <> 0) Then
Forms!fAgenda!sfAgenda.Form("rdv" & obAgenda.Row).BorderWidth = 1
End If

obAgenda.Row = Row
obAgenda.Col = Col

If (Row <> 0) And (Col <> 0) Then
Forms!fAgenda!sfAgenda.Form("creneau" & Row & "_" & Col).BorderWidth = 2
ElseIf (Row <> 0) Then
Forms!fAgenda!sfAgenda.Form("rdv" & Row).BorderWidth = 2
End If

End Function

IV - Le sous-formulaire sfAgenda

Ce sous-formulaire comprenant une section en-tête de formulaire et une section détail, contient en fait les étiquettes constituant l'agenda avec les en-têtes de lignes et de colonnes.

Ajoutez ce sous-formulaire présent dans la base jointe à votre projet et paramétrez le planning avec vos propres valeurs.

IV-A - Le nombre maximum de rendez-vous affichés dans le sous-formulaire d'agenda

Cette valeur est conditionnée par le nombre maximum de contrôles que l'on peut créer dans le sous-formulaire sfAgenda, soient 754 contrôles au maximum dans un formulaire MS Access.

Par exemple, pour un agenda de 40 lignes et 7 colonnes on disposera de 40*7 = 280 étiquettes pour le quadrillage, et pour les en-têtes 40 + 7 = 47 étiquettes. Il restera donc 754 - 327 = 427 contrôles pour afficher les rendez-vous.

En conclusion, on pourra encore afficher plus d'un rendez-vous pour chaque créneau horaire de l'agenda, il faut donc bien voir à l'usage si vous dépassez ou non cette limite.

V - Le formulaire fAgenda

Ce formulaire va servir de test pour afficher les rendez-vous sous la forme de rectangles sur le planning. Il contient le sous-formulaire sfAgenda, un bouton de commande cmTester pour tester le planning, et un autre cmEffacer pour vider le planning.

Aperçu du formulaire fAgenda.

V-A - Le bouton de commande cmTester

Ce bouton permet de tester l'agenda.

V-A-1 - La procédure événementielle sur clic

Elle met à jour les en-têtes et affiche un rendez-vous dans le formulaire de planning :

'----------------------------------------------------------------------------------------
' Met à jour les en-têtes et affiche un rendez-vous sur le formulaire de planning.
'----------------------------------------------------------------------------------------
Private Sub cmTester_Click()
Dim i As Integer
Dim dt As Date

' Met à jour les en-têtes de lignes avec les heures de la journée.
For i = 1 To 12
dt = DateAdd("h", (i + 7), Date)
obAgenda.WriteFieldRow (i - 1) * 2 + 1, Format(dt, "hh:nn"), 9, 2, 1, True
Next i

' Met à jour les en-têtes de colonnes avec les jours de la semaine.
obAgenda.WriteFieldCol 1, "Lundi", 9, 2, 1, True
obAgenda.WriteFieldCol 2, "Mardi", 9, 2, 1, True
obAgenda.WriteFieldCol 3, "Mercredi", 9, 2, 1, True
obAgenda.WriteFieldCol 4, "Jeudi", 9, 2, 1, True
obAgenda.WriteFieldCol 5, "Vendredi", 9, 2, 1, True
obAgenda.WriteFieldCol 6, "Samedi", 9, 2, 1, True
obAgenda.WriteFieldCol 7, "Dimanche", 9, 2, 1, True

Me.sfAgenda.Form("rdv1").Tag = 1

' Affiche un rendez-vous sous la forme d'un rectangle sur l'agenda.
obAgenda.ShowRectRdv 1, 3, 3, 5, 3, 1, 1, "RDV n°3", 9, 2, 1, True, vbGreen, vbBlack, 1

End Sub

V-B - Le bouton de commande cmEffacer

Ce bouton permet d'effacer le contenu du planning.

V-B-1 - La procédure événementielle sur clic

Elle efface les rendez-vous affichés sur l'agenda :

Private Sub cmEffacer_Click()
obAgenda.Clear

End Sub

V-C - Le contrôle sous-formulaire sfAgenda

Ce contrôle sous-formulaire a pour objet source le formulaire sfAgenda, qui contient une section en-tête de formulaire et une section détail, pour afficher le planning et les en-têtes de colonnes.

VI - Exemple d'intégration de l'agenda

VI-A - Agenda pour la gestion de rendez-vous

Intégration d'un agenda dans une application dédiée à la gestion de rendez-vous :

Aperçu de l'agenda hebdomadaire.

La base de données pour la gestion des rendez-vous est au format Access 2000.

VII - La base de données à télécharger

La base jointe utilise la classe clAgenda et est au format Access 2000.

VIII - Remerciements

Je tiens à remercier Jean-Philippe André et toute l'équipe Office pour m'avoir conseillé pour la réalisation de cet article, ainsi que Malick SECK pour sa relecture.