I. Introduction▲
La première partie de cette série d'articles nous a permis de faire une rapide prise en main du composant MS Graph. Dans cette partie nous allons nous intéresser à la mise en forme de notre graphique.
I-A. Avertissement▲
L'utilisation d'un objet MS Graph nécessite qu'il soit toujours actif. Ce cours étant composé d'exercices distincts, il peut arriver que le code soit réinitialisé lors des modifications successives du code. Dans ce cas le message suivant apparaîtra.
Relancez le formulaire pour que les variables objets soient réinitialisées et que le code se remette à fonctionner.
II. Les objets▲
Pour aller plus loin dans l'exploration de MS Graph il est important de détailler les objets qu'il contient. L'image suivante indique les principaux objets à manipuler.
Notez que certains objets ne sont disponibles que pour des graphiques 3D.
III. Police, taille et style▲
Pour mettre en forme le texte nous disposons de l'objet Font qui comporte plusieurs propriétés. Il est disponible dans chaque objet comportant du texte (ChartTitle, Legend.). Pour notre exemple nous utiliserons l'objet ChartArea qui désigne la zone d'affichage du graphique. Il contient tous les autres objets du graphique qui hériteront de fait de la configuration.
Commencez par déclarer l'objet dans l'en-tête du module.
Dim
vlArea As
Graph.ChartArea
Puis dans la méthode « Initialiser ».
Set
vlArea =
vlChart.ChartArea
'la zone du graphique
Puis la procédure qui nous permettra de régler la police.
Public
Sub
pFont
(
vFontName As
String
, vFontStyle As
String
, vFontSize As
Integer
)
vlArea.Font.Name
=
vFontName
vlArea.Font.FontStyle
=
vFontStyle
vlArea.Font.Size
=
vFontSize
End
Sub
L'appel se fait simplement à partir de notre bouton « Modifier ».
vGraph.pFont "Calibri", "Normal", 10
La totalité des objets de type texte a hérité des nouveaux réglages. Ceci ne nous empêche pas de définir un autre réglage pour un objet contenu dans le graphique.
Repérez la procédure « AfficherTitrePrincipal » de la classe et ajoutez le code ci-dessous.
vlChart.ChartTitle.Text
=
vlTitrePrincipal
With
vlChart.ChartTitle.Font
.Name
=
"Broadway"
.Bold
=
True
.Size
=
14
.Color
=
RGB
(
0
, 128
, 255
)
End
With
Bold permet de mettre la police en gras et Color gère la couleur. Cette dernière accepte une valeur de type Long.
Consultez l'aide et la liste de l'auto complétion pour les autres propriétés disponibles.
IV. Les séries de données▲
SeriesCollection est une collection qui regroupe les séries de données. Chaque série de données est organisée suivant le plotby (voir le cours précédent).
Actuellement le graphique comprend la série intitulée Coût et celle intitulée Gain. Nous allons faire quelques manipulations de base pour nous familiariser avec cet objet.
Avant de créer la méthode vous devez inscrire dans les références de VBE la bibliothèque Microsoft Office xx.x Object Library. En effet nous allons devoir faire appel à des constantes contenues dans cette bibliothèque.
Dans la classe créez la méthode ci-dessous.
Public
Sub
ColoreGraphique
(
)
Dim
gSeries As
Graph.SeriesCollection
Dim
i As
Integer
Set
gSeries =
vlChart.SeriesCollection
For
i =
1
To
gSeries.Count
With
gSeries
(
i)
.Border.Weight
=
xlThin
.Border.LineStyle
=
xlAutomatic
.Fill.TwoColorGradient
msoGradientHorizontal, 1
.Fill.ForeColor.SchemeColor
=
2
+
i ' une couleur > à 3
.Fill.BackColor.SchemeColor
=
2
End
With
Next
Set
gSeries =
Nothing
End
Sub
Pas de difficulté pour la création de l'objet « gSeries » qui va nous servir à parcourir les séries de données. Vous pouvez utiliser une boucle For Each, cependant dans notre cas nous avons besoin d'un compteur c'est pour cette raison que j'ai opté pour une boucle de type For classique.
Info ! Les collections du modèle MS Graph démarrent à 1 et non à 0.
Comme son nom l'indique elle colore les barres de chaque série suivant la couleur définie dans la table des couleurs de MS Graph.
Border gère la bordure des barres. Deux propriétés permettent de régler le trait fin et le style de ligne en automatique.
Fill gère le remplissage de chaque barre de la série. TwoColorGradient met un effet de dégradé composé de deux couleurs. La couleur principale désignée par ForeColor est définie suivant une couleur supérieure à l'index numéro 3, donc ni noir ni blanc. La seconde, BackColor est définie en blanc (index numéro 2). Vous pouvez utiliser toutes les combinaisons que vous souhaitez.
En changeant les paramètres SchemeColor on peut obtenir de jolis dégradés.
Pour finir avec la gestion des couleurs la propriété TwoColorGradient accepte d'autres variations que le dégradé horizontal. Consultez l'aide Ms Graph pour en savoir plus.
Les constantes msoGradient sont contenues dans la bibliothèque que nous venons de déclarer.
V. Les étiquettes de données▲
Les DataLabels représentent les étiquettes de données qui peuvent être affichées au-dessus des barres. Généralement elles affichent la valeur, mais il faut savoir qu'elles peuvent également afficher la catégorie, la série, le pourcentage pour les types de graphiques qui acceptent cette donnée comme les camemberts par exemple.
L'exemple suivant affiche toutes les étiquettes de toutes les séries.
Public
Sub
AfficheLabels
(
)
Dim
gSeries As
Graph.SeriesCollection
Dim
gSerie As
Graph.Series
Set
gSeries =
vlChart.SeriesCollection
For
Each
gSerie In
gSeries
gSerie.HasDataLabels
=
True
Next
Set
gSeries =
Nothing
End
Sub
La propriété HasDataLabels indique si l'affichage des étiquettes est activé ou non. Rien ne nous empêche de les afficher pour une seule série.
vlChart.SeriesCollection.Item
(
1
).HasDataLabels
=
True
vlChart.SeriesCollection.Item
(
2
).HasDataLabels
=
False
V-A. Points▲
Collection sous-ensemble de la série, Points permet de faire référence à une position de la série. En l'occurrence une barre d'une série. Un exemple concret avec ce code qui permet de mettre une étiquette sur la sixième barre de la première série.
With
myChart.SeriesCollection
(
1
).Points
(
6
)
.HasDataLabel
=
True
End
With
Attention ! Les étiquettes ne doivent pas être affichées pour la première série.
On peut également contrôler le style d'affichage de l'étiquette.
Public
Sub
gGerePoint
(
)
Dim
gPoints As
Graph.Points
Set
gPoints =
vlChart.SeriesCollection
(
1
).Points
With
gPoints.Item
(
5
)
.HasDataLabel
=
True
.DataLabel.Font.ColorIndex
=
2
.DataLabel.Fill.ForeColor.SchemeColor
=
3
End
With
Set
gPoints =
Nothing
End
Sub
La couleur de la police est le blanc et le fond de l'étiquette est rouge.
Info ! Lorsque vous réglez la couleur de la police en blanc son fond est automatiquement mis en noir.
L'étiquette est remontée de 20 points (1 inch = 72 points).
.DataLabel.Top
=
.DataLabel.Top
-
20
VI. Fond et plancher▲
MS Graph est un produit complet. Il est donc normal que l'on puisse tout contrôler. Les murs, Walls et Floor, disposent des mêmes propriétés de mise en couleur. L'exemple suivant montre comment donner de la couleur à l'arrière-plan du graphique.
Public
Sub
gGereMurs
(
)
Dim
gWalls As
Walls
Set
gWalls =
vlChart.Walls
With
gWalls.Fill
.ForeColor.SchemeColor
=
9
.BackColor.SchemeColor
=
2
.TwoColorGradient
Style:=
msoGradientHorizontal, variant
:=
2
End
With
Set
gWalls =
Nothing
End
Sub
Deux couleurs sont assemblées avec un dégradé horizontal.
Pour le fond la méthode est la même pour l'objet Floor. Le code suivant permet de colorer le plancher en blanc (index numéro 2).
Public
Sub
gGerePlanche
(
)
Dim
gFloor As
Floor
Set
gFloor =
vlChart.Floor
gFloor.Interior.ColorIndex
=
2
Set
gFloor =
Nothing
End
Sub
VII. Grilles▲
L'aspect des grilles est également modifiable. Elles appartiennent aux axes xlValue et xlCategory toujours conditionnés par le PlotBy.
Il existe deux types de grilles, MajorGridlines et MinorGridlines, qui se paramètrent toutes les deux sur les deux axes.
Vous pouvez les rendre totalement invisibles en paramétrant leurs propriétés respectives HasMajorGridlines et HasMinorGridlines à False.
Public
Sub
gGridLines
(
)
vlChart.Axes
(
xlValue).HasMajorGridlines
=
False
vlChart.Axes
(
xlCategory).HasMajorGridlines
=
False
End
Sub
Le code suivant exploite la totalité des Gridlines.
With
vlChart.Axes
(
xlValue)
.HasMajorGridlines
=
True
.MajorGridlines.Border.Color
=
RGB
(
0
, 0
, 255
)
.MajorGridlines.Border.LineStyle
=
xlContinuous
.HasMinorGridlines
=
True
.MinorGridlines.Border.LineStyle
=
xlDot
End
With
With
vlChart.Axes
(
xlCategory)
.HasMajorGridlines
=
True
.MajorGridlines.Border.Color
=
RGB
(
0
, 0
, 255
)
.MajorGridlines.Border.LineStyle
=
xlContinuous
.HasMinorGridlines
=
True
.MinorGridlines.Border.LineStyle
=
xlDot
End
With
Border représente la ligne affichée. Sa propriété Color permet d'en définir la couleur comme déjà vu précédemment. LineStyle dont les paramètres sont les constantes de type xlLineStyle définit le style de ligne en pointillé, tiret.
L'exemple précédent est bien trop chargé pour permettre une lecture efficace du graphique.
VIII. Gestion de la 3D▲
Le graphique de type 3D n'en a pas que le nom, en effet comme dans Excel on peut agir sur les trois axes.
VIII-A. Précaution▲
Avant de modifier ces propriétés, il est conseillé de noter les valeurs d'origine. En effet une fois modifiées celles-ci seront perdues.
VIII-B. Perspective▲
D'une valeur de 0 à 100. Elle n'est disponible que si la propriété RightAngleAxes est à Faux. Ceci est logique puisque RightAngleAxes indique que les axes Catégorie et Valeur sont à angle droit.
A 0 il n'y a aucune perspective. Le plancher, Floor, apparaît comme une ligne horizontale.
VIII-C. Elevation▲
Comprise entre -90 et +90. Elle indique la position de l'oeil dans le plan vertical.
- -90 : le graphique est vu de dessous.
- 0 : vous êtes en face.
- +90 : vous vous tenez au dessus.
VIII-D. Rotation▲
Comprise entre 0 et 360°. Le graphique tourne autour d'un axe vertical.
- 0° ou 360° : vous êtes face à lui.
- 90° : le mur de l'axe des valeurs, xlValue, est à l'arrière-plan.
- 190° : vous le regardez de dos. Dans cette position le fond, Walls, est au premier plan.
- 270° : le mur de l'axe des valeurs, xlValue, est au premier plan.
VIII-E. Rotation, Elevation, Perspective▲
L'exemple suivant met en lumière les propriétés agissant sur la vue 3D du graphique.
Public
Sub
g3dRotate
(
pPerspective As
Integer
, pElevation As
Integer
, pRotation As
Integer
)
With
vlChart
.RightAngleAxes
=
False
.Perspective
=
pPerspective ' Vue en Perspective
.Elevation
=
pElevation ' Position des yeux
.Rotation
=
pRotation ' Rotation sur un axe vertical
End
With
End
Sub
Un petit test avec les valeurs suivantes.
vGraph.g3dRotate
50
, 50
, 20
J'espère que vous n'avez pas le vertige.
Pour revenir à une représentation classique réglez la propriété RightAngleAxes à Vrai et réattribuez les valeurs que vous avez dû conserver conformément aux conseils donnés en début de chapitre.
IX. Légende▲
La légende, Legend, est un objet complexe au même titre que l'objet ChartArea. Il contient la collection de lignes, LegendEntries, représentant chaque Série.
Comme pour ChartTitle la propriété HasTitle doit être paramétrée à Vrai.
Dans l'exemple suivant nous allons déplacer la légende à l'aide de la propriété Position.
Public
Sub
gManipulerLegende
(
)
Dim
vlegend As
Legend
Set
vlegend =
vlChart.Legend
vlChart.HasLegend
=
True
vlegend.Position
=
xlLegendPositionCorner
Set
vlegend =
Nothing
End
Sub
Les positions peuvent être définies grâce aux membres de xlLegendPosition.
La propriété Shadow permet de mettre un ombrage sur le cadre.
vlChart.HasLegend
=
True
vlegend.Position
=
xlLegendPositionCorner
vlegend.Shadow
=
True
Set
vlegend =
Nothing
Comme la plupart des objets, les caractères (Font), l'aspect intérieur (Fill) et le cadre (Border) peuvent être modifiés.
IX-A. Les entrées▲
Chaque ligne de la légende peut être manipulée indépendamment. Dans l'exemple suivant nous mettons la taille de la police de la deuxième ligne à taille+2.
vlChart.Legend.LegendEntries
(
2
).Font.Size
=
_ vlChart.Legend.LegendEntries
(
2
).Font.Size
+
2
Comme avec les autres collections d'objets l'indice commence à 1.
La méthode irréversible Delete permet de supprimer la ligne choisie.
X. Particularité : Les propriétés Has▲
Chaque propriété Has (HasTitle, HasLegend.) permet l'affichage et l'accès à un objet.
Il faut garder à l'esprit que lorsque la propriété est mise à Faux l'objet est détruit.
- Tenter d'y accéder provoque un message d'erreur.
- Les réglages effectués précédemment sont irrémédiablement perdus.
XI. Conclusion▲
Voici ce nouveau chapitre sur MS Graph achevé et comme vous avez pu le voir les possibilités de manipulation sont nombreuses et les objets sont plus ou moins complexes.
N'oubliez pas de consulter la documentation de l'objet MS Graph, la fenêtre des variables - en ayant pris soin d'instancier l'objet - et éventuellement l'enregistreur de macros d'Excel à la recherche de nouvelles propriétés et méthodes. Rendez-vous dans un prochain chapitre pour aller toujours plus loin dans les profondeurs de MS Graph.
Remerciements▲
Je remercie ClaudeLELOUP pour ses corrections et Philippe JOCHMANS pour ses remarques.