Ce tutorial a pour but de vous apprendre les différentes méthodes pour écrire et dessiner
dans les états Access.
Apprendre à Ecrire et Dessiner dans les états Access par Philippe JOCHMANS
I - INTRODUCTION..................................................................................................................................................... 3
II - LES INSTRUCTIONS POUR ECRIRE ET DESSINER......................................................................................... 3
II-A - Les procédures évènementielles dans les états...........................................................................................3
II-B - Suite logique des procedures....................................................................................................................... 4
II-C - Les Sections................................................................................................................................................. 4
II-C-1 - Détail.....................................................................................................................................................4
II-C-2 - Entête et Pied de pages...................................................................................................................... 4
II-C-3 - Entête et Pied d'Etat............................................................................................................................ 4
II-C-4 - Entête et Pied de Groupe.................................................................................................................... 5
II-D - Les évènements............................................................................................................................................5
II-D-1 - Page..................................................................................................................................................... 5
II-D-2 - Format.................................................................................................................................................. 5
II-D-3 - Print...................................................................................................................................................... 5
II-D-4 - Retreat.................................................................................................................................................. 5
II-E - Les coordonnées dans un Etat.....................................................................................................................5
II-E-1 - Origine.................................................................................................................................................. 5
II-E-2 - Unités....................................................................................................................................................6
II-E-3 - Les dimensions : ScaleWidth et ScaleHeight.......................................................................................6
II-E-4 - ScaleTop et ScaleLeft...........................................................................................................................7
II-F - Ecrire............................................................................................................................................................. 7
II-F-1 - Print.......................................................................................................................................................7
II-F-2 - Police.................................................................................................................................................... 8
II-F-3 - Positionnement : CurrentX, CurrentY................................................................................................... 8
II-F-4 - Récupérer la taille du texte : TextWidth et TextHeight......................................................................... 9
II-G - Dessiner........................................................................................................................................................ 9
II-G-1 - Largeur des traits : DrawWidth............................................................................................................ 9
II-G-2 - Type de traits : DrawStyle..................................................................................................................10
II-G-3 - Remplissage : Fillstyle........................................................................................................................10
II-G-4 - Les couleurs : FillColor...................................................................................................................... 11
II-G-5 - Le mode de dessin : DrawMode........................................................................................................12
II-G-6 - Line.....................................................................................................................................................15
II-G-7 - Circle.................................................................................................................................................. 17
II-G-8 - PSet....................................................................................................................................................18
III - EXEMPLES......................................................................................................................................................... 18
III-A - Rectangles au coin arrondi........................................................................................................................ 19
III-A-1 - Le rectangle simple........................................................................................................................... 19
III-A-2 - Le rectangle générique......................................................................................................................20
III-B - Mettre en évidence une donnée................................................................................................................ 22
III-B-1 - En le mettant en surbrillance............................................................................................................ 22
III-B-2 - En l'entourant d'une ellipse............................................................................................................... 23
III-C - Dégradés....................................................................................................................................................23
III-D - La carte de France.................................................................................................................................... 24
III-E - Les champs auto extensibles.................................................................................................................... 27
IV - CONCLUSION.................................................................................................................................................... 28
V - REMERCIEMENTS..............................................................................................................................................28
-2-
Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à
l'obtention préalable de l'autorisation de l'auteur.
http://starec.developpez.com//tuto/ecriredessineretats/
Apprendre à Ecrire et Dessiner dans les états Access par Philippe JOCHMANS
I - INTRODUCTION
Le but de cet article est de vous expliquer comment écrire et dessiner dans les Etats Access sans utiliser les contrôles
classiques (zones de texte, rectangles, etc.).
• Initiation sur les propriétés, méthodes et procédures évènementielles pour écrire et dessiner.
• Présentation d'exemples.
Toutes les méthodes qui seront évoquées ici ne sont applicables qu'aux états. Si vous voulez
dessiner sur des formulaires il faudra utiliser des API.
Pour cela, je vous conseille d'aller visiter :
Les utilisateurs de VB6 ne seront pas dépaysés, ils reconnaîtront les fonctions utilisées.
Les instructions que nous allons étudier ne s'écrivent qu'en VBA (il n'existe pas d'assistant).
Une bonne connaissance de celui-ci est indispensable pour comprendre certains exemples.
De plus l'utilisation de la touche F1 est indispensable en cas du moindre doute.
Nous allons dans ce paragraphe énumérer les procédures évènementielles, les méthodes et les propriétés pour
écrire et dessiner dans un Etat.
Les états comportent comme les formulaires des procédures évènementielles, cependant celles-ci ne permettent pas
une interaction avec l'utilisateur, car en effet un état n'est pas interactif contrairement à un formulaire.
Les procédures ne concernent que les différentes phases de l'élaboration d'un Etat (Formatage, Impression) et
d'autres procédures comme l'ouverture, etc.
Dans le tableau suivant vous allez trouver les procédures évènementielles et à quelle section elles peuvent
s'appliquer.
-3-
Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à
l'obtention préalable de l'autorisation de l'auteur.
http://starec.developpez.com//tuto/ecriredessineretats/
Apprendre à Ecrire et Dessiner dans les états Access par Philippe JOCHMANS
Vous trouverez ci-dessous la suite logique des procédures évènementielles les plus utilisées.
1 Report_Open
2 Report_Activate
3 ZoneEntêtePage_Format
4 ZoneEntêtePage_Print
5 Détail_Format
6 Détail_Print
7 ZonePiedPage_Format
8 ZonePiedPage_Print
9 Report_Page
10 Report_Close
11 Report_Deactivate
Un Etat est divisée en différentes sections, nous allons expliquer à quoi elles servent, cela permettra de mieux
appréhender la construction d'un Etat et de savoir où doivent se positionner les éléments pour écrire et dessiner.
Notez que cela est également valable lorsque vous voulez positionner des contrôles (zones de textes, etc.).
II-C-1 - Détail
C'est dans cette zone que vous retrouverez le détail de vos enregistrements, visuellement c'est un peu comme si
vous aviez copier-coller votre requête dans une feuille.
Les données des entêtes et pied de pages concernent toutes les informations qui doivent se trouver sur chacune de
vos pages (ex : SIRET, Numéro de pages, etc…). Comme leur nom l'indique, vous avez une zone pour l'entête de la
page et une pour le pied de la page, par analogie, cela correspond aux entêtes et pied de pages d'un document Word.
Contrairement aux zones de pages ci-dessus, ici vous afficherez une information sur l'entête de la première page et
une sur le pied de la dernière page de l'Etat.
Utiliser l'Entête pour afficher par exemple le logo d'une société dans une facture, et le pied d'Etat pour un total final.
-4-
Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à
l'obtention préalable de l'autorisation de l'auteur.
http://starec.developpez.com//tuto/ecriredessineretats/
Apprendre à Ecrire et Dessiner dans les états Access par Philippe JOCHMANS
Ces deux zones n'existent pas par défaut, elles sont crées automatiquement lorsque vous regroupez des données,
par exemple lorsque vous décider d'éditer une liste de personnes et que vous voulez les regrouper par rapport à
l'initial de leur Nom. En général on se sert de l'Entête pour indiquer à quoi correspond le groupe et le pied pour faire
des totaux, mais les informations à visualiser peuvent être différentes.
Nous allons uniquement lister les procédures intéressantes pour le sujet de cet article, je vous renvoie sur l'aide
Access pour les autres.
II-D-1 - Page
Cet évènement se produit lors de la mise en forme de la page avant son impression, c'est sur cet évènement que
l'on s'appuiera si on veut effectuer une action d'écriture ou de dessin sur l'ensemble de la page.
Mais attention, tout ce que vous ferez sur cet évènement se fera par-dessus tout ce qui a été
fait avant, donc vous risquez de cacher des écritures.
II-D-2 - Format
Cet évènement se produit lors de la mise en forme d'une section d'un Etat, chaque section peut avoir un formatage
différent, contrairement à l'évènement Page du rapport.
II-D-3 - Print
Cet évènement se produit pour préparer l'Etat à l'impression. Il se produit après l'évènement formatage d'une section.
II-D-4 - Retreat
Cet évènement se produit lorsque Microsoft Access retourne à une section d'état précédente pendant sa mise en
forme (copie de l'aide Access). Cet évènement se produit donc lorsque qu'il y'a des re-calcules sur une section.
Pour pouvoir écrire ou dessiner dans un Etat, il faut d'abord savoir comment fonctionnent les coordonnées dans celui-
ci, en effet il faudra positionner les écritures et les dessins.
II-E-1 - Origine
L'origine du repère se trouve en haut à gauche, que se soit pour un état ou une section de celui-ci.
Ce qui veut dire que lorsque vous allez sur la droite le chiffre des x augmente, et donc lorsque vous allez vers le bas
le chiffre des y augmente (l'axe des y est donc inversé par rapport aux axes en mathématique).
-5-
Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à
l'obtention préalable de l'autorisation de l'auteur.
http://starec.developpez.com//tuto/ecriredessineretats/
Apprendre à Ecrire et Dessiner dans les états Access par Philippe JOCHMANS
L'origine est propre à la section dans laquelle vous effectuer le code, en effet, si celui-ci se trouve dans l'état (Report),
l'origine sera en haut à gauche de la feuille, si vous êtes dans le pied de page, l'origine se trouve en haut et à gauche
de cette section.
II-E-2 - Unités
Paramètre Unité
1 Twips
2 Points
3 Pixels
4 Caractères (horizontal = 120 twips par
unité ; vertical = 240 twips par unité
5 Pouces
6 Millimètres
7 Centimètres
Pour connaître la dimension de la section dans laquelle vous effectuez des opérations, vous devez utiliser les
propriétés ScaleWidth (largeur), ScaleHeight (la hauteur), ScaleLeft(Limite gauche) et ScaleTop (limite haute).
Il existe plusieurs propriétés pour récupérer les dimensions d'un état ou d'une section :
Mais attention, suivant l'endroit où vous placez le code, l'effet ne sera pas le même.
VBA
Private Sub Report_Page()
Me.Line (0, 0)-(Me.ScaleWidth, Me.ScaleHeight), vbBlack, B
End Sub
VBA
Private Sub ZoneEntêtePage_Format(Cancel As Integer, FormatCount As Integer)
-6-
Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à
l'obtention préalable de l'autorisation de l'auteur.
http://starec.developpez.com//tuto/ecriredessineretats/
Apprendre à Ecrire et Dessiner dans les états Access par Philippe JOCHMANS
VBA
Me.Line (0, 0)-(Me.ScaleWidth, Me.ScaleHeight), vbBlack, B
End Sub
Pourtant comme vous le constatez l'instruction de dessin est la même, mais la procédure où vous placez le code
a son importance.
VBA
Me.ScaleTop = -2000
Me.ScaleLeft = -2000
L'origine sera décalée de 2000 unités vers le bas (ScaleTop) et de 2000 unités vers la droite (ScaleLeft).
Ainsi si vous voulez tracer un rectangle dont le point d'origine est (0,0) sur une page.
En utilisant les instructions ci-dessous, celui-ci commencera aux coordonnées (2000,2000) alors que dans
l'instruction de dessin on aura (0,0).
II-F - Ecrire
Nous pouvons écrire du texte dans un état, ce chapitre à pour but de vous montrer les différentes méthodes pour
écrire.
II-F-1 - Print
La méthode Print va permettre d'écrire du texte dans un état (à ne pas confondre avec l'évènement Print).
L'exemple suivant va écrire : Bienvenue sur DVP dans la section entête de page :
VBA
Private Sub ZoneEntêtePage_Format(Cancel As Integer, FormatCount As Integer)
Me.Print "Bienvenue sur DVP"
End Sub
Vous pouvez utiliser plusieurs fois cette méthode pour imprimer différents textes.
Cette méthode peut être agrémentée de deux paramètres, la virgule et le point virgule.
Si vous mettez une virgule la deuxième partie du texte sera décalée vers la droite dans une autre zone d'impression.
VBA
Private Sub ZoneEntêtePage_Format(Cancel As Integer, FormatCount As Integer)
Me.Print "Bienvenue ",
Me.Print "sur DVP"
-7-
Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à
l'obtention préalable de l'autorisation de l'auteur.
http://starec.developpez.com//tuto/ecriredessineretats/
Apprendre à Ecrire et Dessiner dans les états Access par Philippe JOCHMANS
VBA
End Sub
Si vous mettez un point virgule la deuxième partie du texte sera accolée à la première.
VBA
Private Sub ZoneEntêtePage_Format(Cancel As Integer, FormatCount As Integer)
Me.Print "Bienvenue ";
Me.Print "sur DVP"
End Sub.
Si vous ne mettez rien, la deuxième partie du texte sera décalée vers le bas.
VBA
Private Sub ZoneEntêtePage_Format(Cancel As Integer, FormatCount As Integer)
Me.Print "Bienvenue "
Me.Print "sur DVP"
End Sub
II-F-2 - Police
Vous pouvez également agrémenter votre texte des attributs classiques d'une police.
VBA
Private Sub ZoneEntêtePage_Format(Cancel As Integer, FormatCount As Integer)
With Me
.FontName = "Courrier New" ' nom de la police
.FontBold = True ' si True, la police est en gras
.FontItalic = True ' si True, la police est en italique
.FontSize = 12 ' indique la taille de la police
.FontUnderline = True ' si True la police est soulignée
.ForeColor = vbRed ' indique la couleur d'écriture de la police
.Print "Bonjour"
End With
End Sub
Ce code écrira Bonjour en rouge avec la police Courrier New d'une taille de 12, en gras, en italique et souligné.
Tant que vous ne changez pas les attributs d'une police, les précédents seront pris en compte.
Vous pouvez également positionner votre texte où vous voulez grâce aux propriétés CurrentX pour un positionnement
horizontal et CurrentY pour un positionnement vertical.
-8-
Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à
l'obtention préalable de l'autorisation de l'auteur.
http://starec.developpez.com//tuto/ecriredessineretats/
Apprendre à Ecrire et Dessiner dans les états Access par Philippe JOCHMANS
Le code suivant positionnera le mot Bonjour dans la section entête de page à 1000 twips du bord haut de cette section
et à 1000 twips par rapport au bord gauche de celle-ci.
VBA
Private Sub ZoneEntêtePage_Format(Cancel As Integer, FormatCount As Integer)
With Me
.ScaleMode = 1 'l'unité utilisée est donc le twips
.CurrentX = 1000
.CurrentY = 1000
.Print "Bonjour"
End With
End Sub
Ces deux méthodes permettent de récupérer la largeur (TextWidth) et la hauteur (TextHeight) d'un texte qui doit
être imprimé dans un état.
L'unité de la valeur récupérée est celle qui a été déterminée par la propriété ScaleMode.
Il est important de bien déterminer les attributs de la police avant de récupérer par ces fonctions la largeur et la
hauteur de la chaîne à écrire, car celles-ci sont calculées en fonction de ces attributs.
L'exemple suivant va nous permettre de centrer en hauteur et en largeur le mot " Bonjour " dans la section entête
de page de notre état, et de réaliser un cadre autour.
VBA
Private Sub ZoneEntêtePage_Format(Cancel As Integer, FormatCount As Integer)
' centrage d'un texte dans une section
With Me
.FontName = "Arial"
.FontSize = 48
.FontBold = True
.CurrentX = (Me.ScaleWidth - Me.TextWidth("Bonjour")) / 2 ' centrage en X
.CurrentY = (Me.ScaleHeight - Me.TextHeight("Bonjour")) / 2 ' centrage en Y
End With
Me.Print "Bonjour"
' réalisation d'un cadre
Me.Line (0, 0)-(Me.ScaleWidth, Me.ScaleHeight), vbBlack, B
End Sub
Et voilà un beau titre parfaitement centré sur votre page, sans aucun calcul ou de manipulation d'un contrôle dans
l'état en mode conception.
II-G - Dessiner
Avant d'apprendre à dessiner, nous allons déterminer comment nous allons dessiner (largeur de trait, type de trait,
remplissage, couleurs).
Cette propriété va permettre de déterminer la largeur des traits des dessins (pour le dessin de lignes, de cercles,
et de points).
L'unité de cette propriété est le pixel, il faudra donc faire une conversion pour utiliser une autre unité.
-9-
Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à
l'obtention préalable de l'autorisation de l'auteur.
http://starec.developpez.com//tuto/ecriredessineretats/
Apprendre à Ecrire et Dessiner dans les états Access par Philippe JOCHMANS
Cette propriété va permettre de déterminer le type de ligne, elle s'appliquera uniquement aux méthodes permettant
de dessiner des lignes (Line) et des cercles (Circle).
Le code ci-dessous va vous permettre de visualiser sur un état les différents types de traits.
VBA
Private Sub Report_Page()
' ======================================================================================
' Procedure : Module :Report_rpt_DrawStyle // Procédure : Report_Page
' DateTime : 30/10/2007 19:34
' Auteur : Starec - Philippe JOCHMANS - http://starec.developpez.com
' Description : Ce code va permettre de visualiser les différents
' type de lignes (DrawStyle)
'=======================================================================================
' déclaration
Dim i As Byte
Cette propriété va vous permettre de déterminer le type de remplissage, elle s'appliquera uniquement aux méthodes
permettant de dessiner des lignes (Line) et des cercles (Circle).
• 0 - Opaque
• 1 - (Valeur par défaut) Transparent
• 2 - Trait horizontal
• 3 - Trait vertical
• 4 - Diagonale montante
• 5 - Diagonale descendante
• 6 - Croix
- 10 -
Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à
l'obtention préalable de l'autorisation de l'auteur.
http://starec.developpez.com//tuto/ecriredessineretats/
Apprendre à Ecrire et Dessiner dans les états Access par Philippe JOCHMANS
• 7- Diagonales croisées
Le code ci-dessous va vous permettre de visualiser sur un état les différents types de remplissage.
VBA
Private Sub Report_Page()
' ======================================================================================
' Procedure : Module :Report_rpt_FillStyle // Procédure : Report_Page
' DateTime : 31/10/2007 05:33
' Auteur : Starec - Philippe JOCHMANS - http://starec.developpez.com
' Description : Ce code va vous permettre de visualiser les différentes types de
' remplissage
'=======================================================================================
' déclaration
Dim i As Byte
' dessin
Me.CurrentY = 1000
For i = 0 To 3
Me.FillStyle = i
Me.Circle (1000, Me.CurrentY), 500, vbBlack
Me.CurrentY = Me.CurrentY + 1500
Next i
Me.CurrentY = 1000
For i = 4 To 7
Me.FillStyle = i
Me.Circle (4000, Me.CurrentY), 500, vbBlack
Me.CurrentY = Me.CurrentY + 1500
Next i
End Sub
Cette propriété va vous permettre de déterminer la couleur de remplissage, elle s'appliquera uniquement aux
méthodes permettant de dessiner des lignes (Line) et des cercles (Circle).
La valeur de cette couleur sera un entier de type Long ou une constante de couleur (VbWhite, VbRes, etc.) ou bien
un code RGB.
VBA
Private Sub Report_Page()
' ======================================================================================
' Procedure : Module :Report_rpt_FillColor // Procédure : Report_Page
' DateTime : 31/10/2007 05:33
' Auteur : Starec - Philippe JOCHMANS - http://starec.developpez.com
- 11 -
Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à
l'obtention préalable de l'autorisation de l'auteur.
http://starec.developpez.com//tuto/ecriredessineretats/
Apprendre à Ecrire et Dessiner dans les états Access par Philippe JOCHMANS
VBA
' Description : Ce code va vous permettre de visualiser la couleur de remplissage
'=======================================================================================
' déclaration
Dim i As Byte
' dessin
Me.CurrentY = 1000
Me.FillColor = vbRed
For i = 0 To 3
Me.FillStyle = i
Me.Circle (1000, Me.CurrentY), 500, vbYellow
Me.CurrentY = Me.CurrentY + 1500
Next i
Me.CurrentY = 1000
Me.FillColor = vbGreen
For i = 4 To 7
Me.FillStyle = i
Me.Circle (4000, Me.CurrentY), 500, vbBlue
Me.CurrentY = Me.CurrentY + 1500
Next i
End Sub
Ce concept est un peu difficile à appréhender, en fait il s'agit de connaître l'interaction entre les éléments qui
composent un dessin, comment se superposent les différents éléments.
Voici la liste des paramètres, mais pour mieux appréhender graphiquement ce qui se passe, nous allons faire un
exemple pour chaque.
Pour cela nous allons utiliser le code suivant : Celui-ci crée 2 cercles (un rouge et un bleu), et écrit un texte en noir.
Ce qui nous permettra de voir comment agit la méthode DrawMode
VBA
Private Sub Report_Page()
' ======================================================================================
' Procedure : Module :Report_rpt_DrawMode // Procédure : Report_Page
' DateTime : 31/10/2007 05:55
' Auteur : Starec - Philippe JOCHMANS - http://starec.developpez.com
' Description : Exemple d'utilisation de DrawMode
'=======================================================================================
' dessin
With Me
.CurrentY = 1000
.FillStyle = 0
.DrawMode = 1 ' le parametre qui sera changé
.FontSize = 12
.ForeColor = vbBlack
- 12 -
Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à
l'obtention préalable de l'autorisation de l'auteur.
http://starec.developpez.com//tuto/ecriredessineretats/
Apprendre à Ecrire et Dessiner dans les états Access par Philippe JOCHMANS
VBA
End With
Me.Print "Utilisation de DrawMode (10) avec des graphiques"
Me.FillColor = vbRed
Me.Circle (2000, Me.CurrentY), 900, vbBlack
Me.FillColor = vbBlue
Me.Circle (2500, Me.CurrentY), 900, vbBlack
Me.CurrentY = Me.CurrentY + 1500
End Sub
1 - Crayon noir.
- 13 -
Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à
l'obtention préalable de l'autorisation de l'auteur.
http://starec.developpez.com//tuto/ecriredessineretats/
Apprendre à Ecrire et Dessiner dans les états Access par Philippe JOCHMANS
7 - Combinaison des couleurs du crayon et de la couleur de l'affichage, à l'exclusion des couleurs communes aux
deux (XorPen).
11 - Aucun effet - la sortie reste inchangée. En fait, ce paramètre désactive le dessin (Nop).
- 14 -
Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à
l'obtention préalable de l'autorisation de l'auteur.
http://starec.developpez.com//tuto/ecriredessineretats/
Apprendre à Ecrire et Dessiner dans les états Access par Philippe JOCHMANS
16 - Crayon blanc
Malgré les exemples, cette propriété est loin d'être parlante. Son utilisation est très marginale.
Vous ne pouvez pas déterminer des modes de dessin différents dans une section d'un état,
par contre vous pouvez tout à fait mettre un mode de dessin différent d'une section à l'autre.
II-G-6 - Line
Cette méthode va permettre de dessiner une ligne, un rectangle vide ou un rectangle plein.
Syntaxe :
- 15 -
Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à
l'obtention préalable de l'autorisation de l'auteur.
http://starec.developpez.com//tuto/ecriredessineretats/
Apprendre à Ecrire et Dessiner dans les états Access par Philippe JOCHMANS
• Step : ce mot va préciser si les coordonnées qui suivent sont à prendre par rapport à l'origine de la section
(coordonnées absolues) ou par rapport à la position actuelle du curseur (coordonnées relatives).
• xD : Coordonnée horizontale du point de départ du tracé .
• yD : Coordonnée verticale du point de départ du tracé.
• xF : Coordonnée horizontale du point d'arrivée du tracé.
• yF : Coordonnée verticale du point d'arrivée du tracé.
• Couleur : Couleur du tracé de type entier long. Vous pouvez utiliser une couleur définie à l'aide de la fonction
RGB(), un entier long ou bien une constance VB (vbBlack, vbRed, etc..).
• B : Indique que vous allez tracer un rectangle, sans cette lettre, vous allez tracer une ligne dont le début sera
en xD et yD et la fin en xF et yF (cela correspond donc à la diagonale de ce rectangle).
• F : Indique si le rectangle est rempli de la couleur définie en paramètre. Cette propriété n'est pas à utilisée en
case de l'utilisation de FillStyle et FillColor
Pour dessiner un rectangle avec un bord d'une couleur différente vous pouvez :
• Créer un rectangle plein avec la couleur en paramètre, et un rectangle vide (sans le paramètre F) avec une
autre couleur en paramètre.
• Utiliser les propriétés FillColor et FillStyle.
Voici quelques exemples, il s'agit d'une copie d'écran d'un état qui a été entièrement créé par du code VBA.
Vous noterez que dans les deux dernières instructions il n'y a pas de coordonnées de départ,
c'est donc la position du curseur à la fin de la ligne précédente qui est prise en compte.
- 16 -
Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à
l'obtention préalable de l'autorisation de l'auteur.
http://starec.developpez.com//tuto/ecriredessineretats/
Apprendre à Ecrire et Dessiner dans les états Access par Philippe JOCHMANS
II-G-7 - Circle
Syntaxe :
• Step : Cela indique que les coordonnées du centre du cercle (x,y) seront relatives par rapport à la position du
curseur.
• x : Coordonnées horizontale du centre du cercle ou de l'ellipse (Obligatoire).
• y : Coordonnées verticale du centre du cercle ou de l'ellipse (Obligatoire).
• Rayon : Rayon du cercle ou de l'ellipse (Obligatoire).
• Couleur : Couleur de tracé du cercle ou de l'ellipse. Vous pouvez utiliser une couleur définie à l'aide de la
fonction RGB(), un entier long ou bien une constance VB (vbBlack, vbRed, etc..) (Facultatif).
• Début : Il s'agit du point de départ du cercle. Cette valeur est un nombre réel simple, allant de -2 PI Radians à
2 PI Radians (Facultatif en cas de cercle entier).
• Fin : Il s'agit du point de fin du cercle. Cette valeur est un nombre réel simple, allant de -2 PI Radians à 2 PI
Radians (Facultatif en cas de cercle entier).
• Aspect : Il s'agit du rapport entre largeur/hauteur qui permet de déterminer la forme de l'ellipse.
VBA
Private Sub ZoneEntêtePage_Format(Cancel As Integer, FormatCount As Integer)
' Dessin d'un cadre entourant la zone entête de page
Me.Line (0, 0)-(Me.ScaleWidth, Me.ScaleHeight), vbBlack, B
' dessin d'un cercle dont le haut, le bas, la gauche, la droite touchent le cadre
Me.Circle (Me.ScaleWidth / 2, Me.ScaleHeight / 2), Me.ScaleWidth / 2, vbBlack, , ,
Me.ScaleHeight / Me.ScaleWidth
End Sub
VBA
Private Sub ZoneEntêtePage_Format(Cancel As Integer, FormatCount As Integer)
' Pacman
Const Pi = 3.14159265359
' le fond jaune
Me.FillColor = vbYellow
Me.FillStyle = 0
' la bouche blanche
Me.Circle (1000, 1000), 500, vbWhite
Me.FillColor = vbWhite
Me.FillStyle = 0
Me.Circle (1000, 1000), 500, vbWhite, -(2 * Pi - Pi / 5), -Pi / 5
' l'oeil
Me.Circle (1100, 700), 50, vbWhite
End Sub
- 17 -
Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à
l'obtention préalable de l'autorisation de l'auteur.
http://starec.developpez.com//tuto/ecriredessineretats/
Apprendre à Ecrire et Dessiner dans les états Access par Philippe JOCHMANS
II-G-8 - PSet
Syntaxe :
Pset [Step](x,y),[couleur]
• Step : Cela indique que les coordonnées du point (x,y) seront relatives par rapport à la position du curseur.
• X : Position du point sur l'axe horizontal (Obligatoire).
• Y : Position du point sur l'axe vertical (Obligatoire).
• Couleur : Couleur du point
Exemple de code :
VBA
Private Sub Report_Page()
' sinusoide
Me.DrawWidth = 20
Dim i As Integer
For i = 0 To 5000 Step 1
PSet (i, 5000 + (Sin(i * 3.14) * 1000)), vbBlack
Next i
End Sub
III - EXEMPLES
Cette partie a pour but de vous montrer différents types d'utilisations possibles de méthodes de dessin et d'écriture
dans les états Access.
- 18 -
Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à
l'obtention préalable de l'autorisation de l'auteur.
http://starec.developpez.com//tuto/ecriredessineretats/
Apprendre à Ecrire et Dessiner dans les états Access par Philippe JOCHMANS
Les rectangles et zones de texte des états Access ont des coins à angles droits. Ce que nous allons voir ici c'est
comment réaliser un rectangle avec des coins arrondis.
En fait un rectangle aux coins arrondis est composé de 4 droites et de 4 quarts de cercles.
Le code suivant va vous permettre de créer un rectangle arrondi sur l'entête d'un état, dont le rayon sera de 200
twips, et en plus on va mettre un titre à l'intérieur en le centrant.
VBA
Private Sub ZoneEntêtePage_Format(Cancel As Integer, FormatCount As Integer)
' ======================================================================================
' Procedure : Module :Report_rpt_RoundRectangle // Procédure : ZoneEntêtePage_Format
' DateTime : 01/11/2007 08:54
' Auteur : Starec - Philippe JOCHMANS - http://starec.developpez.com
' Description : Nous allons dessiner un rectangle au coin arrondi sur l'entête de la page
' celui-ci aura un rayon de 200 twips dans les coins
' Avec un texte centrer
'=======================================================================================
' variables
Dim strTexte As String
' constantes
Const Pi = 3.14159265359
Voilà le résultat :
- 19 -
Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à
l'obtention préalable de l'autorisation de l'auteur.
http://starec.developpez.com//tuto/ecriredessineretats/
Apprendre à Ecrire et Dessiner dans les états Access par Philippe JOCHMANS
Maintenant nous allons créer une routine qui nous permettra d'entourer une zone de plusieurs zones de texte ou
d'étiquettes d'un rectangle dont nous pourrons gérer un à un les coins.
VBA
Public Sub RoundRectangle(rpt As Report, ctrlDebut As Control, ctrlFin As Control, _
blnHautGauche As Boolean, blnHautDroit As Boolean, _
blnBasGauche As Boolean, blnBasDroit As Boolean, _
lngRayon As Long, lngDecalage As Long, lngColorTrait As Long)
' ======================================================================================
' Procedure : Module :Routiones // Procédure : RoundRectangle
' DateTime : 01/11/2007 18:11
' Auteur : Starec - Philippe JOCHMANS - http://starec.developpez.com
' Description : Cette procédure va permettre de réaliser un groupe de rectangles avec
' pleins d'options
' rpt : nom de l'état
' ctrlDebut : nom du contrôle le plus en haut à gauche
' ctrlFin : nom du contrôle le plus en haut à droite
' blnBasHautGauche : si true, l'angle est arrondi et ainsi de suite pour les autres
' lngRayon : rayon de l'arrondi
' lngDecalage : décalage du cadre par rapport au ctrl de début et de fin
' lngColorTrait : Couleur du trait
'=======================================================================================
- 20 -
Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à
l'obtention préalable de l'autorisation de l'auteur.
http://starec.developpez.com//tuto/ecriredessineretats/
Apprendre à Ecrire et Dessiner dans les états Access par Philippe JOCHMANS
VBA
rpt.Line (lngLeft + lngWidth - lngRayon, lngTop)-(lngLeft + lngWidth, lngTop),
lngColorTrait
rpt.Line (lngLeft + lngWidth, lngTop)-(lngLeft + lngWidth, lngTop + lngRayon),
lngColorTrait
End If
If blnBasDroit Then ' si le bas droit est arrondi
rpt.Circle (lngLeft + lngWidth - lngRayon, lngTop + lngHeight - lngRayon), lngRayon,
lngColorTrait, PI + PI / 2, 0
Else
rpt.Line (lngLeft + lngWidth, lngTop + lngHeight - lngRayon)-(lngLeft + lngWidth,
lngTop + lngHeight), lngColorTrait
rpt.Line (lngLeft + lngWidth, lngTop + lngHeight)-(lngLeft + lngWidth - lngRayon,
lngTop + lngHeight), lngColorTrait
End If
If blnBasGauche Then ' si le bas gauche est arrondi
rpt.Circle (lngLeft + lngRayon, lngTop + lngHeight - lngRayon), lngRayon, lngColorTrait,
PI, PI + PI / 2
Else
rpt.Line (lngLeft, lngTop + lngHeight - lngRayon)-(lngLeft, lngTop + lngHeight),
lngColorTrait
rpt.Line (lngLeft, lngTop + lngHeight)-(lngLeft + lngRayon, lngTop + lngHeight),
lngColorTrait
End If
Nous allons prendre pour exemple un relevé de note d'un élève, ce relevé comporte une entête pour les colonnes,
mais malheureusement celle-ci est droite et triste.
D'abord nous recentrons le texte qui se trouve dans l'étiquette " Matière ", et nous supprimons les traits des étiquettes.
VBA
Private Sub ZoneEntêtePage_Format(Cancel As Integer, FormatCount As Integer)
' on entoure les entêtes des colonnes par un grand carré avec des angles arrondis
Call RoundRectangle(Me, Me.lblMatière,
Me.lblRemarque, True, True, False, False, 100, 50, vbBlack)
End Sub
On obtient :
- 21 -
Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à
l'obtention préalable de l'autorisation de l'auteur.
http://starec.developpez.com//tuto/ecriredessineretats/
Apprendre à Ecrire et Dessiner dans les états Access par Philippe JOCHMANS
Mais il nous manque la séparation entre les colonnes, on va donc ajouter les lignes suivantes dans la même
procédure.
VBA
' on remet les traits des colonnes, il faut penser à inclure le décalage de la routine RoundRectangle
Me.Line (Me.lblMinClasse.Left, Me.lblMinClasse.Top - 50)- _
(Me.lblMinClasse.Left, Me.lblMinClasse.Top + lblMinClasse.Height + 50), vbBlack
Me.Line (Me.lblMoyenneClasse.Left, Me.lblMoyenneClasse.Top - 50)- _
(Me.lblMoyenneClasse.Left, Me.lblMoyenneClasse.Top +
lblMoyenneClasse.Height + 50), vbBlack
Me.Line (Me.lblMaxClasse.Left, Me.lblMaxClasse.Top - 50)- _
(Me.lblMaxClasse.Left, Me.lblMaxClasse.Top + lblMaxClasse.Height + 50), vbBlack
Me.Line (Me.lblMoyenneEleve.Left, Me.lblMoyenneEleve.Top - 50)- _
(Me.lblMoyenneEleve.Left, Me.lblMoyenneEleve.Top +
lblMoyenneEleve.Height + 50), vbBlack
Me.Line (Me.lblRemarque.Left, Me.lblRemarque.Top - 50)- _
(Me.lblRemarque.Left, Me.lblRemarque.Top + lblRemarque.Height + 50), vbBlack
Cela pour vous montrer que l'on peut combiner les cercles, les traits
Pour mettre en évidence des données, il y a plusieurs moyens, le plus connu est la mise en forme conditionnelle,
dont voici un excellent article de Christophe Warin : http://warin.developpez.com/access/mfc/.
Le code suivant va vous permettre de mettre en surbrillance, les notes d'un élève inférieures à 10.
VBA
Private Sub Détail_Format(Cancel As Integer, FormatCount As Integer)
' ==== surbrillance =====
If Me.sngMoyEleve.Value < 10 Then ' on teste la valeur dans le champ sngMoyEleve
' la note est infèrieure à 10
' on met la police du texte en blanc
Me.sngMoyEleve.ForeColor = vbWhite
' on dessine un cadre noir sur la zone de texte sngMoyEleve avec les mêmes dimensions
Me.Line (Me.sngMoyEleve.Left, Me.sngMoyEleve.Top)- _
(Me.sngMoyEleve.Left + Me.sngMoyEleve.Width, Me.sngMoyEleve.Top +
Me.sngMoyEleve.Height), vbBlack, BF
Else
' on met la police du texte en noir
Me.sngMoyEleve.ForeColor = vbBlack
End If
End Sub
- 22 -
Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à
l'obtention préalable de l'autorisation de l'auteur.
http://starec.developpez.com//tuto/ecriredessineretats/
Apprendre à Ecrire et Dessiner dans les états Access par Philippe JOCHMANS
Vous pouvez réaliser la même chose en jouant sur la propriété backcolor de la zone de texte
La mise en forme conditionnelle vous permet de changer les couleurs d'une zone de texte à mettre en évidence.
Cependant, tout le monde ne dispose pas d'imprimantes couleurs, avec cet exemple vous pourrez voir que l'on peut
mettre en évidence les données autrement.
VBA
Private Sub Détail_Format(Cancel As Integer, FormatCount As Integer)
' ===== Ellipse =====
If Me.sngMoyEleve.Value < 10 Then
Me.Circle (Me.sngMoyEleve.Left + Me.sngMoyEleve.Width / 2, Me.sngMoyEleve.Height / 2), _
Me.sngMoyEleve.Width / 2, vbBlack, , , Me.sngMoyEleve.Height /
Me.sngMoyEleve.Width
End If
End Sub
III-C - Dégradés
Nous avons vu dans la partie cours de cet article comment remplir un carré ou un cercle avec une couleur. Hors il
est aussi possible de faire des dégradés.
- 23 -
Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à
l'obtention préalable de l'autorisation de l'auteur.
http://starec.developpez.com//tuto/ecriredessineretats/
Apprendre à Ecrire et Dessiner dans les états Access par Philippe JOCHMANS
VBA
Public Sub Degrade(rpt As Report, lngLeft As Long, lngTop As Long, _
lngWidth As Long, lngHeight As Long, bytQteDegrade As Byte)
' ======================================================================================
' Procedure : Module :Routiones // Procédure : degrade
' DateTime : 03/11/2007 07:14
' Auteur : Starec - Philippe JOCHMANS - http://starec.developpei.com
' Description : Cette procédure va vous permettre de réaliser un dégradé
'=======================================================================================
VBA
Private Sub Report_Page()
Call Degrade(Me, 500, 200, 2000, 2000, 255)
End Sub
Et visuellement :
Vous trouverez dans la page personnelle d'Arkham46 : http://arkham46.developpez.com/ une base exemple.
Cette base comporte une table Tdepartement qui reprend des coordonnées pour dessiner le territoire Français.
Le code dessinera la carte de la France, et une routine permettra de mettre un point rouge dans un département.
VBA
Private Sub Report_Page()
' ======================================================================================
' Procedure : Module :Report_rpt_Carte // Procédure : Report_Page
' DateTime : 05/11/2007 19:35
- 24 -
Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à
l'obtention préalable de l'autorisation de l'auteur.
http://starec.developpez.com//tuto/ecriredessineretats/
Apprendre à Ecrire et Dessiner dans les états Access par Philippe JOCHMANS
VBA
' Auteur : Starec - Philippe JOCHMANS - http://starec.developpez.com
' Description : Dessin de la carte de France.
' Vous trouverez la table pour le dessin de la carte sur la base
' exemple du site d'Arkham46 : http://arkham46.developpez.com/
'=======================================================================================
Me.Line (15 * tabDpt(i), 15 * tabDpt(i + 1))-(15 * tabDpt(i + 2), 15 * tabDpt(i + 3)), vbBlack
If i = UBound(tabDpt()) - 3 Then
Exit For
End If
Next i
' on ferme le département
Me.Line (15 * tabDpt(i + 2), 15 * tabDpt(i + 3))-(15 * lngPremPointX, 15 *
lngPremPointY), vbBlack
rst.MoveNext
Wend
rst.Close
Set rst = Nothing
VBA
Public Sub SelectDpt(rpt As Report, strDpt As String)
' ======================================================================================
' Procedure : Module :Report_rpt_Carte // Procédure : SelectDpt
' DateTime : 03/11/2007 08:57
' Auteur : Starec - Philippe JOCHMANS - http://starec.developpez.com
' Description : Cette routine va permettre de dessiner un rond rouge dans
' le centre du département
'=======================================================================================
- 25 -
Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à
l'obtention préalable de l'autorisation de l'auteur.
http://starec.developpez.com//tuto/ecriredessineretats/
Apprendre à Ecrire et Dessiner dans les états Access par Philippe JOCHMANS
VBA
' ===== affectation =====
strSQL = "SELECT nom, points FROM Tdepartement WHERE points Is Not Null and nom ='" &
strDpt & "';"
Set rst = CurrentDb.OpenRecordset(strSQL)
rst.Close
Set rst = Nothing
End Sub
Et voici le résultat :
- 26 -
Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à
l'obtention préalable de l'autorisation de l'auteur.
http://starec.developpez.com//tuto/ecriredessineretats/
Apprendre à Ecrire et Dessiner dans les états Access par Philippe JOCHMANS
Dans les états les zones de texte ont une propriété intéressante, permettre que les champs soient auto extensibles
(CanGrow).
Cependant, cette propriété a des inconvénients. L'image suivante vous montre un défaut d'affichage de l'utilisation
de celle-ci.
Tous les champs ont la propriété auto extensible à oui, et les zones de texte sont entourées d'un cadre.
- 27 -
Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à
l'obtention préalable de l'autorisation de l'auteur.
http://starec.developpez.com//tuto/ecriredessineretats/
Apprendre à Ecrire et Dessiner dans les états Access par Philippe JOCHMANS
VBA
Private Sub Détail_Print(Cancel As Integer, PrintCount As Integer)
' ======================================================================================
' Procedure : Module :Report_rpt_ClasseNormal // Procédure : Détail_Print
' DateTime : 06/11/2007 05:17
' Auteur : Starec - Philippe JOCHMANS - http://starec.developpez.com
' Description : Sur l'évènement Print de la zone détail, nous allons refaire le cadrage
' des zones de texte
'=======================================================================================
Comme on le voit dans ce code, on entoure chaque zone de texte d'un cadre dont la hauteur sera celle de la zone
strRemarque qui s'étendra automatiquement.
IV - CONCLUSION
Les méthodes pour écrire ou dessiner dans les états Access permettent essentiellement d'améliorer votre mise en
page.
Cependant, des exemples comme la réalisation de la carte de France vous montrent que l'on peut éditer des dessins
qui ne sont pas des gadgets.
V - REMERCIEMENTS
- 28 -
Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à
l'obtention préalable de l'autorisation de l'auteur.
http://starec.developpez.com//tuto/ecriredessineretats/
Apprendre à Ecrire et Dessiner dans les états Access par Philippe JOCHMANS
Je remercie aussi Arkahm46 pour sa superbe table qui m'a permis de vous montrer comment dessiner la carte de
France.
- 29 -
Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à
l'obtention préalable de l'autorisation de l'auteur.
http://starec.developpez.com//tuto/ecriredessineretats/