Accueil
Accueil Le Club Delphi Kylix C C++ Java J2EE DotNET & C# Visual Basic Access Pascal Dev Web PHP ASP XML UML SQLSGBD Windows Linux Autres
logo
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 Excel2007 ?
        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 Excel2007 ?
        Comment créer des modèles de graphiques personnalisés dans Excel2007 ?
        Comment modifier le format des données numériques affichées dans l'équation d'une courbe de tendance Excel2007 ?
        Comment faire glisser des données dans un graphique Excel2007 ?
        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 ?

precedent    sommaire    suivant   


Quelles sont les méthodes pour créer un graphique ?
auteur : Bidou
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

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

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

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

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

Comment créer un graphique composé ?
auteur : Bidou
Il faut d'abord créer le graphique puis manipuler les séries

Vba

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

Comment ajouter du texte sur un graphique ?
auteur : DarkVader
Il est possible de manipuler des objets Shapes sur une feuille graphique

Vba

ActiveChart.Shapes.AddTextbox(msoTextOrientationHorizontal, 100, 100, 100#, 100#).Select 
Selection.Characters.Text = "Le Texte"

Comment exporter un graphe en image gif ?
auteur : DarkVader
La routine ci-dessous vous permettra de sauvegarder le graphique actif

Vba

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

Comment exporter plusieurs graphiques dans une même image GIF ?
auteur : SilkyRoad
Cet exemple regroupe les 4 premiers graphiques incorporés de la feuille active puis les exporte en un seule image gif.

Vba

Option Explicit

Private Const Fichier As String = "C:\ImageTemp.gif"
   
   
Sub ExporteGIF_GroupeGraphiques()
   Dim Sh As Shape
   Dim Tableau(1 To 4) As String
   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

Comment appliquer des couleurs différentes pour les valeurs négatives et positives dans un graphique en barre ?
auteur : 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.


Comment utiliser les évènements dans les graphiques Excel ?
auteur : 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.



Comment créer un graphique rapidement ?
auteur : 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.



Comment ajouter une série rapidement dans un graphique ?
auteur : 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.



Comment changer le type de graphique par défaut ?
auteur : 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.



Comment créer un axe d'ordonnées secondaire dans un graphique ?
auteur : 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.



Comment couper la liaison entre la source de données et le graphique ?
auteur : 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.



Comment remplacer un graphique par son image ?
auteur : 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

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



Comment renommer un graphique ?
auteur : 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

ActiveSheet.ChartObjects(1).Name = "Le nom du Graphique"

Comment copier la mise en forme d'un graphique ?
auteur : 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.



Comment imprimer un graphique incorporé ?
auteur : 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

Feuil1.chartObjects(2).Chart.printOut

Comment afficher l'image d'un graphique dans une fenêtre html ?
auteur : 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

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

Comment masquer les étiquettes de données qui indiquent 0 dans un histogramme ?
auteur : 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.



Comment redimensionner automatiquement les plages de données sources ?
auteur : 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.



Comment visualiser un graphique dans un UserForm ?
auteur : SilkyRoad
Voici trois possibilités:

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

Vba

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

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.



Comment lister tous les graphiques d'un classeur ?
auteur : 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
 
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

Comment vérifier si un graphique existe dans une feuille ?
auteur : SilkyRoad
Cet exemple vérifie si un graphique nommé "Graphique 1" existe dans la Feuil2

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

Comment créer un graphique à partir de tableaux ?
auteur : 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

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.



Comment insérer l'image d'un graphique dans un commentaire ?
auteur : 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

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

Comment appliquer un format particulier pour une des séries du graphique ?
auteur : 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

'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

Comment extraire les valeurs de chaque série d'un graphique ?
auteur : 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

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

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

Comment afficher l'évolution d'une série en fonction du point précédent ?
auteur : 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

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.



Comment imprimer un graphique ?
auteur : SilkyRoad
Cet exemple imprime le 2eme graphique de la Feuil1 :

Vba

Feuil1.ChartObjects(2).Chart.PrintOut



Pour imprimer une feuille graphique, utilisez :

Vba
 
Charts("Graph1").PrintOut

Comment empêcher le copier/coller d'une feuille graphique ?
auteur : 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
 
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
  
Private Sub Chart_Deactivate()
   Application.CutCopyMode = False
End Sub

Comment traduire le TypeName d'un graphique personnalisé ?
auteur : 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
 
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
 
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

Pourquoi les points hh:mm sont regroupés par journée dans mon graphique Excel2007 ?
auteur : 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.



Comment afficher des labels personnalisés pour chaque point d'un graphique ?
auteur : 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é.

src Téléchargez le classeur.


Classeur créé avec Excel 2007.



Comment identifier la plage de cellules où est positionné le graphique incorporé ?
auteur : 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

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

Est-il possible de positionner un graphique sur l'emplacement d'une plage de cellules ?
auteur : SilkyRoad
Vba

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

Comment sauvegarder un graphique en image png ?
auteur : Arkham46
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.



Comment lier le titre d'un graphique à une cellule ?
auteur : SilkyRoad
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.



Comment joindre tous les points d'une série lorsque certaines valeurs sont nulles ?
auteur : 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.



Comment modifier l'ordre des séries dans un graphique Excel2007 ?
auteur : 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.



Comment créer des modèles de graphiques personnalisés dans Excel2007 ?
auteur : 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.




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.



Comment modifier le format des données numériques affichées dans l'équation d'une courbe de tendance Excel2007 ?
auteur : 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".



Comment faire glisser des données dans un graphique Excel2007 ?
auteur : 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.



Comment changer la couleur des données sur l'axe des ordonnées en fonction de leur valeur ?
auteur : 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]-# ###



Comment masquer les étiquettes contenant la valeur zéro ?
auteur : 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.



Comment supprimer les séries vides par macro ?
auteur : 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
 
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

precedent    sommaire    suivant   

Consultez les autres F.A.Q's


Les sources présentés sur cette pages sont libre de droits, et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright ©2008  Developpez LLC. Tout 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'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérets. Cette page est déposée à la SACD.

Vos questions techniques : forum d'entraide Accueil - Publiez vos articles, tutoriels, cours et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones. Nous contacter - Copyright 2000..2005 www.developpez.com