[VBA] Création de graphiques à plage variable

Bonjour à toutes et à tous, Bonjour le Forum,

Je me permet de venir poster ici mon problème après de grosses recherches.

J'ai trouvé beaucoup de réponses, j'ai essayé de les adapter à mon problème, mais à chaque fois c'est l'échec...

Problématique : Je dois créer un nombre de graphique correspondant au nombre de colonne à partir de la colonne F, soit la colonne 5. Dans mon fichier ci-joint, j'ai donc 5 colonnes, soit 5 graphiques à créer et donc le graphique 1 ira dans l'onglet Graphique 1, le graphique 2 dans l'onglet Graphique 2 etc...

Mes recherches : Actuellement j'ai plusieurs bouts de codes... C'est vraiment le "bordel", j'en ai cherché de partout et comme cité ci-dessus, je n'ai pas réussit :

'Nbr_palier = InputBox("Rentrer le nombre de palier d'étalonnage :")

NumCol = 5

NumLig = 6208

Worksheets("Graphique").Visible = 1

For i = 1 To NumCol

Sheets("Graphique").Select

With ActiveWorkbook.ActiveSheet

.Copy After:=Worksheets("Graphique")

End With

ActiveSheet.Name = ("Graphique " & i)

s = Sheets.Count - 1

For b = 1 To s

Sheets("Graphique " & i).Select

Sheets("Graphique " & i).Move After:=Sheets(b)

Next b

Next i

Dim NoCol As Integer

Dim NoCol2 As Integer

Dim Plage As Variant

Dim Plage2 As Variant

Dim Adresse As Variant

NoCol = counter + 1

NoCol2 = counter + 135

Adresse = Cells(2, NoCol).Address & ":" & Cells(1 + nbdonne, NoCol2).Address ' peut importe ne sert qu'à créer le graph

Plage = "=sheet2!" & Cells(2, NoCol).Address(ReferenceStyle:=xlR1C1) & ":" & Cells(1 + nbdonne, NoCol).Address(ReferenceStyle:=xlR1C1)

Plage2 = "=sheet2!" & Cells(2, NoCol2).Address(ReferenceStyle:=xlR1C1) & ":" & Cells(1 + nbdonne, NoCol2).Address(ReferenceStyle:=xlR1C1)

Charts.Add

ActiveChart.ChartType = xlXYScatter

ActiveChart.SetSourceData Source:=Sheets("sheet2").Range(Adresse), PlotBy:=xlColumns

ActiveChart.SeriesCollection(1).XValues = Plage

ActiveChart.Location Where:=xlLocationAsObject, Name:=sheetname

ActiveWindow.Visible = False

ActiveChart.SeriesCollection(1).XValues = Plage

ActiveChart.SeriesCollection(1).Values = Plage2

'For i = 1 To NumCol

' Sheets("Graphique " & i).Select

' Range(Cells(2, NumCol + i), Cells(NumLig, NumCol + i)).Select

' ActiveSheet.Shapes.AddChart.Select

' ActiveChart.ChartType = xlXYScatter

' ActiveChart.SetSourceData Source:=Sheets("Analyse des données").Range(Cells(2, NumCol + i), Cells(NumLig, NumCol + i), Cells(2, 5), Cells(NumLig, 5))

' With ActiveChart

' .HasTitle = False

' .Axes(xlCategory, xlPrimary).HasTitle = False

' .Axes(xlValue, xlPrimary).HasTitle = False

' End With

'Next i

'Sheets("Analyse des données").Select

'Range(Cells(2, NumCol), Cells(NumLig, NumCol + i)).Select

'ActiveSheet.Shapes.AddChart.Select

'ActiveChart.ChartType = xlXYScatter

'ActiveChart.SetSourceData Source:=Sheets("Analyse des données").Range(Cells(2, NumCol), Cells(NumLig, NumCol + i))

'NbGraph = Sheets("Analyse des données").ChartObjects.Count

'Sheets("Analyse des données").ChartObjects(NbGraph).Activate

'ActiveChart.Parent.Cut

'Sheets("Graphique " & i & "").Select

'Range("A4").Select

'ActiveSheet.Paste

'Sheets("Analyse des données").Select

'Minimum = Cells(b, 2).Value

'Maximum = Cells(C, 2).Value

'NbGraph = Sheets("Graphique " & i & "").ChartObjects.Count

'Sheets("Graphique " & i & "").ChartObjects(NbGraph).Activate

' ActiveChart.Axes(xlValue).Select

' ActiveChart.Axes(xlValue).MinimumScale = Minimum - 5

' ActiveChart.Axes(xlValue).MaximumScale = Maximum + 5

'Next i

'Sheets("Analyse des données").Select

'd = 6

'For i = 1 To NumCol

'NbGraph = Sheets("Graphique " & i & "").ChartObjects.Count

'Sheets("Graphique " & i & "").ChartObjects(NbGraph).Activate

'Next i

'NumCol = 10 - 5

'NumLig = 6208

'Worksheets("Graphique").Visible = 1

'For Z = 1 To NumCol

'Sheets("Graphique").Select

' With ActiveWorkbook.ActiveSheet

' .Copy After:=Worksheets("Graphique")

' End With

'ActiveSheet.Name = ("Graphique " & Z)

's = Sheets.Count - 1

'For i = 1 To s

'Sheets("Graphique " & Z).Select

'Sheets("Graphique " & Z).Move After:=Sheets(i)

'Next i

'Range(Cells(2, Z + 5), Cells(NumLig, Z + 5)).Select

'ActiveSheet.Shapes.AddChart.Select

'ActiveChart.ChartType = xlXYScatter

'ActiveChart.SetSourceData Source:=Sheets("Analyse des données").Range(Cells(2, Z + 5), Cells(NumLig, Z + 5))

'NbGraph = Sheets("Analyse des données").ChartObjects.Count

'Sheets("Analyse des données").ChartObjects(NbGraph).Activate

'ActiveChart.Parent.Cut

'Sheets("Graphique " & Z & "").Select

'Range("A4").Select

'ActiveSheet.Paste

'ActiveSheet.Shapes.AddChart.Select

'ActiveChart.ChartType = xlXYScatterSmooth

'ActiveChart.SeriesCollection.NewSeries

'ActiveChart.SeriesCollection(1).Name = "='Analyse des données'!$F$1"

'ActiveChart.SeriesCollection(1).XValues = "='Analyse des données'!$E$2:$E$6208"

'ActiveChart.SeriesCollection(1).Values = "='Analyse des données'!$F$2:$F$6208"

'Next Z

'Sheets.Add After:=Sheets(Sheets.Count)

'Sheets(Sheets.Count).Name = "Données ciblées"

'Range("A1").Select

End Sub

Si vous êtes arrivés ici et que vous n'avez pas tout lu concernant mes recherches, c'est tout à fait normal.

Je vais redéfinir le concept.

J'ai un tableau de colonne variable et de ligne variable. Actuellement dans mon cas j'ai 6208 lignes et 10 colonnes. Dans ce tableau seul les colonnes ayant des valeurs numériques (°C) m'intéresse. J'en ai donc 5 ! Mais ce nombre peu à l'avenir changer. Pour cela j'ai mis une variable NumCol qui compte le nombre de colonnes et je fais NumCol = NumCol - 5 (en effet les 5 premières colonnes ne me servent à rien).

Les lignes seront aussi variables.

Il faut créer un graphique capable de se tracer en fonction d'un nombre de lignes variables et qu'il y en ai autant que de colonnes.


Voici le fichier

92graphique-vba.zip (427.61 Ko)

Voici le code que j'ai actuellement et que j'essaye de bidouiller depuis hier

Sub Création_Graphique()

NumLig = 6208
NumCol = 10 - 5

For i = 1 To NumCol

Range(Cells(2, 5), Cells(NumLig, NumCol)).Select
ActiveSheet.Shapes.AddChart.Select
ActiveChart.ChartType = xlXYScatter
ActiveChart.SetSourceData Source:=Sheets("Analyse des données").Range(Cells(2, 5), Cells(NumLig, NumCol))

NbGraph = Sheets("Analyse des données").ChartObjects.Count
Sheets("Analyse des données").ChartObjects(NbGraph).Activate
ActiveChart.Parent.Cut
Sheets("Graphique " & i & "").Select
Range("A4").Select
ActiveSheet.Paste

NbGraph = Sheets("Graphique " & i & "").ChartObjects.Count
Sheets("Graphique " & i & "").ChartObjects(NbGraph).Activate

    ActiveChart.Axes(xlValue).Select
    ActiveChart.Axes(xlValue).MinimumScale = Minimum - 5
    ActiveChart.Axes(xlValue).MaximumScale = Maximum + 5

Next i
Sheets("Analyse des données").Select

For i = 1 To NumCol

NbGraph = Sheets("Graphique " & i & "").ChartObjects.Count
Sheets("Graphique " & i & "").ChartObjects(NbGraph).Activate

End Sub

Après plusieurs recherches et tâtonnements j'ai réussit à réalisé en VBA ce que je voulais, voici le résultat, cela peut intéresser d'autres personnes :

'##################### CREATION DES GRAPHIQUES #####################

NumCol2 = NumCol2 - 5
Worksheets("Graphique").Visible = 1

For i = 1 To NumCol2
    Sheets("Graphique").Select
        With ActiveWorkbook.ActiveSheet
        .Copy After:=Worksheets("Graphique")
        End With

    ActiveSheet.Name = ("Graphique " & i)
    s = Sheets.Count - 1

        For b = 1 To s
            Sheets("Graphique " & i).Select
            Sheets("Graphique " & i).Move After:=Sheets(b)
        Next b

    Sheets("Analyse des données").Select
    range(Cells(2, 5 + i), Cells(NumLig3, 5 + i)).Select
    ActiveSheet.Shapes.AddChart.Select
    ActiveChart.ChartType = xlXYScatter
    ActiveChart.PlotArea.Select

    ActiveChart.SeriesCollection(1).Name = "='Analyse des données'!$" & ColLetter(Cells(1, 5 + i)) & "$1"
    ActiveChart.SeriesCollection(1).XValues = "='Analyse des données'!$E$2:$E$" & NumLig3
    ActiveChart.SeriesCollection(1).Values = "='Analyse des données'!$" & ColLetter(Cells(1, 5 + i)) & "$2:$" & ColLetter(Cells(1, 5 + i)) & "$" & NumLig3

        With ActiveChart
            .HasTitle = False
            .Axes(xlCategory, xlPrimary).HasTitle = False
            .Axes(xlValue, xlPrimary).HasTitle = False
        End With

    ActiveChart.Parent.Cut
    Sheets("Graphique " & i).Select
    range("C6").Select
    ActiveSheet.Paste
    Sheets("Analyse des données").Select

Next i
Worksheets("Graphique").Visible = 0
Rechercher des sujets similaires à "vba creation graphiques plage variable"