Apprendre à créer un formulaire d'agenda à partir d'un module de classe

Objectif : apprendre à créer dans votre projet Access un agenda basé sur le module de classe clAgenda.

Niveau requis : avancé.

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

Article lu   fois.

L'auteur

Profil Pro

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Introduction

L'objectif de cet article est de décrire la mise en place, dans un formulaire MS Access, d'un agenda basé sur un module de classe. Ce type d'agenda a l'avantage d'être très souple et peut être paramétré en VBA 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 projet Access.

Pour ce faire, nous allons présenter par la suite les objets qui devront être ajoutés à votre base de données Access. Enfin, pour illustrer cette technique, nous proposerons à la fin de l'article un exemple d'intégration de l'agenda.

II. Le module de classe clAgenda

La classe clAgenda 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.

 
Sélectionnez

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.

 
Sélectionnez

obAgenda.Col=4

Illustration

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

Image non disponible
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.

 
Sélectionnez

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.

 
Sélectionnez

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.

 
Sélectionnez

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.

 
Sélectionnez

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.

 
Sélectionnez

obAgenda.BackColor=vbWhite
Image non disponible
Aperçu de l'agenda avec fond blanc

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

 
Sélectionnez

obAgenda.BackColor = RGB(255, 249, 139)
Image non disponible
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.

 
Sélectionnez

obAgenda.GridColor=vbBlack
Image non disponible
Aperçu de l'agenda avec une grille en noir

Le code suivant colorie en gris la grille du planning.

 
Sélectionnez

obAgenda.GridColor=RGB(89, 89, 89)
Image non disponible
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.

 
Sélectionnez

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.

 
Sélectionnez

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.

 
Sélectionnez

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.

 
Sélectionnez

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.

 
Sélectionnez

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.

 
Sélectionnez

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.

 
Sélectionnez

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.

 
Sélectionnez

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.

 
Sélectionnez

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.

 
Sélectionnez

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.

 
Sélectionnez

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.

 
Sélectionnez

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.

 
Sélectionnez

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.

 
Sélectionnez

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.

 
Sélectionnez

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

 
Sélectionnez

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

 
Sélectionnez

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.

 
Sélectionnez

obAgenda.ShowRdv 1, obAgenda.StartDate + 2, #9:00:00 AM#, #10:30:00 AM#, 1, 1, "DUPONT", 9, 2, 1, True, vbGreen, vbBlack, 1
Image non disponible
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).

 
Sélectionnez

obAgenda.ShowRectRdv 1, 3, 3, 5, 3, 1, 1, "DUPONT", 9, 2, 1, True, vbGreen, vbBlack, 1
Image non disponible
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.

 
Sélectionnez

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.

 
Sélectionnez

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 :

 
Sélectionnez

'----------------------------------------------------------------------------------------
' 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.

 
Sélectionnez

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 jointebdagenda à votre projet et ajoutez-y vos propres procédures et fonctions de gestion du planning.

Extrait du module

 
Sélectionnez

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 dans 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 jointebdagenda à 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.

Image non disponible
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 :

 
Sélectionnez

'----------------------------------------------------------------------------------------
' Met à jour les en-têtes et affiche un rendez-vous dans 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 :

 
Sélectionnez

Private Sub cmEffacer_Click()
' Efface le contenu du planning.
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 du planning

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

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

Image non disponible
Aperçu de l'agenda hebdomadaire.

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

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

La base jointeBD Agenda 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.

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

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. Droits de diffusion permanents accordés à Developpez LLC.