web-dev-qa-db-fra.com

Créer un graphique à partir des données du tableau et non de la plage

est-il possible de créer un graphique (par exemple un graphique linéaire à double axe Y) non pas à partir de plages, mais à partir de données de tableau? Si c'est le cas, comment?

20
sifar

Oui. Vous pouvez affecter des tableaux aux propriétés XValues et Values d'un objet Series sur un graphique. Exemple:

Dim c As Chart
Dim s As Series
Dim myData As Variant

Set c = ActiveChart ' Assumes a chart is currently active in Excel...
Set s = c.SeriesCollection(1)

myData = Array(9, 6, 7, 1) ' or whatever
s.Values = myData
15

Vous pouvez attribuer des tableaux à des séries de graphiques dans Excel 2007, mais dans les versions précédentes, je crois qu'il y a une limite de 255 caractères pour la longueur de chaque série. Une méthode que j'ai utilisée pour contourner cette restriction est illustrée dans l'exemple de marche aléatoire suivant:

Sub ChartArray()

Dim x(0 To 1000, 0 To 0) As Double
Dim y(0 To 1000, 0 To 0) As Double
x(0, 0) = 0
y(0, 0) = 0
For i = 1 To 1000
    x(i, 0) = i
    y(i, 0) = y(i - 1, 0) + WorksheetFunction.NormSInv(Rnd())
Next i

Charts.Add
ActiveChart.ChartType = xlXYScatterLinesNoMarkers
With ActiveChart.SeriesCollection
    If .Count = 0 Then .NewSeries
    If Val(Application.Version) >= 12 Then
        .Item(1).Values = y
        .Item(1).XValues = x
    Else
        .Item(1).Select
        Names.Add "_", x
        ExecuteExcel4Macro "series.x(!_)"
        Names.Add "_", y
        ExecuteExcel4Macro "series.y(,!_)"
        Names("_").Delete
    End If
End With
ActiveChart.ChartArea.Select

End Sub

Une autre méthode consiste à attribuer des noms aux tableaux (similaire à la solution de contournement ci-dessus), puis à définir la série pour faire référence aux noms attribués. Cela fonctionne bien dans toutes les versions tant que vous enregistrez au format xls, mais il semble y avoir une limitation de longueur pour les tableaux nommés de 8192 caractères lors de l'enregistrement aux nouveaux formats xlsx/xlsm/xlsb.

9
lori_m