Plus loin avec MS Graph

Découvrez d'autres propriétés de MS Graph

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.


Commentez cet article : 2 commentaires

Article lu   fois.

L'auteur

Profil ProSite personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

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.

image

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.

image

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
Sélectionnez
Dim vlArea As Graph.ChartArea

Puis dans la méthode « Initialiser ».

ChartArea
Sélectionnez
Set vlArea = vlChart.ChartArea                   'la zone du graphique 

Puis la procédure qui nous permettra de régler la police.

Font
Sélectionnez
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 ».

 
Sélectionnez
    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
Sélectionnez
       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
Sélectionnez
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.

image

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.

image

En changeant les paramètres SchemeColor on peut obtenir de jolis dégradés.

image

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
Sélectionnez
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
Sélectionnez
 vlChart.SeriesCollection.Item(1).HasDataLabels = True
 vlChart.SeriesCollection.Item(2).HasDataLabels = False
image

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
Sélectionnez
    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.

image

On peut également contrôler le style d'affichage de l'étiquette.

DataLabel
Sélectionnez
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
Sélectionnez
        .DataLabel.Top = .DataLabel.Top - 20
image

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
Sélectionnez
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.

image

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
Sélectionnez
Public Sub gGerePlanche()
Dim gFloor As Floor
Set gFloor = vlChart.Floor
gFloor.Interior.ColorIndex = 2
Set gFloor = Nothing
End Sub
image

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
Sélectionnez
Public Sub gGridLines()
    vlChart.Axes(xlValue).HasMajorGridlines = False
    vlChart.Axes(xlCategory).HasMajorGridlines = False
End Sub
image

Le code suivant exploite la totalité des Gridlines.

GridLines
Sélectionnez
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.

image

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
Sélectionnez
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.

 
Sélectionnez
vGraph.g3dRotate 50, 50, 20
image

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.

image
HasLengend
Sélectionnez
Public Sub gManipulerLegende()
    Dim vlegend As Legend
    Set vlegend = vlChart.Legend
    vlChart.HasLegend = True
    vlegend.Position = xlLegendPositionCorner
    Set vlegend = Nothing
End Sub
image

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
Sélectionnez
    vlChart.HasLegend = True
    vlegend.Position = xlLegendPositionCorner
    vlegend.Shadow = True
Set vlegend = Nothing
image

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

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.

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

  

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.