FAQ Excel
FAQ ExcelConsultez toutes les FAQ
Nombre d'auteurs : 46, nombre de questions : 845, dernière mise à jour : 30 mars 2022
- Quelles sont les méthodes pour créer un graphique ?
- Comment créer un graphique composé ?
- Comment ajouter du texte sur un graphique ?
- Comment exporter un graphe en image gif ?
- Comment exporter plusieurs graphiques dans une même image GIF ?
- Comment appliquer des couleurs différentes pour les valeurs négatives et positives dans un graphique en barre ?
- Comment utiliser les évènements dans les graphiques Excel ?
- Comment créer un graphique rapidement ?
- Comment ajouter une série rapidement dans un graphique ?
- Comment changer le type de graphique par défaut ?
- Comment créer un axe d'ordonnées secondaire dans un graphique ?
- Comment couper la liaison entre la source de données et le graphique ?
- Comment remplacer un graphique par son image ?
- Comment renommer un graphique ?
- Comment copier la mise en forme d'un graphique ?
- Comment imprimer un graphique incorporé ?
- Comment afficher l'image d'un graphique dans une fenêtre html ?
- Comment masquer les étiquettes de données qui indiquent 0 dans un histogramme ?
- Comment redimensionner automatiquement les plages de données sources ?
- Comment visualiser un graphique dans un UserForm ?
- Comment lister tous les graphiques d'un classeur ?
- Comment vérifier si un graphique existe dans une feuille ?
- Comment créer un graphique à partir de tableaux ?
- Comment insérer l'image d'un graphique dans un commentaire ?
- Comment appliquer un format particulier pour une des séries du graphique ?
- Comment extraire les valeurs de chaque série d'un graphique ?
- Comment afficher l'évolution d'une série en fonction du point précédent ?
- Comment imprimer un graphique ?
- Comment empêcher le copier/coller d'une feuille graphique ?
- Comment traduire le TypeName d'un graphique personnalisé ?
- Pourquoi les points hh:mm sont regroupés par journée dans mon graphique Excel 2007 ?
- Comment afficher des labels personnalisés pour chaque point d'un graphique ?
- Comment identifier la plage de cellules où est positionné le graphique incorporé ?
- Est-il possible de positionner un graphique sur l'emplacement d'une plage de cellules ?
- Comment sauvegarder un graphique en image png ?
- Comment lier le titre d'un graphique à une cellule ?
- Comment joindre tous les points d'une série lorsque certaines valeurs sont nulles ?
- Comment modifier l'ordre des séries dans un graphique Excel 2007 ?
- Comment créer des modèles de graphiques personnalisés dans Excel 2007 ?
- Comment modifier le format des données numériques affichées dans l'équation d'une courbe de tendance Excel 2007 ?
- Comment faire glisser des données dans un graphique Excel 2007 ?
- Comment changer la couleur des données sur l'axe des ordonnées en fonction de leur valeur ?
- Comment masquer les étiquettes contenant la valeur zéro ?
- Comment supprimer les séries vides par macro ?
- Comment supprimer les espaces entre les barres d'un histogramme ?
- Comment masquer par macro une série dans un graphique ?
- Comment afficher un label pour un point spécifique ?
- A quoi sert l'option "Rétablir le style d'origine" dans le menu contextuel des graphiques Excel 2007 ?
- Comment retrouver le numéro de colonne d'une source de données utilisée dans la série d'un graphique ?
- Comment appliquer une valeur à la propriété Blur, sous Excel 2007 ?
Il en existe vraiment plusieurs, je ne vais vous donner ici que les principales. Par interprétation de la selection. Ce type de création est peu souple et souvent source d'erreur.
Range
(
"A1"
).CurrentRegion.Select
ThisWorkbook.Charts.Add
Le graphique créera des abscisses par défaut. Cela veut dire aussi qu'une plage sélectionnée avant la création d'un graphique sera tracée à la création de celui-ci. Avec SourceData. Si votre tableau est continu avec les abcisses à gauche, c'est la méthode la plus rapide
Dim
objChart As
Chart, objRange As
Range
Set
objRange =
Worksheets
(
"Feuil1"
).Range
(
Worksheets
(
"Feuil1"
).Cells
(
1
, 1
), Worksheets
(
"Feuil1"
).Cells
(
21
, 3
))
Set
objChart =
ThisWorkbook.Charts.Add
objChart.ChartType
=
xlXYScatter
objChart.SetSourceData
objRange, xlColumns
Il existe une autre syntaxe équivalente
Dim
objChart As
Chart, objRange As
Range
Set
objRange =
Worksheets
(
"Feuil1"
).Range
(
Worksheets
(
"Feuil1"
).Cells
(
1
, 1
), Worksheets
(
"Feuil1"
).Cells
(
21
, 3
))
Set
objChart =
ThisWorkbook.Charts.Add
objChart.ChartType
=
xlXYScatter
objChart.SeriesCollection.Add
objRange, xlColumns, True
, True
Par manipulation de séries
Dim
objChart As
Chart, objRange As
Range, MaSerie As
Series, compteur As
Long
Set
objRange =
Worksheets
(
"Feuil1"
).Range
(
Worksheets
(
"Feuil1"
).Cells
(
1
, 1
), Worksheets
(
"Feuil1"
).Cells
(
21
, 3
))
Set
objChart =
ThisWorkbook.Charts.Add
objChart.ChartType
=
xlXYScatter
objChart.SeriesCollection.Add
objRange, xlColumns, True
, True
For
compteur =
2
To
objRange.Columns.Count
Set
MaSerie =
objChart.SeriesCollection.NewSeries
MaSerie.Values
=
"="
&
objRange.Columns
(
compteur).Address
(
True
, True
, xlR1C1, True
)
MaSerie.XValues
=
"="
&
objRange.Columns
(
1
).Address
(
True
, True
, xlR1C1, True
)
Next
compteur
Il faut d'abord créer le graphique puis manipuler les séries
Public
Sub
CreationGraphe1
(
)
Dim
MonGraphe As
Chart, MaPlage As
Range
Set
MaPlage =
Worksheets
(
"donnees"
).Range
(
Cells
(
2
, 7
), Cells
(
14
, 12
))
Set
MonGraphe =
ThisWorkbook.Charts.Add
MonGraphe.ChartType
=
xlColumnStacked100
MonGraphe.SetSourceData
MaPlage, xlColumns
With
MonGraphe.SeriesCollection
(
5
)
.ChartType
=
xlXYScatterSmoothNoMarkers
.AxisGroup
=
2
With
.Border
.Weight
=
xlMedium
.LineStyle
=
xlAutomatic
.ColorIndex
=
4
End
With
End
With
With
MonGraphe
.HasTitle
=
True
With
.ChartTitle
.Characters.Text
=
"ANNEE 2001"
.Shadow
=
True
.Border.Weight
=
xlHairline
End
With
With
.Axes
(
xlValue, xlPrimary)
.HasTitle
=
True
.AxisTitle.Characters.Text
=
"Proportion"
End
With
With
.Axes
(
xlValue, xlSecondary)
.HasTitle
=
True
.AxisTitle.Characters.Text
=
"Total (hrs)"
End
With
End
With
End
Sub
Il est possible de manipuler des objets Shapes sur une feuille graphique
ActiveChart.Shapes.AddTextbox
(
msoTextOrientationHorizontal, 100
, 100
, 100
#, 100
#).Select
Selection.Characters.Text
=
"Le Texte"
La routine ci-dessous vous permettra de sauvegarder le graphique actif
Sub
ExportChart
(
)
Dim
FName As
String
, NomGraphe As
String
NomGraphe =
Right
(
ActiveChart.Name
, Len
(
ActiveChart.Name
) -
Len
(
ActiveSheet.Name
) -
1
)
With
ActiveSheet.ChartObjects
(
NomGraphe).Chart
FName =
Application.GetSaveAsFilename
(
""
, "Fichier Gif (*.GIF),*.GIF,Fichier JPEG (*.JPG),*.JPG,Tous fichiers (*.*),*.*"
)
.Export
Filename:=
FName, FilterName:=
TypeImg, Interactive:=
True
End
With
End
Sub
Cet exemple regroupe les 4 premiers graphiques incorporés de la feuille active puis les exporte en un seule image gif.
Option
Explicit
Private
Const
Fichier As
String
=
"C:\ImageTemp.gif"
Sub
ExporteGIF_GroupeGraphiques
(
)
Dim
Sh As
Shape
Dim
Tableau
(
1
To
4
) As
String
'Sous Excel 2000, indiquez :
'Dim Tableau(1 To 4) As Variant
Dim
i As
Integer
, Nb As
Integer
'Supprime l'image temporaire si elle existe
If
Dir
(
Fichier) <>
""
Then
Kill Fichier
'Boucle sur les 4 premiers graphiques de la feuille active
For
i =
1
To
4
Tableau
(
i) =
ActiveSheet.ChartObjects
(
i).Name
Next
'Regroupe les graphiques
Set
Sh =
ActiveSheet.Shapes.Range
(
Tableau).Group
'copie la forme
Sh.CopyPicture
'crée un graphique
With
ActiveSheet.ChartObjects.Add
(
0
, 0
, _
Sh.Width
, Sh.Height
).Chart
.Paste
'colle l'image dans graphique
' enregistre le graphique au format gif
.Export
Fichier, "GIF"
End
With
Nb =
ActiveSheet.ChartObjects.Count
'supprime le graphique
ActiveSheet.ChartObjects
(
Nb).Delete
Sh.Ungroup
End
Sub
Sélectionnez la série dans le graphique.
Effectuez un clic droit.
Sélectionnez l'option Format de la série de données dans le menu contextuel.
Sélectionnez l'onglet Motifs.
Cochez l'option inversée si négative.
Cliquez sur le bouton OK pour valider.
Les évènements permettent l'interaction entre votre programme et l'utilisateur. Les évènements permettent par exemple d'intercepter les déplacements de la souris, la sélection d'un objet, la modification d'une donnée...
Le lien ci dessous décrit les évènements disponibles pour manipuler les graphiques et propose quelques exemples d'utilisation.
Consultez le tutoriel pour utiliser les évènements dans les graphiques Excel.
Pour créer un graphique rapidement, sélectionnez la plage de cellules servant de source de données et appuyez sur la touche F11.
Sélectionnez la plage de cellules contenant les données de la nouvelle série.
Effectuez un Copier.
Sélectionnez le graphique.
Effectuez un Coller.
Une nouvelle série est crée à partir des données collées.
Pour activer le menu Graphique, Sélectionnez un graphique dans votre classeur.
Dans le menu Graphique, cliquez sur l'option Type de graphique.
Sélectionnez l'option Type standard.
Sélectionnez le type de graphique que vous souhaitez paramétrer par défaut.
Cliquez sur le bouton Par défaut.
Validez le message de confirmation.
Cliquez sur le bouton OK.
Appliquez le même principe de procédure pour changer le graphique Type personnalisé utilisé par défaut.
Sélectionnez dans le graphique la série dont les valeurs va servir à appliquer l'axe secondaire.
Effectuez un clic droit.
Choisissez l'option "Format de la série de données" dans le menu contextuel.
Sélectionnez l'onglet "Sélection de l'axe".
Sélectionnez l'option "Axe secondaire".
Cliquez sur le bouton OK pour valider.
Par défaut, une série est définie ainsi dans la barre de formules :
=SERIE
(;;Feuil1
!$B$1
:$B$7
;1
)
Il est possible de remplacer la référence d'une série par les valeurs :
Sélectionnez la série.
Appuyez sur la touche clavier F2
Puis sur la touche F9.
Vous obtenez un résultat de type :
=SERIE
(;{1
.2
.3
.4
.5
.6
.7
};{45
.45
.44
.45
.54
.77
.88
};1
)
La liaison entre la source de données et le graphique est coupée.
Cet exemple copie le premier graphique de la feuille active dans le Presse-papiers en tant qu'image, supprime le graphique puis colle l'image dans la feuille.
Sub
RemplaceGraphiqueParImage
(
)
With
ActiveSheet
.ChartObjects
(
1
).CopyPicture
.ChartObjects
(
1
).Delete
.Paste
.Range
(
"A1"
)
End
With
End
Sub
Vous pouvez aussi créer une copie d'un graphique au format Image, sans macro :
Appuyez sur la touche clavier Ctrl.
Sélectionnez le graphique.
Copiez.
Menu Edition/Collage spécial/Image (métafichier amélioré).
Sans macro :
Appuyez sur la touche Ctrl.
Sélectionnez le graphique.
Vous pouvez alors renommer le graphique dans le champ Nom (en haut à gauche).
Appuyez sur la touche clavier Entrée pour valider.
Par macro :
Cet exemple modifie le nom du 1er graphique dans la feuille active.
ActiveSheet.ChartObjects
(
1
).Name
=
"Le nom du Graphique"
Pour dupliquer la mise en forme d'un graphique servant de modèle, vers un autre graphique :
Sélectionnez le premier graphique.
Menu Edition/Copier
Sélectionnez le second graphique.
Menu Edition/Collage spécial/Format.
Pour imprimer uniquement le graphique et non la feuille complète, il suffit que celui ci soit sélectionné.
Vous pouvez aussi imprimer les graphiques incorporés par macro.
La procédure suivante imprime le 2ème graphique contenu dans la feuille nommée "Feuil1".
Feuil1.chartObjects
(
2
).Chart.printOut
La procédure crée un graphique, l'exporte au format image (gif) puis l'affiche sous forme de popup, dans une fenêtre html.
Dim
nomImage As
String
Dim
IE As
Object
Dim
Hauteur As
Single
, Largeur As
Single
nomImage =
"C:\imageTemp.gif"
'supprime l'image si elle existe déja
If
Dir
(
nomImage) <>
""
Then
Kill nomImage
'--------------------
'---- création du graphique
Application.ScreenUpdating
=
False
Charts.Add
With
ActiveChart
.ChartType
=
xlLineMarkers
.SetSourceData
Source:=
Sheets
(
"Feuil1"
).Range
(
"A1:B5"
), PlotBy:=
xlColumns
.Location
Where:=
xlLocationAsObject, Name:=
"Feuil1"
End
With
With
ActiveChart
.HasTitle
=
True
.ChartTitle.Characters.Text
=
"le graphique"
.HasLegend
=
True
.Legend.Position
=
xlLegendPositionRight
End
With
ActiveChart.Export
nomImage, "GIF"
'export du graphique au format image
Hauteur =
Feuil1.ChartObjects
(
Feuil1.ChartObjects.Count
).Height
*
1
.8
Largeur =
Feuil1.ChartObjects
(
Feuil1.ChartObjects.Count
).Width
*
1
.6
Sheets
(
"Feuil1"
).ChartObjects
(
Sheets
(
"Feuil1"
).ChartObjects.Count
).Delete
Application.ScreenUpdating
=
True
'--------------------
'creation d'une fenêtre internet explorer pour visualiser l'image du graphique
Set
IE =
CreateObject
(
"InternetExplorer.application"
)
IE.navigate
"about:blank"
IE.document.Title
=
"mon graphique"
IE.addressbar
=
False
IE.MenuBar
=
False
IE.StatusBar
=
False
IE.Toolbar
=
False
IE.Width
=
Largeur
IE.Height
=
Hauteur
IE.Left
=
120
IE.document.body.innerHTML
=
"<html><IMG SRC='"
&
nomImage &
"'</html>"
IE.Visible
=
True
Activez le graphique.
Sélectionnez les étiquettes.
Utilisez le menu Format.
Sélectionnez l'option "Etiquettes de données sélectionnées".
Sélectionnez l'onglet "Nombre".
Cliquez sur la catégorie "Personnalisée".
Saisissez [=0]"";standard dans le champ "Type".
Cliquez sur le bouton OK pour valider.
Il est possible de définir dynamiquement la plage source, en fonction du nombre de données variables d'une colonne, afin que le graphique se redimensionne automatiquement.
Voici trois possibilités :
1er exemple
Sauvegardez le graphique sur le disque au format image, puis chargez cette image dans l'UserForm :
Option
Explicit
Private
Const
Fichier As
String
=
"C:\ImageTemp.gif"
Private
Sub
UserForm_Initialize
(
)
'Supprime l'image temportaire si elle existe
If
Dir
(
Fichier) <>
""
Then
Kill Fichier
'Définit le 1er graphique de la Feuil1
'exporte le graphique au format image
Worksheets
(
"Feuil1"
).ChartObjects
(
1
).
_
Chart.Export
Filename:=
Fichier, filtername:=
"GIF"
'Affiche l'image dans l'UserForm
Image1.Picture
=
LoadPicture
(
Fichier)
End
Sub
Private
Sub
UserForm_Terminate
(
)
'Supprime l'image temporaire si elle existe
If
Dir
(
Fichier) <>
""
Then
Kill Fichier
End
Sub
2eme exemple
Utilisez la méthode PastePicture de Stephen Bullen.
3eme exemple
Utilisez un contrôle ChartSpace dans l'UserForm, afin de créer le graphique dynamiquement
et d'interagir avec celui-ci.
Le complément Microsoft Office Web Components (Composants Web) est une collection de contrôles pour modèles d'objets
composants (Component Object Model ou COM) permettant de publier sur le Web des feuilles de calcul, des graphiques et
des bases de données. Ces contrôles peuvent aussi être utilisés dans vos classeurs Excel.
Complément d'Office 2003: composants Web Office.
Office XP Tool: Web Components.
Un exemple simple de création :
Ajoutez un contrôle Microsoft Office Chart et un CommandButton dans l'UserForm :
Private
Sub
CommandButton1_Click
(
)
Dim
i As
Integer
Dim
S1 As
Object
Dim
TabX
(
10
), TabY
(
10
)
'Utilisez l'objet WCChart pour la bibliothèque OWC9.
'Dim Cht As WCChart
'Utilisez l'objet ChChart dans les bibliothèques OWC10(Office 2002) et OWC11(Office 2003).
Dim
Cht As
ChChart
Dim
C As
Object
Randomize
'Remplissage des tableaux qui serviront à créer le graphique
For
i =
0
To
9
TabX
(
i) =
i
TabY
(
i) =
Int
((
50
*
Rnd
) +
1
)
Next
i
Set
C =
ChartSpace1.Constants
Set
Cht =
ChartSpace1.Charts.Add
With
Cht
'Type de graphique
.Type
=
C.chChartTypeScatterLineMarkers
.HasLegend
=
True
.Legend.Position
=
C.chLegendPositionBottom
End
With
Set
S1 =
Cht.SeriesCollection.Add
With
S1
.Caption
=
"Nom de la série"
.Type
=
C.chChartTypeLine
.SetData
C.chDimCategories
, C.chDataLiteral
, TabX
.SetData
C.chDimValues
, C.chDataLiteral
, TabY
End
With
End
Sub
Un autre exemple. Téléchargez le zip :
Visualiser et interagir avec un graphique dans un UserForm.
Cette procédure permet de boucler sur tous les onglets du classeur et de lister les feuilles graphiques (Charts) ainsi que les graphiques incorporés (ChartObjects).
Private
Sub
CommandButton1_Click
(
)
Dim
j As
Byte, i As
Byte
Dim
Ch As
Chart
'Recherche les onglets graphiques
For
Each
Ch In
Charts
Debug.Print
"Feuille graphique "
&
vbTab
&
Ch.Name
Next
Ch
'Boucle sur tous les onglets du classeur
For
j =
1
To
Sheets.Count
'Recherche les graphiques incorporés dans la feuille
For
i =
1
To
Sheets
(
j).ChartObjects.Count
Debug.Print
"Nom: "
&
Sheets
(
j).ChartObjects
(
i).Name
&
vbTab
&
_
" dans "
&
Sheets
(
j).Name
Next
i
Next
j
End
Sub
Cet exemple vérifie si un graphique nommé "Graphique 1" existe dans la Feuil2
Dim
Grph As
ChartObject
On
Error
Resume
Next
Set
Grph =
Sheets
(
"Feuil2"
).ChartObjects
(
"Graphique 1"
)
If
Not
Grph Is
Nothing
Then
MsgBox
"Le graphique existe"
La première partie de la procédure permet de remplir deux tableaux.
Ces tableaux sont ensuite utilisés pour alimenter les valeurs d'ordonnées et d'abscisses.
Sub
creationGraphiqueParTableau
(
)
Dim
i As
Byte
Dim
Tableau
(
1
To
10
) As
Integer
, Tableau2
(
1
To
10
) As
Integer
'Création du tableau pour les Abscisses
For
i =
1
To
10
Tableau
(
i) =
i *
2
Next
i
'Création d'un tableau pour les Ordonnées
For
i =
1
To
10
'Le tableau est rempli par des valeurs aléatoires pour
'cet exemple
Tableau2
(
i) =
Int
((
50
*
Rnd
) +
1
)
Next
i
'Création graphique
Charts.Add
'Définit la localisation du graphique :
'dans la feuille de calcul Feuil1 pour cet exemple
ActiveChart.Location
_
Where:=
xlLocationAsObject, Name:=
"Feuil1"
'Ajoute une série dans le graphique
With
ActiveChart
.SeriesCollection.NewSeries
.SeriesCollection
(
1
).XValues
=
Tableau
(
) 'Abscisses
.SeriesCollection
(
1
).Values
=
Tableau2
(
) 'Ordonnées
'Définit le type (Courbe)
.ChartType
=
xlLine
End
With
End
Sub
Remarque:
Cette méthode est limitée par le nombre de caractères que vous pourrez insérer dans la barre de formules
(La fonction qui s'affiche lorsque vous sélectionnez une série dans le graphique)
Par exemple:
=SERIE
(;{0
.1
.2
.3
.4
.5
.6
.7
.8
.9
.10
};{36
.13
.10
.45
.21
.44
.40
.19
.49
.44
};1
)
Cette limite est d'environ 450 caractères.
Cet exemple exporte un graphique au format image GIF pour ensuite l'insérer comme image de fond dans le commentaire d'une cellule.
Cette solution prend un peu d'espace mémoire mais permet de stocker avantageusement un graphique (ou plutôt son image) quand on manque de place dans une feuille de calcul.
Sub
ImageGraphiqueDansCommentaire_CelluleA1
(
)
Dim
nomImage As
String
Dim
Grph As
ChartObject
Dim
Hauteur As
Single
, Largeur As
Single
nomImage =
"C:\imageTemp.gif"
'Définit le 1er graphique dans la Feuil1
Set
Grph =
Feuil1.ChartObjects
(
1
)
'Exporte le graphique au format image GIF
Grph.Chart.Export
nomImage, "GIF"
'récupère la dimension du graphique pour l'appliquer au commentaire
Hauteur =
Grph.Height
Largeur =
Grph.Width
'Vérifie s'il existe déja un commentaire dans la cellule A1
'et le supprime si c'est le cas
If
Not
Feuil1.Range
(
"A1"
).Comment
Is
Nothing
Then
_
Feuil1.Range
(
"A1"
).Comment.Delete
'Creation du nouveau commentaire dans la cellule A1
With
Feuil1.Range
(
"A1"
)
.AddComment
.Comment.Visible
=
False
'Définit la hauteur du commentaire
'le graphique
.Comment.Shape.Height
=
Hauteur
'Définit la largeur du commentaire
.Comment.Shape.Width
=
Largeur
'Insère l'image dans le commentaire
.Comment.Shape.Fill.UserPicture
nomImage
End
With
'Supprime l'image exportée
Kill nomImage
'Supprime le graphique
Grph.Delete
End
Sub
Si vous utilisez un graphique de type histogramme composé de plusieurs séries, vous pouvez spécifier qu'une des séries doit être de type courbe (Pour par exemple créer une ligne de repère).
Sans macro, sélectionnez la série et effectuez un clic doit.
Sélectionnez l'option "Type de graphique" dans le menu contextuel.
Sélectionnez le nouveau type graphique qui sera attribué à la série.
Cliquez sur le bouton OK pour valider.
La même opération par macro :
'Définit un type d'affichage spécifique pour la 1ere série du graphique
'xlLine = Courbe
Feuil1.ChartObjects
(
1
).Chart.SeriesCollection
(
1
).ChartType
=
xlLine
Lorsqu'un graphique a perdu ses liaisons vers la source de données, la question peut se poser de savoir comment extraire
les différentes valeurs contenues dans chaque série.
Une solution consiste à boucler sur tous les points afin d'en récupérer les valeurs.
Les étiquettes doivent impérativement être affichées (HasDataLabel = True) pour que les données puissent être récupérées.
Sub
extractionValeursOrdonnees_Series
(
)
Dim
Cible As
ChartObject
Dim
i As
Integer
, j As
Integer
'Définit le 1er graphique de la Feuil1
Set
Cible =
Feuil1.ChartObjects
(
1
)
'Boucle sur toutes les séries du graphique
For
j =
1
To
Cible.Chart.SeriesCollection.Count
'Récupère le nom de la série
Debug.Print
Cible.Chart.SeriesCollection
(
j).Name
&
":"
'boucle sur tous les points de la série
For
i =
1
To
Cible.Chart.SeriesCollection
(
j).Points.Count
With
Cible.Chart.SeriesCollection
(
j).Points
(
i)
'Affiche les étiquettes
.HasDataLabel
=
True
'Extrait la valeur du point
Debug.Print
.DataLabel.Characters.Text
'Masque les étiquettes
.HasDataLabel
=
False
End
With
Next
i
Debug.Print
"----"
Next
j
End
Sub
Il est aussi possible de récupérer les données sans boucler sur tous les points de chaque série et
sans manipuler les étiquettes.
La procédure suivante extrait les données du premier graphique de la Feuil1 et les transfère dans la
Feuil2.
Sub
extractionDonneesGraphique
(
)
Dim
Ch As
Chart
Dim
J As
Integer
Dim
X As
Integer
'Définit le premier graphique de la Feuil1 :
Set
Ch =
Worksheets
(
"Feuil1"
).ChartObjects
(
1
).Chart
'Compte le nombre de données
J =
UBound
(
Ch.SeriesCollection
(
1
).Values
)
Worksheets
(
"Feuil2"
).Cells
(
1
, 1
) =
"Abscisses"
'Ecrit les données d'abscisses dans la Feuil2.
With
Worksheets
(
"Feuil2"
)
.Range
(
.Cells
(
2
, 1
), .Cells
(
J +
1
, 1
)) =
_
Application.Transpose
(
Ch.SeriesCollection
(
1
).XValues
)
End
With
'Boucle sur les sériee du graphique et écrit les valeurs d'ordonnées à
'la suite dans la Feuil2.
For
X =
1
To
Ch.SeriesCollection.Count
'Extrait le nom de la série
Worksheets
(
"Feuil2"
).Cells
(
1
, X +
1
) =
Ch.SeriesCollection
(
X).Name
With
Worksheets
(
"Feuil2"
)
.Range
(
.Cells
(
2
, X +
1
), .Cells
(
J +
1
, X +
1
)) =
_
Application.Transpose
(
Ch.SeriesCollection
(
X).Values
)
End
With
Next
End
Sub
Cette procédure permet d'afficher (en pourcentage) l'évolution des valeurs d'une série en fonction du point précédent.
La macro boucle sur tous les points d'une série, calcule le rapport entre 2 points et ajoute le résultat dans une étiquette (DataLabel).
Sub
afficherEvolutionPourcentage_enFonctionDuPointPrecedent
(
)
'Remarque : les labels ne seront pas mis à jour automatiquement
'si les données sont modifiées dans le tableau
Dim
j As
Integer
Dim
X As
Single
, Y As
Single
Dim
Resultat As
String
Dim
Grph As
ChartObject
'Définit le graphique cible dans la Feuil1
Set
Grph =
Feuil1.ChartObjects
(
1
)
On
Error
Resume
Next
'suppression des Labels existants dans la 1ere série
Grph.Chart.SeriesCollection
(
1
).DataLabels.Delete
On
Error
GoTo
0
'affiche les Labels (Ordonnées) de la 1ere série
'pour en extraire les valeurs
Grph.Chart.SeriesCollection
(
1
).ApplyDataLabels
_
Type
:=
xlDataLabelsShowValue
'boucle sur les point de la 1ere serie (en dehors du premier point)
For
j =
2
To
Grph.Chart.SeriesCollection
(
1
).Points.Count
X =
Grph.Chart.SeriesCollection
(
1
).Points
(
j).
_
DataLabel.Characters.Text
'valeur du point
Y =
Grph.Chart.SeriesCollection
(
1
).Points
(
j -
1
).
_
DataLabel.Characters.Text
'valeur du point précédent
'Insère le pourcentage pour chaque point de la série.
'Cette ligne est placée avant la ligne
'"Resultat = Format((X / Y) - 1, "0.00%")" et permet ainsi
'de ne rien afficher pour le 1er point.
Grph.Chart.SeriesCollection
(
1
).Points
(
j -
1
).
_
DataLabel.Characters.Text
=
Resultat
'calcul le pourcentage entre les 2 points
Resultat =
Format
((
X /
Y) -
1
, "0.00%"
)
Next
j
'Affiche le pourcentage pour le dernier point de la série
Grph.Chart.SeriesCollection
(
1
).Points
(
j -
1
).DataLabel.
_
Characters.Text
=
Resultat
'Mise en forme des étiquettes
With
Grph.Chart.SeriesCollection
(
1
).DataLabels
.Font.ColorIndex
=
5
'couleur bleue
.Position
=
xlLabelPositionAbove 'position au dessus du point
.Orientation
=
xlUpward 'orientation verticale (vers le haut)
End
With
End
Sub
Remarques:
La procédure ne gère pas les cellules vides (division par 0).
Les étiquettes ne seront pas mises à jour automatiquement si les données sont modifiées dans les cellules.
Cet exemple imprime le 2eme graphique de la Feuil1 :
Feuil1.ChartObjects
(
2
).Chart.PrintOut
Pour imprimer une feuille graphique, utilisez :
Charts
(
"Graph1"
).PrintOut
Cette procédure évènementielle doit être placée au niveau du classeur "ThisWorkBook".
La macro boucle les feuilles graphiques et annule le mode Couper ou Copier si l'onglet qui vient d'être désactivé
est trouvé dans la collection.
Private
Sub
Workbook_SheetDeactivate
(
ByVal
Sh As
Object)
Dim
Ch As
Chart
'Boucle sur la collection de feuilles graphiques
For
Each
Ch In
Charts
If
Ch.Name
=
Sh.Name
Then
Application.CutCopyMode
=
False
Next
Ch
End
Sub
Une autre possibilité, en utilisant l'évènement Deactivate du graphique :
Private
Sub
Chart_Deactivate
(
)
Application.CutCopyMode
=
False
End
Sub
Lorsque vous utilisé un type de graphique issu de la bibliothèque personnalisée (XL8galry.xls), le nom spécifié est une chaîne de caractères adapté à la langue d'installation d'Excel.
Cet exemple crée un graphique personnalisé type logarithmique.
ActiveChart.ApplyCustomType
ChartType:=
xlBuiltIn, TypeName
:=
"Logarithmique"
Lorsque vous utilisez cette macro dans une version anglaise d'Excel, remplacez le
terme "Logarithmique" par "Logarithmic",
sinon vous obtiendrez un message d'erreur.
La procédure suivante permet de traduire automatiquement le nom des graphiques personnalisés (français/anglais et anglais/français) si vous devez utiliser le classeur dans des versions différentes d'Excel.
Option
Explicit
Sub
Test
(
)
Dim
Cible As
String
Cible =
TraductionGraphPersoTypeName
(
"Line - Column on 2 Axes"
)
MsgBox
Cible
If
Cible =
""
Then
Exit
Sub
ActiveChart.ApplyCustomType
ChartType:=
xlBuiltIn, TypeName
:=
Cible
End
Sub
Function
TraductionGraphPersoTypeName
(
strTypeName As
String
) As
String
Dim
TabEnglish As
Variant
Dim
TabFrench As
Variant
Dim
TabRecherche As
Variant
Dim
Verif
(
) As
String
Dim
i As
Integer
'Extraction de XL8galry.xls / Excel 2002
'Dim Wb As Workbook
'Dim Cht As Chart
'Set Wb = Workbooks("XL8GALRY.XLS")
'For Each Cht In Wb.Charts
'Debug.Print Cht.Name
'Next
'Tableau TypeName en français
TabFrench =
Array
(
"Barres texturées"
, "Logarithmique"
, "Histogramme - Aires"
, _
"Courbes à deux axes"
, "Courbe - Histo. 2 axes"
, "Courbes - Histogramme"
, _
"Courbe avec lissage"
, "Cônes"
, "Pastels"
, "Tubes"
, "Secteurs éclatés"
, _
"Couleurs empilées"
, "Histogramme en relief"
, "Secteurs bleus"
, _
"Barres flottantes"
, "Courbes en couleurs"
, "Histogramme n&b"
, _
"Courbes n&b - chrono."
, "Aires n&b"
, "Secteurs n&b"
)
'Tableau TypeName en anglais
TabEnglish =
Array
(
"Outdoor Bars"
, "Logarithmic"
, "Column - Area"
, _
"Lines on 2 Axes"
, "Line - Column on 2 Axes"
, "Line - Column"
, _
"Smooth Lines"
, "Cones"
, "Area Blocks"
, "Tubes"
, "Pie Explosion"
, _
"Stack of Colors"
, "Columns with Depth"
, "Blue Pie"
, "Floating Bars"
, _
"Colored Lines"
, "b&w Column"
, "b&w Line - Timescale"
, "b&w Area"
, _
"b&w Pie"
)
'Vérifie la version de pays Excel
Select
Case
Application.International
(
xlCountryCode)
'-----------------------------------------------
Case
33
: 'French
'Vérifie si l'argument strTypeName est déja en français
Verif =
Filter
(
TabFrench, strTypeName, True
)
If
UBound
(
Verif) <>
-
1
Then
TraductionGraphPersoTypeName =
Verif
(
0
)
Exit
Function
End
If
'Recherche l'équivalence française
For
i =
0
To
UBound
(
TabEnglish)
If
TabEnglish
(
i) =
strTypeName Then
TraductionGraphPersoTypeName =
TabFrench
(
i)
Exit
Function
End
If
Next
i
'-----------------------------------------------
'Case 49: 'German
'-----------------------------------------------
Case
Else
: 'US English (renvoie 1) ou
'US English as the default language (case else)
''Vérifie si l'argument strTypeName est déja en anglais
Verif =
Filter
(
TabEnglish, strTypeName, True
)
If
UBound
(
Verif) <>
-
1
Then
TraductionGraphPersoTypeName =
Verif
(
0
)
Exit
Function
End
If
'Recherche l'équivalence anglaise
For
i =
0
To
UBound
(
TabFrench)
If
TabFrench
(
i) =
strTypeName Then
TraductionGraphPersoTypeName =
TabEnglish
(
i)
Exit
Function
End
If
Next
i
End
Select
End
Function
Il s'agit d'une option d'Excel 2007 pour la gestion des axes en tant que Date: L'intervalle minimum disponible est la journée.
Pour y remédier, sélectionnez votre graphique.
Sélectionnez l'onglet "Disposition" (Outils de graphique).
Cliquez sur le bouton "Axe" dans le groupe "Axes".
Axe horizontal principal.
Sélectionnez Autres options de l'axe horizontal principal (en bas de la liste).
Sélectionnez l'option Type d'axe : "Texte sur les axes".
Vous pouvez éventuellement paramétrer les intervalles entre graduations.
Fermez la boîte dialogue.
La procédure du classeur démo permet de personnaliser les labels qui s'affichent lorsque que le curseur de la souris passe au-dessus des points du graphique. Les labels sont créés dynamiquement et vous pouvez y afficher toutes les informations que vous souhaitez. Les labels suivent le curseur de la souris.
Le graphique doit être préalablement activé.
Classeur créé avec Excel 2007.
TopLeftCell renvoie la cellule se trouvant sous le coin supérieur gauche de l'objet.
BottomRightCell renvoie la cellule se trouvant sous le coin inférieur droit de l'objet.
Sub
PositionGraphique
(
)
Dim
objCht As
ChartObject
'Définit le premier graphique dans la feuille
Set
objCht =
Feuil1.ChartObjects
(
1
)
MsgBox
objCht.TopLeftCell.Address
&
":"
&
objCht.BottomRightCell.Address
End
Sub
Sub
RepositionneGraphique
(
)
Dim
Emplacement As
Range
Dim
Grph As
ChartObject
'Définit le premier graphique de la feuille
Set
Grph =
Feuil1.ChartObjects
(
1
)
'Définit la plage de cellule pour positionner le grpahique
Set
Emplacement =
Range
(
"D3:J20"
)
With
Grph
.Left
=
Emplacement.Left
.Top
=
Emplacement.Top
.Height
=
Emplacement.Height
.Width
=
Emplacement.Width
End
With
End
Sub
Utilisez le menu Outils
Options
Onglet 'Général'
Bouton 'Options Web'
Onglet 'Images'
Cochez 'Autoriser le format PNG comme format de sortie'.
Puis utilisez le menu Fichier
Aperçu de la page Web.
Le fichier PNG apparaît sur la page Web.
Ou
Menu Fichier
Enregistrer en tant que page Web.
Le fichier PNG est récupérable dans le répertoire de la page Web sauvegardée.
Sélectionnez la forme qui contient le titre du graphique.
Dans la barre de formule, saisissez la référence de la cellule à lier.
=Feuil1
!$A$1
Validez la formule.
Désormais la cellule A1 s'affiche dans le titre du graphique.
Une première solution consiste à saisir la valeur #N/A dans les cellules vides de la plage source.
Une deuxième possibilité :
Sélectionnez le graphique
Cliquez sur le menu Outils
Options
Sélectionnez l'onglet Graphique
Modifiez l'option de gestion des cellules vides.
Si vous disposez d'Excel 2007 :
Sélectionnez le graphique.
Onglet "Création".
Groupe "Données".
Cliquez sur le bouton "Sélectionner des données".
Une boîte de dialogue s'affiche.
Cliquez sur le bouton "Cellules masquées et cellules vides".
Cochez l'option "Relier les points de données par une courbe.
Cliquez sur le bouton OK pour valider.
Sélectionnez le graphique.
Onglet "Création" dans le ruban.
Groupe "Données".
Cliquez sur le bouton "Sélectionner les données".
Sélectionnez la série dans la liste de gauche et cliquez sur les boutons (symbolisés pas des flèches verticales bleues)
pour déplacer vers le bas ou vers le haut.
Cliquez sur le bouton OK pour valider.
Lorsque vous souhaitez définir une charte ou une mise en forme personnalisée adaptée à vos projets, Excel 2007 permet la sauvegarde du graphique en tant que modèle afin de le réutiliser facilement ultérieurement.
Tout d'abord, finalisez la présentation de votre graphique.
Ensuite, sélectionnez le graphique.
Sélectionnez l'onglet Création (Outils de graphique) dans le ruban.
Cliquez sur le bouton "Enregistrer comme modèle" dans le groupe "Type".
Attribuez un nom au fichier. Celui-ci va prendre l'extension .crtx. Le modèle est sauvegardé par défaut dans le répertoire :
C:\Documents and Settings\nom_utilisateur\Application Data\Microsoft\Templates\Charts
Ensuite, lorsque vous créez un nouveau graphique, ouvrez le répertoire "Modèles" et sélectionnez votre modèle personnel.
Ce modèle peut aussi servir à modifier un graphique existant. Vous pouvez le déployer et l'utiliser sur
d'autres postes de travail en copiant le fichier .crtx.
Si vous utilisez souvent un modèle de graphique, vous pouvez aussi l'enregistrer en tant que modèle par défaut.
Nota
Méthode pour Excel 2002 :
Clic droit sur votre graphique après mise en forme.
Type de graphique
Onglet "Type personnalisé"
Sélectionnez l'option "Type personnalisé"
Cliquez sur le bouton "Ajouter"
Définissez un nom et une description pour ce nouveau modèle.
Ce fichier est désormais disponible dans la liste des types personnalisés.
Vous pouvez ensuite le déployer et l'utiliser sur d'autres postes de travail en copiant le fichier XLUSRGAL.XLS
généralement stocké dans le répertoire :
C:\Documents and Settings\nom_utilisateur\Application Data\Microsoft\Excel\
Sélectionnez l'équation de la courbe de tendance dans le graphique.
Faites un clic droit.
Sélectionnez "Format d'étiquette de courbe de tendance" dans le menu contextuel.
Cliquez sur le menu "Nombre".
Personnalisez le format en fonction de votre projet.
Cliquez sur le bouton "Fermer".
Cette fonctionnalité n'est plus disponible dans les nouveaux graphiques Excel 2007.
Vous ne pouvez donc plus utiliser cette option pour ajouter de nouvelles données.
De même, vous ne pouvez plus modifier la valeur d'un point en faisant un simple "glisser" de ce point dans le graphique,
comme cela était le cas dans les anciennes versions.
Vous pouvez utiliser l'option de mise en forme de l'axe et appliquer un format personnalisé.
Dans Excel 2007 :
Sélectionnez l'axe des ordonnées.
Effectuez un clic droit.
Choisissez l'option "Mise en forme de l'axe" dans le menu contextuel.
Sélectionnez le menu "Nombre".
Sélectionnez la catégorie "Personnalisé".
Choisissez un des codes existants dans la liste comme point de départ, et adaptez le format en fonction de votre projet.
Cliquez sur le bouton "Ajouter".
Cet exemple permet d'afficher les valeurs négatives en rouge et les valeurs positives en bleu :
[Bleu]# ###;[Rouge]-# ###
Vous pouvez utiliser un format personnalisé pour masquer les étiquettes dont la valeur est à 0.
Dans Excel 2007 :
Sélectionnez le graphique, puis effectuez un clic droit.
Choisissez l'option "Mise en forme des étiquettes de données" dans le menu contextuel.
Sélectionnez le menu "Nombre".
Sélectionnez la catégorie "Personnalisé".
Choisissez un des codes existants dans la liste comme point de départ, et adaptez le format en fonction de votre projet.
# ###;-# ###;;
Cliquez sur le bouton "Ajouter".
Reportez vous au chapitre sur les formats pour plus d'information.
Lorsque la série à effacer fait référence à un plage vide, il peut arriver que vous ayez une message d'erreur: "Erreur d'exécution '1004' La méthode Delete de la classe Series a échoué".
Pour éviter ce soucis, utilisez le menu Options
Onglet Graphique
Dans la zone "traitement des cellules vides", l'option "Valeurs zéro" doit être activée .
La modification de l'option "Valeurs zéro" peut aussi être réalisée directement dans votre code :
Sub
SuppressionToutesSeries
(
)
Dim
W As
Worksheet
Dim
NBSeries As
Integer
, I As
Integer
'Le graphique est dans la première feuille du classeur
Set
W =
ThisWorkbook.Worksheets
(
1
)
W.ChartObjects
(
1
).Activate
NBSeries =
ActiveChart.SeriesCollection.Count
ActiveChart.DisplayBlanksAs
=
xlZero
'Equivalent de :
'Menu Options
'onglet Graphique
'sélection de l'option "valeur zero"
'boucle sur les séries afin de les supprimer
For
I =
NBSeries To
1
Step
-
1
ActiveChart.SeriesCollection
(
I).Delete
Next
I
'Adaptez la réinitialisation en fonction de la valeur par défaut
'dans le menu d'Options.
ActiveChart.DisplayBlanksAs
=
xlNotPlotted
End
Sub
Jusqu'à Excel 2003 :
Faites un clic droit sur une série.
Sélectionnez "Format de la série de données".
Onglet "Options"
Indiquez la valeur 0 dans le champ "Largeur de l'intervalle".
Cliquez sur le bouton OK pour valider.
Sous Excel 2007 :
Sélectionnez une série.
Clic droit
Sélectionnez l'option "Mettre en forme une série de données".
Menu "Options des séries"
Ramenez le curseur "Largeur de l'intervalle" à 0%.
Cliquez sur le bouton "Fermer".
Cet exemple masque la première série du graphique actif :
Sub
MasqueCourbe
(
)
With
ActiveChart.SeriesCollection
(
1
)
.MarkerStyle
=
xlNone
.Border.LineStyle
=
xlNone
End
With
End
Sub
Et pour réafficher la série :
Sub
AfficheCourbe
(
)
With
ActiveChart.SeriesCollection
(
1
)
.MarkerStyle
=
xlAutomatic
.Border.LineStyle
=
xlAutomatic
End
With
End
Sub
Jusqu'à Excel 2003 :
Sélectionnez la série
Sélectionnez le point
Clic droit sur ce point
Sélectionnez "Format de donnée" dans le menu contextuel.
Onglet "Etiquettes de données"
Cochez la ou les données à afficher.
Cliquez sur le bouton OK pour valider
Dans Excel 2007 :
Sélectionnez la série
Sélectionnez le point
Clic droit sur ce point
Sélectionnez l'option "Ajouter une étiquette de données"
Par macro :
Dim
Sc As
Series
'Définit la 2eme série dans le 1er graphique de la feuille active
Set
Sc =
ActiveSheet.ChartObjects
(
1
).Chart.SeriesCollection
(
2
)
'Affiche la valeur du 4eme point de la série
Sc.Points
(
4
).ApplyDataLabels
Type
:=
xlShowValue
Précisez les types de données qui peuvent être affichés en utilisant l'argument
Type
:=
xlShowValue
Un modèle de graphique contient une mise en forme de graphique et stocke les couleurs utilisées lorsque vous enregistrez le graphique en tant que modèle. Lorsque vous utilisez un modèle de graphique pour créer un graphique dans un autre classeur, le nouveau graphique utilise les couleurs du modèle de graphique ? et non celles du thème de document actuellement appliqué au classeur.
Pour utiliser les couleurs de thème du document plutôt que celles du modèle de graphique, cliquez avec le bouton droit sur la zone de graphique (zone graphique : ensemble du graphique et de ses éléments constitutifs.), puis cliquez sur Rétablir le style d'origine dans le menu contextuel.
Cet exemple récupère le numéro de colonne correspondant à la troisième série du premier graphique, dans la feuille active.
Sub
Test
(
)
MsgBox
Range
(
RecupPlageDonnesGraph
(
_
ActiveSheet.ChartObjects
(
1
), 3
)).Column
End
Sub
Function
RecupPlageDonnesGraph
(
Ch As
ChartObject, NumSerie As
Integer
) As
String
Dim
Tableau
(
) As
String
Tableau =
Split
(
Ch.Chart.SeriesCollection
(
NumSerie).Formula
, ","
)
RecupPlageDonnesGraph =
Tableau
(
2
)
End
Function
La propriété Blur sert à définir le degré de flou pour l'ombre d'un objet dans un graphique ou une forme automatique.
Vous devez indiquer un pourcentage, représenté par une valeur entre 0 et 1 (0=0%, 0.4=40%, 1=100%).
Cet exemple reproduit la transaction de mise en forme de lumière Excel 2007.
Dim
ChObj As
ChartObject
Dim
serCol As
Series
'Définit le premier graphique dans la feuille active
Set
ChObj =
ActiveSheet.ChartObjects
(
1
)
'Définit la premiere série
Set
serCol =
ChObj.Chart.SeriesCollection
(
1
)
With
serCol.Format
'Définit la couleur de lumière
.Glow.Color
=
RGB
(
255
, 100
, 180
)
'Définit l'épaisseur de la lumière
.Glow.Radius
=
8
End
With
'Définit la troisième série
With
ActiveChart.SeriesCollection
(
3
).Format
'Définit la couleur de lumière
.Glow.Color
=
RGB
(
255
, 100
, 180
)
'Définit l'épaisseur de la lumière
.Glow.Radius
=
8
'définit le degré de flou de l'ombre spécifiée (en pourcentage)
.Shadow.Blur
=
0
.5
'Applique une couleur
.Shadow.ForeColor.RGB
=
RGB
(
0
, 255
, 200
)
'Reansparence de l'ombre (en pourcentage)
.Shadow.Transparency
=
0
.5
End
With