Recherche…


Créer un graphique avec des plages et un nom fixe

Vous pouvez créer des graphiques en travaillant directement avec l’objet Series qui définit les données du graphique. Pour accéder à la Series sans graphique existant, vous créez un objet ChartObject sur une Worksheet donnée, puis vous obtenez l'objet Chart . L'avantage de travailler avec la Series objet est que vous pouvez définir les Values et XValues en se référant à Range objets. Ces propriétés de données définiront correctement la Series avec des références à ces plages. L'inconvénient de cette approche est que la même conversion n'est pas gérée lors de la définition du Name ; c'est une valeur fixe. Il ne s'ajustera pas avec les données sous-jacentes dans la Range origine. En cochant la formule SERIES , il est évident que le nom est fixe. Cela doit être géré en créant directement la formule SERIES .

Code utilisé pour créer un graphique

Notez que ce code contient des déclarations de variables supplémentaires pour le Chart et la Worksheet . Ceux-ci peuvent être omis s'ils ne sont pas utilisés. Ils peuvent cependant être utiles si vous modifiez le style ou d'autres propriétés du graphique.

Sub CreateChartWithRangesAndFixedName()

    Dim xData As Range
    Dim yData As Range
    Dim serName As Range
    
    'set the ranges to get the data and y value label
    Set xData = Range("B3:B12")
    Set yData = Range("C3:C12")
    Set serName = Range("C2")
    
    'get reference to ActiveSheet
    Dim sht As Worksheet
    Set sht = ActiveSheet
    
    'create a new ChartObject at position (48, 195) with width 400 and height 300
    Dim chtObj As ChartObject
    Set chtObj = sht.ChartObjects.Add(48, 195, 400, 300)
    
    'get reference to chart object
    Dim cht As Chart
    Set cht = chtObj.Chart
    
    'create the new series
    Dim ser As Series
    Set ser = cht.SeriesCollection.NewSeries
    
    ser.Values = yData
    ser.XValues = xData
    ser.Name = serName
    
    ser.ChartType = xlXYScatterLines

End Sub

Données / plages d'origine et Chart résultant après l'exécution du code

Notez que la formule SERIES inclut un "B" pour le nom de la série au lieu d'une référence à la Range qui l'a créé.

données et graphique résultant

Créer un graphique vide

Le point de départ de la grande majorité des codes graphiques est de créer un Chart vide. Notez que ce Chart est soumis au modèle de graphique par défaut actif et peut ne pas être vide (si le modèle a été modifié).

La clé de ChartObject détermine son emplacement. La syntaxe de l'appel est ChartObjects.Add(Left, Top, Width, Height) . Une fois l'objet ChartObject créé, vous pouvez utiliser son objet Chart pour modifier le graphique. Le ChartObject se comporte plus comme une Shape pour positionner le graphique sur la feuille.

Code pour créer un graphique vide

Sub CreateEmptyChart()
    
    'get reference to ActiveSheet
    Dim sht As Worksheet
    Set sht = ActiveSheet
    
    'create a new ChartObject at position (0, 0) with width 400 and height 300
    Dim chtObj As ChartObject
    Set chtObj = sht.ChartObjects.Add(0, 0, 400, 300)
    
    'get refernce to chart object
    Dim cht As Chart
    Set cht = chtObj.Chart
    
    'additional code to modify the empty chart
    '...

End Sub

Graphique résultant

exemple de carte vide

Créer un graphique en modifiant la formule SERIES

Pour un contrôle complet sur un nouvel objet Chart et Series (en particulier pour un nom de Series dynamique), vous devez modifier directement la formule SERIES . Le processus de configuration des objets Range est simple et le principal obstacle est simplement la création de chaînes pour la formule SERIES .

La formule SERIES prend la syntaxe suivante:

=SERIES(Name,XValues,Values,Order)

Ces contenus peuvent être fournis sous forme de références ou de valeurs de tableau pour les éléments de données. Order représente la position de la série dans le graphique. Notez que les références aux données ne fonctionneront que si elles sont pleinement qualifiées avec le nom de la feuille. Pour obtenir un exemple de formule de travail, cliquez sur une série existante et vérifiez la barre de formule.

Code pour créer un graphique et configurer les données à l'aide de la formule SERIES

Notez que la construction de la chaîne pour créer la formule SERIES utilise .Address(,,,True) . Cela garantit que la référence de plage externe est utilisée pour inclure une adresse complète avec le nom de la feuille. Vous obtiendrez une erreur si le nom de la feuille est exclu .

Sub CreateChartUsingSeriesFormula()

    Dim xData As Range
    Dim yData As Range
    Dim serName As Range
    
    'set the ranges to get the data and y value label
    Set xData = Range("B3:B12")
    Set yData = Range("C3:C12")
    Set serName = Range("C2")
    
    'get reference to ActiveSheet
    Dim sht As Worksheet
    Set sht = ActiveSheet
    
    'create a new ChartObject at position (48, 195) with width 400 and height 300
    Dim chtObj As ChartObject
    Set chtObj = sht.ChartObjects.Add(48, 195, 400, 300)
    
    'get refernce to chart object
    Dim cht As Chart
    Set cht = chtObj.Chart
    
    'create the new series
    Dim ser As Series
    Set ser = cht.SeriesCollection.NewSeries
    
    'set the SERIES formula
    '=SERIES(name, xData, yData, plotOrder)
    
    Dim formulaValue As String
    formulaValue = "=SERIES(" & _
        serName.Address(, , , True) & "," & _
        xData.Address(, , , True) & "," & _
        yData.Address(, , , True) & ",1)"
    
    ser.Formula = formulaValue
    ser.ChartType = xlXYScatterLines

End Sub

Données d'origine et graphique résultant

Notez que pour ce graphique, le nom de la série est correctement défini avec une plage dans la cellule souhaitée. Cela signifie que les mises à jour se propageront au Chart .

données et graphique de la formule SERIES

Organiser des graphiques dans une grille

Une tâche courante avec les graphiques dans Excel est la standardisation de la taille et de la disposition de plusieurs graphiques sur une seule feuille. Si c'est fait manuellement, vous pouvez maintenir ALT tout en redimensionnant ou en déplaçant le graphique pour "coller" aux limites de la cellule. Cela fonctionne pour quelques graphiques, mais une approche VBA est beaucoup plus simple.

Code pour créer une grille

Ce code créera une grille de graphiques commençant à une position donnée (en haut, à gauche), avec un nombre défini de colonnes et une taille de graphique commune définie. Les graphiques seront placés dans l'ordre dans lequel ils ont été créés et entoureront l'arête pour former une nouvelle ligne.

Sub CreateGridOfCharts()

    Dim int_cols As Integer
    int_cols = 3
    
    Dim cht_width As Double
    cht_width = 250
        
    Dim cht_height As Double
    cht_height = 200
    
    Dim offset_vertical As Double
    offset_vertical = 195
    
    Dim offset_horz As Double
    offset_horz = 40

    Dim sht As Worksheet
    Set sht = ActiveSheet

    Dim count As Integer
    count = 0
    
    'iterate through ChartObjects on current sheet
    Dim cht_obj As ChartObject
    For Each cht_obj In sht.ChartObjects
        
        'use integer division and Mod to get position in grid
        cht_obj.Top = (count \ int_cols) * cht_height + offset_vertical
        cht_obj.Left = (count Mod int_cols) * cht_width + offset_horz
        cht_obj.Width = cht_width
        cht_obj.Height = cht_height

        count = count + 1

    Next cht_obj
End Sub

Résultat avec plusieurs graphiques

Ces images montrent la disposition aléatoire originale des graphiques et la grille résultante d'exécuter le code ci-dessus.

Avant

avant image de plusieurs cartes

Après

grille de graphiques



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow