Graphique et zones de données non contigües

Bonjour à tous et merci d'avance,

Malgré mes recherches je ne trouve pas la bonne méthode pour satisfaire mon besoin: j'ai sur une feuille une plage de données X a un endroit et mes valeurs Y dans une autre (jusque là, tout est normal). Ces 2 plages sont des lignes et je boucle pour générer des graphiques pour chacune des lignes de valeurs Y. X reste constant.

Or je n'arrive pas à trouver une syntaxe dans "ActiveChart.SetSourceData Source:=" qui me permettent de générer un graphique pour une ligne.

J'ai essayé "Union"; "ActiveChart.FullSeriesCollection(1).Values" mais quelle que soit la méthode avec laquelle je déclare mon Range de données j'ai droit à une erreur (En général "Erreur 91")

Ci dessous mon bout de code quasimodo:

For i = NbEt + 13 To NbEt + 13 + NbActeur - 1
Set Data = Union(Range(Cells(NbEt + 12, 17), Cells(NbEt + 12, NbCol + 17)), Range(Cells(i, 17), Cells(i, NbCol + 17)))
Set GraphRepTemp = ActiveSheet.ChartObjects.Add(Left:=180, Width:=300, Top:=7, Height:=200)
GraphRepTemp.Chart.ChartType = xlLine
' ActiveChart.FullSeriesCollection(1).Name = " Graph Charge Temp"
ActiveChart.SeriesCollection(1).XValues = ActiveSheet.Range(Cells(NbEt + 12, 17), Cells(NbEt + 12, NbCol + 17)) (Ligne en erreur 91)
ActiveChart.FullSeriesCollection(1).Values = ActiveSheet.Range(Cells(i, 17), Cells(i, NbCol + 17))

' ActiveChart.SetSourceData Source:=Sheets("Charge_YQDB").Range(Data), PlotBy:=xlRow (Ligne en erreur 1004)
' ActiveChart.SetSourceData Source:=Union(Range(Cells(NbEt + 12, 17), Cells(NbEt + 12, NbCol + 17)), Range(Cells(i, 17), Cells(i, NbCol + 17))), PlotBy:=xlRow (Erreur 91)

GraphRepTemp.Chart.Location Where:=xlLocationAsObject, Name:=Range(Cells(i, 1), Cells(i, 1)).Value
Sheets("Charge_YQDB").Select
Next i

Merci d'avance pour votre aide.

Cordialement

Kade

Bonjour Kade,

ce code fonctionne (à adapter)

Dim Valeur_serie As String
'
    Valeur_serie = "='" & ActiveSheet.Name & " '!" & "$C$23:$C$29" & ",'" & ActiveSheet.Name & " '!" & "$C$30:$C$35"
    ActiveChart.FullSeriesCollection(1).Values = Valeur_serie

C'est comme si vous deviez indiquer une formule pour une cellule.

Dans votre code

ActiveChart.FullSeriesCollection(1).Values = ActiveSheet.Range(Cells(i, 17), Cells(i, NbCol + 17))

N'oubliez pas les quotes (') qui encadrent le nom de la feuille car si le nom comportent des espaces, il y aura une erreur.

Bonjour !

À tester :

For i = NbEt + 13 To NbEt + 13 + NbActeur - 1
    Set Data = Union(Range(Cells(NbEt + 12, 17), Cells(NbEt + 12, NbCol + 17)), Range(Cells(i, 17), Cells(i, NbCol + 17)))
    Set GraphRepTemp = ActiveSheet.ChartObjects.Add(Left:=180, Width:=300, Top:=7, Height:=200)
    GraphRepTemp.Chart.ChartType = xlLine

    ' Ajout d'une série au graphique avant de définir les XValues et Values
    Dim ser As Series
    Set ser = GraphRepTemp.Chart.SeriesCollection.NewSeries
    ser.XValues = ActiveSheet.Range(Cells(NbEt + 12, 17), Cells(NbEt + 12, NbCol + 17))
    ser.Values = ActiveSheet.Range(Cells(i, 17), Cells(i, NbCol + 17))

    GraphRepTemp.Chart.Location Where:=xlLocationAsObject, Name:=Range(Cells(i, 1), Cells(i, 1)).Value
    Sheets("Charge_YQDB").Select
Next i

Je reprends mon code précédent pour être au plus près du vôtre.
Comme les n° de colonnes de vos cellules sont des nombres et non des lettres, il faut passer (je n'ai pas trouvé d'autre solution) par une macro (NomCol) qui transforme le n° de colonne par son code alphabétique

Dim Valeur_serie As String
    ' ... 
    '''' ActiveChart.SeriesCollection(1).XValues = ActiveSheet.Range(Cells(NbEt + 12, 17), Cells(NbEt + 12, NbCol + 17)) (Ligne en erreur 91)
    Valeur_serie = "='" & ActiveSheet.Name & "'!" & "$" & NomCol(17) & "$" & NbEt + 12 & ":$" & NomCol(nbcol+17) & "$" & NbEt + 12
    ActiveChart.FullSeriesCollection(1).XValues = Valeur_serie
    '''' ActiveChart.FullSeriesCollection(1).Values = ActiveSheet.Range(Cells(i, 17), Cells(i, NbCol + 17))
    Valeur_serie = "='" & ActiveSheet.Name & "'!" & "$" & NomCol(17) & "$" & i & ":$" & NomCol(nbcol+17) & "$" & i
    ActiveChart.FullSeriesCollection(1).Values = Valeur_serie
    ...
    ' la suite de votre code
End Sub
Public Function NomCol(pNoCol As Integer) As String
' renvoie le code Alpha de colonne à partir de son n° (4 -> "D")
On Error GoTo NomColErreur
    NomCol = Cells(1, pNoCol).Address(RowAbsolute:=False, ColumnAbsolute:=False)
    NomCol = CStr(Left(NomCol, Len(NomCol) - 1))
Exit Function
NomColErreur:
    MsgBox "NomCol ('" & pNoCol & "') : " & CStr(CVErr(Err.Number))
    NomCol = ""
End Function

Bonjour et merci pour vos retours Clr et Abderrahmane.

Je teste ça et reviens vers vous ;-)

Hello,

Vos solutions fonctionnent.

Mais, finalement, je m'en suis tiré comme suit en faisant abstraction de la définition de l'objet Chart :

For i = NbEt + 13 To NbEt + 13 + NbActeur - 1 Set Data = Union(Range(Cells(NbEt + 12, 17), Cells(NbEt + 12, NbCol + 17)), Range(Cells(i, 17), Cells(i, NbCol + 17))) NomFeuil = "Graph " & Cells(i, 1) Data.Select Charts.Add ActiveSheet.Name = NomFeuil

Next i

Je ne comprends toujours pas pourquoi mes définitions initiales (post du 08/06) ne fonctionnaient pas... :-(

Rechercher des sujets similaires à "graphique zones donnees contig"