Graphique à plage de données de taille variable en vba Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
y
y.boukhalfa
Nouveau venu
Nouveau venu
Messages : 7
Inscrit le : 26 octobre 2016
Version d'Excel : 2007 FR

Message par y.boukhalfa » 27 octobre 2016, 09:44

Bonjour à toutes et à tous,

je souhaite généré un graphique automatiquement avec un code en VBA. J'ai un code (que j'ai adapté à mon cas) qui fonctionne, cependant je n'arrive pas à utiliser une variable pour déterminer l'indice de la dernière case de ma série de données.
Voici mon code et ainsi que le fichier excel sur le quel je souhaite l'appliquer. J'ai mis en gras les parties du code que je souhaite remplacer par des variables.

Merci d'avance pour vos réponses.
Private Sub Creation_graphique()
    Set F1 = Worksheets("feuil1")
    Dim N%
    Application.ScreenUpdating = False
    With Worksheets("Feuil1")
        N = .Cells(.Rows.Count, 1).End(xlUp).Row
        Charts.Add
        With ActiveChart
            .SetSourceData Source:=F1.Range("K13")
            .SeriesCollection.NewSeries
            With .SeriesCollection(1)
                .ChartType = xlXYScatterLinesNoMarkers
                .XValues = F1.[B1:B390]
                .Values = F1.[H1:H390]
                .Name = "V en cm/s"
            End With
            .SeriesCollection.NewSeries
            With .SeriesCollection(2)
                .ChartType = xlXYScatterLinesNoMarkers
                .XValues = F1.[B1:B390]
                .Values = F1.[J1:J390]
                .Name = "A en cm²/s²"
            End With
            .Location Where:=xlLocationAsObject, Name:=F1.Name
        End With
        ActiveChart.Parent.Name = "Graphique"
        With ActiveSheet.Shapes("Graphique")
            .Left = 50
            .Top = 50
            .Width = 1000
            .Height = 500
        End With
    End With
    [A1].Select
End Sub
Classeur1_aprèsmodif.xlsx
(31.14 Kio) Téléchargé 17 fois
Avatar du membre
Jean-Eric
Fanatique d'Excel
Fanatique d'Excel
Messages : 14'239
Appréciations reçues : 399
Inscrit le : 27 août 2012
Version d'Excel : 365 Personnel 32 bits

Message par Jean-Eric » 27 octobre 2016, 10:47

Bonjour,
Une proposition à étudier et à adapter à tes besoins.
Cdlt.
Public Sub Create_Chart()
Dim ws As Worksheet
Dim lastRow As Long, lColX As Long, lColY1 As Long, lColY2 As Long
Dim rngX As Range, rngY1 As Range, rngY2 As Range
Dim objChart As ChartObject

    Application.ScreenUpdating = False

    Set ws = ActiveWorkbook.Worksheets("Feuil1")

    On Error Resume Next
    ws.ChartObjects("Graphique").Delete
    On Error GoTo 0

    With ws
        lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
        lColX = 2: lColY1 = 8: lColY2 = 10
        Set rngX = .Cells(1, lColX).Resize(lastRow)
        Set rngY1 = .Cells(1, lColY1).Resize(lastRow)
        Set rngY2 = .Cells(1, lColY2).Resize(lastRow)
        Set objChart = .ChartObjects.Add(Left:=50, Top:=50, Width:=1000, Height:=500)
        objChart.Name = "Graphique"
    End With

    With objChart.Chart
        .ChartType = xlXYScatterLinesNoMarkers
        
        .SeriesCollection.NewSeries
        .SeriesCollection(1).XValues = rngX
        .SeriesCollection(1).Values = rngY1
        .SeriesCollection(1).Name = "V en cm/s"
        
        .SeriesCollection.NewSeries
        .SeriesCollection(2).XValues = rngX
        .SeriesCollection(2).Values = rngY2
        .SeriesCollection(2).Name = "A en cm²/s²"
    End With

    Set objChart = Nothing
    Set rngY2 = Nothing: Set rngY1 = Nothing: Set rngX = Nothing
    Set ws = Nothing

End Sub
Jean-Eric

Je ne réponds pas aux M.P. non sollicités.
y
y.boukhalfa
Nouveau venu
Nouveau venu
Messages : 7
Inscrit le : 26 octobre 2016
Version d'Excel : 2007 FR

Message par y.boukhalfa » 27 octobre 2016, 11:01

Merci, mais j'ai réussi a trouver une solution.
With Worksheets("Feuil1")
        Charts.Add
        With ActiveChart
            .SetSourceData Source:=F1.Range("K13")
            .SeriesCollection.NewSeries
            With .SeriesCollection(1)
                .ChartType = xlXYScatterLinesNoMarkers
                .XValues = F1.Range("B1:B" & N).Value
                .Values = F1.Range("H1:H" & N).Value
                .Name = "V en cm/s"
            End With
            .SeriesCollection.NewSeries
            With .SeriesCollection(2)
                .ChartType = xlXYScatterLinesNoMarkers
                .XValues = F1.Range("B1:B" & N).Value
                .Values = F1.Range("J1:J" & N).Value
                .Name = "A en cm²/s²"
            End With
            .Location Where:=xlLocationAsObject, Name:=F1.Name
        End With
        ActiveChart.Parent.Name = "Graphique"
        With ActiveSheet.Shapes("Graphique")
            .Left = 50
            .Top = 50
            .Width = 1000
            .Height = 500
        End With
    End With
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message