Bonjour,

J'ai un problème pour créer dynamiquement un graphique sur une feuille selon un tableau de valeurs à 3 colonnes.

Axe X Séries Valeurs (Y)
Time [h] RAT MEAN
0.25 Rat 397 1040
0.5 Rat 397 3570
1 Rat 397 4230
2 Rat 397 3360
4 Rat 397 322
6 Rat 397 BLQ
0.25 Rat 398 3270
0.5 Rat 398 3590
1 Rat 398 3620
2 Rat 398 3180
4 Rat 398 1650
6 Rat 398 464
0.25 Rat 399 2480
0.5 Rat 399 3780
1 Rat 399 4100
2 Rat 399 5160
4 Rat 399 4270
6 Rat 399 480

Pour chaque série (Rat), j'ai une valeur (Mean) donnée en fonction du temps (Time).

Voila le code où Atitle est le nom de mon graphique, Asheet le nom de la feuille sur lequel je l'insère, Arange la plage de données.

Exemple d'appel: Call CreateChart("Graphique1", "Feuille1", "A6") me crée un tableau sur la feuille sélectionnée.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
Sub CreateChart(Atitle As String, Asheet As String, Arange As String)
'---------------------------------------------------------------------------------------
' Procedure : CreateChart
' Author    : 
' Date      : 09/06/2008
' Purpose   :
'---------------------------------------------------------------------------------------
'
    On Error GoTo CreateChart_Error
        Dim mychart As ChartObject
        Dim myrange As Range
        Dim mysheetname As String
 
        Charts.Add
 
        With ActiveChart
            ActiveChart.Name = Atitle
            ActiveChart.ChartType = xlLineMarkers
            ActiveChart.SetSourceData Source:=Sheets(Asheet).Range(Arange), PlotBy:= _
            xlColumns
            ActiveChart.Location Where:=xlLocationAsObject, Name:=Asheet
            ActiveChart.HasLegend = True
            ActiveChart.AutoScaling = False
        End With
 
        ActiveChart.SeriesCollection.NewSeries
 
        ActiveChart.SeriesCollection(1).XValues = Range(Arange).Value
 
        ActiveChart.SeriesCollection(1).Values = "=" & Asheet & "!R13C4:R18C4"
        ActiveChart.SeriesCollection(1).Name = Range(Arange).Offset(1, 1)
        ActiveChart.SeriesCollection(2).Values = "=" & Asheet & "!R19C4:R24C4"
        ActiveChart.SeriesCollection(2).Name = Range(Arange).Offset(7, 1)
        'ActiveChart.SeriesCollection(3).Values = "=" & Asheet & "!R25C4:R30C4"
        'ActiveChart.SeriesCollection(3).Name = Range(Arange).Offset(13, 1)
 
        ActiveChart.Legend.Select
        Selection.Position = xlBottom
        '
    On Error GoTo 0
        Exit Sub
 
CreateChart_Error:
 
    MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure CreateChart of Module Module6"
'
End Sub

Je souhaite optimiser les choses suivantes:
1) J'ai un message d'erreur sur la 3ème série.
2) Je souhaite créer une boucle car la taille de chaque série n'est pas fixe.
3) Je voudrais remplacer les références RxCx par des Cells() (ou au pire Range)
4) Déterminer la position x,y de mon graphe