Developpez.com

Club des développeurs et IT pro
Plus de 4 millions de visiteurs uniques par mois

FAQ ExcelConsultez toutes les FAQ

Nombre d'auteurs : 46, nombre de questions : 845, dernière mise à jour : 30 mars 2017 

 
OuvrirSommaireLes graphiques

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.

Vba
Sélectionnez

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

Vba
Sélectionnez

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

Vba
Sélectionnez

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

Vba
Sélectionnez

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
Créé le 14 février 2004  par Bidou

Il faut d'abord créer le graphique puis manipuler les séries

Vba
Sélectionnez

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
Créé le 14 février 2004  par Bidou

Il est possible de manipuler des objets Shapes sur une feuille graphique

Vba
Sélectionnez

ActiveChart.Shapes.AddTextbox(msoTextOrientationHorizontal, 100, 100, 100#, 100#).Select 
Selection.Characters.Text = "Le Texte"
Créé le 14 février 2004  par DarkVader

La routine ci-dessous vous permettra de sauvegarder le graphique actif

Vba
Sélectionnez

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
Créé le 14 février 2004  par DarkVader

Cet exemple regroupe les 4 premiers graphiques incorporés de la feuille active puis les exporte en un seule image gif.

Vba
Sélectionnez

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 Excel2000, 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
Créé le 19 février 2008  par SilkyRoad

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.

Créé le 9 avril 2007  par SilkyRoad

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.

Créé le 9 avril 2007  par SilkyRoad

Pour créer un graphique rapidement, sélectionnez la plage de cellules servant de source de données et appuyez sur la touche F11.

Créé le 10 avril 2007  par SilkyRoad

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.

Créé le 5 décembre 2007  par SilkyRoad

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.

Créé le 14 avril 2007  par SilkyRoad

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.

Créé le 15 avril 2007  par SilkyRoad

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.

Créé le 15 avril 2007  par SilkyRoad

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.

Vba
Sélectionnez

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é).

Créé le 15 avril 2007  par SilkyRoad

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.

Vba
Sélectionnez

ActiveSheet.ChartObjects(1).Name = "Le nom du Graphique"
Créé le 15 avril 2007  par SilkyRoad

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.

Créé le 19 avril 2007  par SilkyRoad

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".

Vba
Sélectionnez

Feuil1.chartObjects(2).Chart.printOut
Créé le 14 mai 2007  par SilkyRoad

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.

Vba
Sélectionnez

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
Créé le 14 mai 2007  par SilkyRoad

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.

Créé le 14 mai 2007  par SilkyRoad

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.

Téléchargez le classeur démo.

Créé le 14 mai 2007  par SilkyRoad

Voici trois possibilités:

1er exemple
Sauvegardez le graphique sur le disque au format image, puis chargez cette image dans l'UserForm:

Vba
Sélectionnez

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.

Téléchargez la démo


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:

Vba
Sélectionnez

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.

Créé le 14 mai 2007  par SilkyRoad

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).

Vba
Sélectionnez
 
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
Créé le 14 février 2004  par SilkyRoad

Cet exemple vérifie si un graphique nommé "Graphique 1" existe dans la Feuil2

Vba
Sélectionnez
  
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"
Créé le 14 février 2004  par SilkyRoad

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.

Vba
Sélectionnez

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.

Créé le 14 février 2007  par SilkyRoad

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.

Vba
Sélectionnez

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
Créé le 14 février 2004  par SilkyRoad

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:

Vba
Sélectionnez

'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
Créé le 14 février 2004  par SilkyRoad

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.


Vba
Sélectionnez

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.

Vba
Sélectionnez

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
Mis à jour le 5 novembre 2007  par SilkyRoad

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).

Vba
Sélectionnez

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.

Créé le 14 février 2004  par SilkyRoad

Cet exemple imprime le 2eme graphique de la Feuil1 :

Vba
Sélectionnez

Feuil1.ChartObjects(2).Chart.PrintOut




Pour imprimer une feuille graphique, utilisez :

Vba
Sélectionnez
 
Charts("Graph1").PrintOut
Créé le 14 février 2004  par SilkyRoad

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.

Vba
Sélectionnez
 
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 :

Vba
Sélectionnez
  
Private Sub Chart_Deactivate()
   Application.CutCopyMode = False
End Sub
Créé le 14 février 2004  par SilkyRoad

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.

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

Vba
Sélectionnez
 
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
Créé le 10 juin 2007  par SilkyRoad

Il s'agit d'une option d'Excel2007 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.

Créé le 20 août 2007  par SilkyRoad

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

Téléchargez le classeur.


Classeur créé avec Excel 2007.

Créé le 20 août 2007  par SilkyRoad

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.

Vba
Sélectionnez

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
Créé le 20 août 2007  par SilkyRoad
Vba
Sélectionnez

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
Créé le 2 octobre 2007  par SilkyRoad

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.

Créé le 2 octobre 2007  par Arkham46

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.

Créé le 2 octobre 2007  par SilkyRoad

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'Excel2007:
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.

Créé le 2 octobre 2007  par SilkyRoad

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.

Créé le 2 octobre 2007  par SilkyRoad

Lorsque vous souhaitez définir une charte ou une mise en forme personnalisée adaptée à vos projets, Excel2007 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.

Image non disponible


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\

Mis à jour le 20 septembre 2008  par SilkyRoad

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".

Créé le 5 décembre 2007  par SilkyRoad

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.

Créé le 5 décembre 2007  par SilkyRoad

Vous pouvez utiliser l'option de mise en forme de l'axe et appliquer un format personnalisé.

Dans Excel2007:
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]-# ###

Créé le 19 février 2008  par SilkyRoad

Vous pouvez utiliser un format personnalisé pour masquer les étiquettes dont la valeur est à 0.

Dans Excel2007:
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.

Créé le 19 février 2008  par SilkyRoad

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:

Vba
Sélectionnez
 
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
Créé le 19 février 2008  par SilkyRoad

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 Excel2007:
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".

Créé le 20 septembre 2008  par Cafeine, SilkyRoad

Cet exemple masque la première série du graphique actif :

Vba
Sélectionnez
 
Sub MasqueCourbe()
  With ActiveChart.SeriesCollection(1)
     .MarkerStyle = xlNone
     .Border.LineStyle = xlNone
  End With
End Sub



Et pour réafficher la série :

Vba
Sélectionnez

Sub AfficheCourbe()
  With ActiveChart.SeriesCollection(1)
     .MarkerStyle = xlAutomatic
     .Border.LineStyle = xlAutomatic
  End With
End Sub
Créé le 20 septembre 2008  par JackOuYA

Jusqu'à Excel2003 :

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 Excel2007 :

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 :

Vba
Sélectionnez

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

Créé le 20 septembre 2008  par SilkyRoad

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.

Créé le 20 septembre 2008  par Microsoft

Cet exemple récupère le numéro de colonne correspondant à la troisième série du premier graphique, dans la feuille active.

Vba
Sélectionnez

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
Créé le 19 février 2009  par SilkyRoad

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.

Vba
Sélectionnez

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
Créé le 19 février 2009  par SilkyRoad
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2009 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.