Intégrer un planning basé sur la classe de gestion d'images clGdiPlus

Objectif : Intégrer dans votre projet Access un planning basé sur la classe de gestion d'images clGdiPlus.

Niveau requis : avancé.

Commentez cet article : 30 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 d'un planning basé sur la classe de gestion d'images clGdiPlus, dans un formulaire Access. Ce type de planning a l'avantage d'être très souple et peut être paramétré en VBA sur 1 semaine, quinze jours, 1 mois etc..., et peut comporter jusqu'à environ 100 lignes. Il pourra servir d'agenda ou de planning selon les besoins 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 projet Access. Enfin, pour illustrer cette technique, nous proposerons à la fin de l'article un exemple d'intégration du planning.

II. La classe de gestion d'images clGdiPlus

clGdiPlus est un module de classe VBA pour faciliter l'utilisation de la librairie graphique gdiplus.dll (Celle-ci n'est livrée qu'avec Windows XP, pour les autres versions de Windows vous pouvez la télécharger ici). clGdiPlus permet de gérer des images et de dessiner dans un contrôle image.

Télécharger le fichier au format texte

Ensuite insérer, pour votre projet, le contenu du fichier dans un module de classe nommé clGdiPlus.

III. La classe clPlanning

La classe clPlanning est basée sur la classe de gestion des images clGdiPlus. Elle permet de dessiner un planning dans un contrôle image : Dessin du quadrillage, des en-têtes de lignes et de colonnes, mais aussi des rectangles définissant les périodes sur le planning.

Intégrer alors le module de classe clPlanning de la base jointebdplanning à votre projet.

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.

III-A. Les propriétés de paramétrage du planning

Ces propriétés vont permettre de paramétrer le planning au moment de sa création.

III-A-1. Row

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

Exemple :

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

 
Sélectionnez

obPlanning.Row=3

III-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 en lecture/écriture.

Exemple :

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

 
Sélectionnez

obPlanning.Col=3

III-A-3. Rows

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

Exemple :

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

 
Sélectionnez

obPlanning.Rows=30

III-A-4. Cols

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

Exemple :

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

 
Sélectionnez

obPlanning.Cols=7

III-A-5. RowsHeight

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

Exemple :

Le code suivant ajuste la hauteur des lignes du planning à 25 pixels.

 
Sélectionnez

obPlanning.RowsHeight=25

III-A-6. ColsWidth

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

Exemple :

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

 
Sélectionnez

obPlanning.ColsWidth=125

III-A-7. BackColor

Utiliser la propriété BackColor pour spécifier la couleur de fond du planning. Long en lecture/écriture.

Exemple :

Le code suivant colorie en blanc le fond du planning.

 
Sélectionnez

obPlanning.BackColor=vbWhite

III-A-8. GridColor

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

Exemple :

Le code suivant colorie en noir la grille (les lignes) du planning.

 
Sélectionnez

obPlanning.GridColor=vbBlack

III-A-9. FieldsCols

Vous pouvez utiliser la propriété FieldsCols pour définir le nombre de colonnes pour les en-têtes de lignes situés à gauche du planning. Entier en lecture/écriture.

Exemple :

Le code suivant définit 2 colonnes à gauche du planning pour les en-têtes de lignes.

 
Sélectionnez

obPlanning.FieldsCols=2

III-A-10. FieldsColsWidth

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

Exemple :

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

 
Sélectionnez

obPlanning.FieldsColsWidth=100

III-A-11. FieldsColor

Vous pouvez utiliser la propriété FieldsColor pour spécifier la couleur de fond pour les en-têtes de lignes situés à gauche du planning. Long en lecture/écriture.

Exemple :

Le code suivant colorie en gris les colonnes de gauche (en-têtes de lignes) du planning.

 
Sélectionnez

obPlanning.FieldsColor=vbGrey

III-B. Les méthodes et propriétés d'initialisation de l'image

Elles permettent de définir le contrôle sur lequel on va dessiner le planning et de préparer l'image pour qu'elle soit conforme aux dimensions du contrôle.

III-B-1. RefControleImage

Utiliser la propriété RefControleImage pour spécifier le contrôle image sur lequel on va dessiner le planning.

Exemple :

Le code suivant spécifie le contrôle image imPlanning du formulaire courant sur lequel on va dessiner le planning.

 
Sélectionnez

obPlanning.RefControleImage = Me.imPlanning

III-B-2. InitImage

Initialise et définit l'image pour qu'elle soit conforme aux dimensions du contrôle image.

Exemple :

Le code suivant initialise et définit l'image du planning pour qu'elle soit conforme aux dimensions du contrôle image imPlanning.

 
Sélectionnez

obPlanning.InitImage

III-C. Les méthodes d'initialisation et d'actualisation du planning

III-C-1. Clear

Cette méthode redessine le planning d'origine (quadrillage vide).

Extrait de son code :

 
Sélectionnez

Public Sub Clear()
Dim i As Integer, j As Integer
Dim l As Integer, w As Integer, h As Integer
Dim lReturn As Boolean

' Largeur totale des en-têtes de lignes (colonnes de gauche).
l = vFieldsCols * vFieldsColsWidth

' Largeur totale du planning sans les en-têtes de lignes.
w = vCols * vColsWidth

' Hauteur totale du planning sans les en-têtes de colonnes.
h = vRows * vRowsHeight

' Supprime toutes les régions du planning précédemment créées.
lReturn = obGdiP.DeleteAllRegions

' On dessine les rectangles du planning : le rectangle des en-têtes de lignes 
'  gauche du planning) en gris et le rectangle du planning en blanc.

lReturn = obGdiP.DrawRectangle(0, 0, l, h, vFieldsColor, vGridColor, 1)
lReturn = obGdiP.DrawRectangle(l, 0, l + w, h, vBackColor, vGridColor, 1)

' On dessine les lignes horizontales composant le planning.

For i = 1 To vRows
   lReturn = obGdiP.DrawLine(0, i * vRowsHeight, _ 
                             l + w, i * vRowsHeight, vGridColor, 1, False)
Next i

' On dessine les lignes verticales composant le planning.

For i = 1 To vFieldsCols
   lReturn = obGdiP.DrawLine(i * vFieldsColsWidth, 0, _ 
                             i * vFieldsColsWidth, h, vGridColor, 1, False)
Next i

For i = 1 To vCols
   lReturn = obGdiP.DrawLine(l + i * vColsWidth, _ 
                             0, l + i * vColsWidth, h, vGridColor, 1, False)
Next i

' Création des vRows*vCols régions; 
' chaque région portant le nom de ses indices de ligne et de colonne :
' Par exemple la région de ligne 5 et de colonne 3 portera le nom "5_3".

For i = 1 To vRows

For j = 1 To vCols
   lReturn = obGdiP.CreateRegionRect(i & "_" & j, l + (j - 1) * vColsWidth, _ 
             (i - 1) * vRowsHeight, l + j * vColsWidth - 1, i * vRowsHeight - 1)
Next j

Next i

End Sub

III-C-2. Refresh

Cette méthode met à jour le contrôle image en fonction des dernières modifications qui ont été apportées à l'objet associé obHeader ou obPlanning.

Cette procédure doit être appelée après chaque modification de l'objet obPlanning, instance de la classe clPlanning, afin d'actualiser le contrôle associé.

Exemple :

Le code suivant actualise le contrôle image imPlanning du sous-formulaire sfPlanning et redessine donc le planning sur ce contrôle.

 
Sélectionnez

obPlanning.refresh

III-D. Les méthodes de dessin sur le planning

III-D-1. DrawRect

Dessine 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ètres :

Paramètre Type Explication
Row1,Col1,Row2,Col2 Integer Coordonnées du rectangle à dessiner sur le planning.
BackColor Long Couleur de remplissage. Mettre -1 pour un rectangle transparent.
PenColor Long Couleur de la ligne.
PenWidth Long Epaisseur de la ligne.

Exemple :

Le code suivant dessine un rectangle avec un fond bleu et une bordure noire sur la 1ère ligne, de la 1ère colonne à la 3ème colonne du planning.

 
Sélectionnez

obPlanning.DrawRect 1, 1, 1, 3, vbBlue, vbBlack, 1

III-D-2. DrawText

Cette méthode permet d'écrire du texte dans le 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
Row1,Col1,Row2,Col2 Integer Coordonnées du rectangle
Text String Texte à écrire. Peut contenir des retours à la ligne (vbCrLf).
TextSize Long Taille du texte en pixels.
AlignHoriz Long Alignement horizontal (0 : Gauche, 1 : Centre, 2 : Droite).
AlignVert Long Alignement vertical (0 : Haut, 1 : Centre, 2 : Bas).

Exemple :

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

 
Sélectionnez

obPlanning.DrawText 1, 1, 1, 3, "DUPONT", 12, 0,0 vbBlue

III-D-3. DrawFieldText

Cette méthode permet d'écrire du texte dans le zone de coordonnées (Row,Col) et situé à gauche sur le planning (en-têtes de lignes).

Paramètre Type Explication
Row, Col Integer Coordonnées de la zone situé à gauche sur le planning.
Text String Texte à écrire. Peut contenir des retours à la ligne (vbCrLf).
TextSize Long Taille du texte en pixels.
AlignHoriz Long Alignement horizontal (0 : Gauche, 1 : Centre, 2 : Droite).
AlignVert Long Alignement vertical (0 : Haut, 1 : Centre, 2 : Bas).

Exemple :

Le code suivant écrit le texte "DWC" dans la zone située à gauche du planning et de coordonnées (1: 1ère ligne, 2: 2ème colonne).

 
Sélectionnez

obPlanning.DrawFieldText 1, 2, "DWC", 12, 0, 0, vbBlue

III-E. La méthode pour identifier le rectangle à partir des coordonnées (X,Y)

III-E-1. GetRectXY

Identifie le rectangle situé sur un point de coordonnées (X,Y).

Paramètres :

Paramètre Type Explication
X Long Position X du point sur le planning.
Y Long Position Y du point sur le planning.
Row1,Col1,Row2,Col2 Entier Coordonnées du rectangle.

Exemple :

Le code suivant renvoie en paramètres les coordonnées du rectangle situé sur le point de coordonnées (X,Y).

 
Sélectionnez

obPlanning.GetRectXY(CLng(X), CLng(Y), Row1, Col1, Row2, Col2) 

III-F. Les méthodes de sauvegarde et de restitution de l'image en mémoire

Ces méthodes sont utiles pour éviter d'avoir à redessiner la totalité du planning, juste avant de tracer le contour du rectangle sélectionné sur souris appuyée.

III-F-1. KeepImage

Cette méthode sauvegarde en mémoire l'image du planning.

Elle doit être appelée après avoir dessiné le planning et avant d'exécuter ResetImage.

Exemple :

Le code suivant copie en mémoire l'image du planning.

 
Sélectionnez

obPlanning.KeepImage

III-F-2. ResetImage

Cette méthode restitue l'image du planning sauvegardée en mémoire.

Elle permet de restituer l'image du planning juste avant de dessiner le contour du rectangle sélectionné.

Exemple :

Le code suivant rétablit l'image du planning de la mémoire.

 
Sélectionnez

obPlanning.ResetImage

III-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 : ajouter une méthode pour colorier une colonne du planning, afin de prendre en compte les jours fériés.

Pour ce faire, il nous faut appeler la méthode DrawRect pour redessiner les petits rectangles sur la colonne choisie, ligne par ligne, et avec la couleur désirée. Le code devrait donc ressembler à celà :

 
Sélectionnez

Public Sub ColorCol(IndCol As Integer, BackColor As Long)
Dim IndRow As Integer ' Indice de ligne.

For IndRow = 1 To Rows
' Dessine à l'intersection entre la ligne IndRow et la colonne IndCol 
' un rectangle de couleur de fond BackColor.
DrawRect IndRow, IndCol, IndRow, IndCol, BackColor, vbBlack, 1

Next IndRow

End Sub

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

Exemple d'utilisation :

Le code suivant colorie la 16ème colonne du planning en rouge.

 
Sélectionnez

obPlanning.ColorCol 16, vbRed

IV. Le module moPlanning

Contient les variables publiques obHeader, obPlanning et dateDebut, ainsi que les procédures et fonctions pour manipuler le planning.

Intégrer ce module de la base jointebdplanning à votre projet et y ajouter vos propres procédures et fonctions de gestion du planning.

Extrait du module :

 
Sélectionnez

Option Compare Database

'****************************************************************************************
'*                                    PARTIE DECLARATIVE                                *
'****************************************************************************************

'----------------------------------------------------------------------------------------
' Ces 2 variables sont accessibles dans tout le projet.
' Une fois instanciées, elles permettent de paramétrer le planning, puis
' de dessiner par dessus.
'----------------------------------------------------------------------------------------
Public obHeader As clPlanning
Public obPlanning As clPlanning

'----------------------------------------------------------------------------------------
' La date du premier jour du planning correspondant à la 1ère colonne.
' Cette variable est accessible dans tout le projet.
'----------------------------------------------------------------------------------------
Public DateDebut As Date


'****************************************************************************************
'*                                    SUITE DU MODULE                                   *
'****************************************************************************************

'----------------------------------------------------------------------------------------
' Vous pouvez définir vos procédures et fonctions de gestion du planning à la suite.
' ...
'----------------------------------------------------------------------------------------

'----------------------------------------------------------------------------------------
' Exemple de code :
' Fonction de conversion d'un indice de colonne en son jour correpondant sur le planning.
'----------------------------------------------------------------------------------------
Public Function ConversionColonneVersJour(ByVal Colonne As Integer) As Date
ConversionColonneVersJour = (DateDebut + Colonne - 1)
End Function

'----------------------------------------------------------------------------------------
' Autre exemple de code :
' Fonction de conversion d'une date en indice de colonne correpondant sur le planning.
'----------------------------------------------------------------------------------------
Public Function ConversionJourVersColonne(ByVal Jour As Date) As Integer
ConversionJourVersColonne = (Jour - DateDebut + 1)
End Function

V. Le sous-formulaire sfPlanning

Ce sous-formulaire contient, dans l'en-tête du formulaire, le contrôle image imHeader pour afficher les en-têtes de colonnes, et le contrôle image imPlanning dans la section détail, pour afficher le planning et les en-têtes de lignes.

Ajouter ce sous-formulaire présent dans la base jointebdplanning à votre projet et paramétrer le planning avec vos propres valeurs.

V-A. La procédure évènementielle sur chargement.

Crée les instances de classes pour les en-têtes de colonnes (obHeader) et pour le planning (obPlanning), puis paramètre le planning et les en-têtes de colonnes avant de dessiner le planning sur les contrôles images du formulaire.

Définissez vous-même les paramètres de votre planning.

 
Sélectionnez

Private Sub Form_Load()

' Création des instances de classes pour les en-têtes de colonnes (obHeader)
' et pour le planning (obPlanning).

Set obHeader = New clPlanning
Set obPlanning = New clPlanning

' Spécification du contrôle image imHeader sur lequel on va dessiner les en-têtes de colonnes. 
' Puis, initialisation de l'image et affectation des paramètres pour les en-têtes de colonnes.
     
   With obHeader
      .RefControleImage = Me.imHeader
      .InitImage
      .FieldsCols = 2
      .FieldsColsWidth = 70
      .FieldsColor = -2147483633
      .Rows = 1
      .RowsHeight = 25
      .Cols = 31
      .ColsWidth = 27
      .BackColor = -2147483633
   End With
 
' Spécification du contrôle image imPlanning sur lequel on va dessiner le planning. 
' Puis, initialisation de l'image et affectation des paramètres pour le planning.
   
   With obPlanning
      .RefControleImage = Me.imPlanning
      .InitImage
      .FieldsCols = 2
      .FieldsColsWidth = 70
      .Rows = 40
      .Cols = 31
      .ColsWidth = 27
   End With

' On dessine les en-têtes et le planning sur les contrôles images.

obHeader.Clear
obHeader.Refresh

obPlanning.Clear
obPlanning.Refresh

End Sub

V-B. La procédure évènementielle sur fermeture

Sur fermeture du sous-formulaire on libère les variables publiques obHeader et obPlanning.

 
Sélectionnez

Private Sub Form_Close()
' On libère les variables.

Set obHeader = Nothing
Set obPlanning = Nothing

End Sub

V-C. Le contrôle image imHeader

Contrôle sur lequel on va dessiner les en-têtes de colonnes.

V-D. Le contrôle image imPlanning

Contrôle sur lequel on va dessiner le planning proprement dit.

V-D-1. La procédure évènementielle sur souris appuyée

Identifie la ligne et la colonne correspondant à la région sélectionnée sur le planning et dessine un cadre autour de cette région.

 
Sélectionnez

Private Sub imPlanning_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
' Indices de lignes et de colonnes pour le rectangle du planning.
Dim Row1 As Integer, Col1 As Integer, Row2 As Integer, Col2 As Integer 

' Identifie les coordonnées du rectangle situé sur le point (X,Y).
obPlanning.GetRectXY CLng(X), CLng(Y), Row1, Col1, Row2, Col2

   If (Row1 > 0) Then ' Si un rectangle existe.
                          
      obPlanning.ResetImage ' Restitue l'image du planning sauvegardée en mémoire.
                          
      ' Dessine un cadre autour du rectangle de coordonnées (Row1,Col1,Row2,Col2).
      obPlanning.DrawRect Row1, Col1, Row2, Col2, -1, vbBlack, 2
      obPlanning.Refresh
      
   End If

End Sub

V-D-2. La procédure évènementielle sur double-clic

On récupère ici les indices de ligne et de colonne sélectionnées sur souris appuyée. L'indice de colonne va nous permettre de connaître, grâce à une fonction de conversion, le jour correspondant sur le planning. Placer ici le code pour ouvrir un formulaire de saisie en fonction de la zone sélectionnée.

 
Sélectionnez

Private Sub imPlanning_DblClick(Cancel As Integer)  
    
   ' S'il y a bien une zone sélectionnée sur le planning. 
   If (obPlanning.Row > 0) And (obPlanning.Col > 0) Then
      ' Exemple de code : 
      ' Jour = ConversionColonneVersJour(obPlanning.Col)
      ' DoCmd.OpenForm "F_Saisie"... 
   End If

End Sub

V-E. Le nombre maximum de lignes du planning

Cette valeur est conditionnée par la hauteur maximum de l'image et donc du sous-formulaire sfplanning, soit 22 inches ou 55.873cm.

Comme les paramètres du planning sont donnés en pixels, nous allons donc utiliser cette mesure pour le calcul du nombre maximum de lignes :

Par définition 1 inch = 96 pixels donc la hauteur maximum du sous-formulaire est de 22 inches = 22*96 pixels = 2112 pixels.

Par conséquent, pour une hauteur de ligne de 25 pixels on pourra afficher au maximum 2112/25 = 84,48, soit 84 lignes pleines au maximum, et avec une hauteur de ligne de 20 pixels on pourra afficher sur le planning 2112/20 = 105,6, soit 105 lignes au maximum.

En conclusion, on dispose d'une centaine de lignes au plus pour notre planning, cela nous laisse donc de la marge.

VI. Le formulaire fPlanning

Ce formulaire va servir de test pour dessiner des rectangles horizontaux sur le planning. Il intègre le sous-formulaire sfPlanning, un bouton de commande cmTester pour tester le planning, et un autre cmEffacer pour vider le planning.

Image non disponible
Aperçu du formulaire fPlanning.

VI-A. Le bouton de commande cmTester

Ce bouton permet de tester le planning.

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

Elle met à jour les en-têtes de colonnes et le planning avec quelques données exemples :

 
Sélectionnez

Private Sub cmTester_Click()
Dim i As Integer
Dim DateJ As Date
Dim Col1 As Integer, Col2 As Integer ' Indices de colonnes sur le planning.

' Met à jour les en-têtes de colonnes avec les 31 jours du mois de janvier par exemple.

obHeader.DrawFieldText 1, 1, "NCh.", 12, 0, 1
obHeader.DrawFieldText 1, 2, "TCh.", 12, 0, 1

DateDebut = CDate("01/01/2009")
DateJ = DateDebut

For i = 1 To 31
obHeader.DrawText 1, i, 1, i, Day(DateJ), 12, 1, 1, vbBlack, False
DateJ = DateJ + 1
Next i


' Ecrit du texte dans les en-têtes de la ligne 1.

obPlanning.DrawFieldText 1, 1, "001", 12, 0, 1
obPlanning.DrawFieldText 1, 2, "DWC", 12, 0, 1

' Dessine 1 rectangle d'une couleur donnée sur la 1ère ligne du planning.

' Conversion de la date de début en indice de colonne.
Col1 = ConversionJourVersColonne(CDate("01/01/2009"))
' Conversion de la date de fin en indice de colonne.
Col2 = ConversionJourVersColonne(CDate("03/01/2009"))
' Dessine le rectangle correspondant.
obPlanning.DrawRect 1, Col1, 1, Col2, vbMagenta, obPlanning.GridColor, 1
obPlanning.DrawText 1, Col1, 1, Col2, "DUPONT", 12, 1, 1, vbBlack, False


' Ecrit du texte dans les en-têtes de la ligne 2.

obPlanning.DrawFieldText 2, 1, "002", 12, 0, 1
obPlanning.DrawFieldText 2, 2, "BWC", 12, 0, 1

' Dessine 1 rectangle d'une couleur donnée sur la 2ème ligne du planning.

' Conversion de la date de début en indice de colonne.
Col1 = ConversionJourVersColonne(CDate("03/01/2009"))
' Conversion de la date de fin en indice de colonne.
Col2 = ConversionJourVersColonne(CDate("06/01/2009"))
' Dessine le rectangle correspondant.
obPlanning.DrawRect 2, Col1, 2, Col2, vbGreen, obPlanning.GridColor, 1
obPlanning.DrawText 2, Col1, 2, Col2, "DURAND", 12, 1, 1, vbBlack, False


' Raffraichit les contrôles images.

obPlanning.KeepImage

obHeader.Refresh
obPlanning.Refresh

End Sub

VI-B. Le bouton de commande cmEffacer

Ce bouton permet d'effacer le contenu du planning.

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

Elle efface le contenu des contrôles images et redessine le planning sur ces contrôles :

 
Sélectionnez

Private Sub cmEffacer_Click()

' Efface le contenu du planning.

obHeader.Clear
obHeader.Refresh

obPlanning.Clear
obPlanning.Refresh

End Sub

VI-C. Le contrôle sous-formulaire sfPlanning

Ce contrôle sous-formulaire a pour objet source le formulaire sfPlanning, qui contient le contrôle image imHeader, pour afficher les en-têtes de colonnes, et le contrôle image imPlanning, pour afficher le planning et les en-têtes de lignes.

VII. Exemple d'intégration du planning

VII-A. Planning mensuel des réservations

Intégration d'un planning mensuel dans une application pour la gestion des réservations dans un hôtel :

Image non disponible
Aperçu du planning mensuel.

La base de donnéesgeshot pour la gestion des réservations est au format Access 2000.

VII-B. Gestion des horaires

Intégration d'un planning paramétrable dans une application pour la gestion des horaires :

Image non disponible
Aperçu du planning pour la gestion des horaires.

Les exemples d'applicationsgesplan pour la gestion des horaires. Ils sont au format Access 2000.

VII-C. Agenda hebdomadaire

Intégration d'un planning hebdomadaire dans une application pour la gestion des rendez-vous :

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

Les exemples d'agendasExemples d'agendas utilisent GdiPlus et sont au format Access 2000.

Autres exemples d'agendasAutres exemples d'agendas. Ils utilisent GdiPlus et sont au format Access 2000.

VIII. Même procédé d'intégration d'un planning basé sur la classe clGdi32

L'objectif de cette section est de décrire brièvement la mise en place d'un planning basé sur la classe de gestion d'images clGdi32, dans un formulaire Access. Cette classe facilite l'utilisation de la librairie graphique gdi32.dll (Celle-ci a l'avantage d'être disponible sur tous les systèmes Windows. Si malgré tout elle n'est pas présente sur votre ordinateur ou endommagée, vous pouvez la télécharger ici).

Il vous faut alors ajouter à votre projet, comme pour la méthode précédente, les classes clGdi32 et clPlanning32, le module moPlanning, le sous-formulaire sfPlanning et enfin le formulaire fPlanning, tous présents dans la base jointebdplanning32.

IX. Les bases de données à télécharger

La base jointe n°1bdplanning utilise GdiPlus et est au format Access 2000.

La base jointe n°2bdplanning32 utilise Gdi32 et est au format Access 2000.

X. Annexe

Module de classe clAgenda pour ExcelModule de classe clAgenda pour Excel avec un exemple d'utilisation dans un classeur.

Module de classe clPlanning pour ExcelModule de classe clPlanning pour Excel avec un exemple d'intégration dans un classeur.

XI. Remerciements

Je tiens à remercier Arkham46 et toute l'équipe Office pour m'avoir guidé dans la réalisation de cette article, ainsi que jacques_jean pour sa relecture.

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

  

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