FAQ Excel

FAQ ExcelConsultez toutes les FAQ
Nombre d'auteurs : 46, nombre de questions : 845, dernière mise à jour : 30 mars 2022
Sommaire→Les graphiques- 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.AddLe 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, xlColumnsIl 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, TruePar 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 compteurIl 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 SubIl 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 SubCet 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 SubVous 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.printOutLa 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 Sub2eme 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 SubUn 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 SubCet 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 SubRemarque:
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 SubSi 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 SubIl 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 SubCette 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 SubRemarques:
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.PrintOutPour 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 SubUne autre possibilité, en utilisant l'évènement Deactivate du graphique :
Private Sub Chart_Deactivate()
Application.CutCopyMode = False
End SubLorsque 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 FunctionIl 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 SubSub 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 SubEt pour réafficher la série :
Sub AfficheCourbe()
With ActiveChart.SeriesCollection(1)
.MarkerStyle = xlAutomatic
.Border.LineStyle = xlAutomatic
End With
End SubJusqu'à 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:=xlShowValuePré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



