Plus loin avec MS Graph
Découvrez d'autres propriétés de MS Graph
Date de publication : 02/02/2011. Date de mise à jour : 06/02/2011.
Par
Fabrice Constans (http://loufab.developpez.com) (Blog)
Ce cours est le deuxième consacré à la programmation de MS Graph. La première partie nous a donné un
bref aperçu du composant MS Graph. Ce cours va être l'occasion d'aller plus loin avec ce composant essentiel de Microsoft.
I. Introduction
I-A. Avertissement
II. Les objets
III. Police, taille et style
IV. Les séries de données
V. Les étiquettes de données
V-A. Points
VI. Fond et plancher
VII. Grilles
VIII. Gestion de la 3D
VIII-A. Précaution
VIII-B. Perspective
VIII-C. Elevation
VIII-D. Rotation
VIII-E. Rotation, Elevation, Perspective
IX. Légende
IX-A. Les entrées
X. Particularité : Les propriétés Has
XI. Conclusion
Remerciements
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.
| ChartArea |
Dim vlArea As Graph.ChartArea
|
Puis dans la méthode « Initialiser ».
| ChartArea |
Set vlArea = vlChart.ChartArea
|
Puis la procédure qui nous permettra de régler la police.
| Font |
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.
| Font |
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.
| SeriesCollection |
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
.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.
| SeriesCollection |
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.
| HasDataLabels |
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.
| HasDataLabel |
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.
| DataLabel |
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 |
.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.
| Walls |
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).
| Floor |
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.
| HasMajorGridlines |
Public Sub gGridLines()
vlChart.Axes(xlValue).HasMajorGridlines = False
vlChart.Axes(xlCategory).HasMajorGridlines = False
End Sub
|
Le code suivant exploite la totalité des Gridlines.
| 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.
| 3D |
Public Sub g3dRotate(pPerspective As Integer, pElevation As Integer, pRotation As Integer)
With vlChart
.RightAngleAxes = False
.Perspective = pPerspective
.Elevation = pElevation
.Rotation = pRotation
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.
| HasLengend |
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.
| Shadow |
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.
| LegendEntries |
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.


Copyright © 2011 Fabrice CONSTANS. 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.
Cette page est déposée.