XL 2010 [VBA] Création de graphique sous plage variable

demonsares

XLDnaute Junior
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.
 

Pièces jointes

  • Graphique VBA.xlsm
    509.3 KB · Affichages: 60

Iznogood1

XLDnaute Impliqué
Bonjour,

un code "à l'arrache" à adapter
Code:
Option Explicit

Sub demo()
  Dim col As Integer
  Dim li As Long
  li = Feuil1.range("A1").CurrentRegion.Rows.Count
  For col = 5 To Feuil1.range("A1").CurrentRegion.Columns.Count
  ThisWorkbook.Worksheets.Add After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)

  ActiveSheet.Shapes.AddChart.Select
  ActiveChart.ChartType = xlXYScatterLines
  ActiveChart.SeriesCollection.NewSeries
  ActiveChart.SeriesCollection(1).Name = "='Analyse des données'!$" & ColLetter(Cells(1, col)) & "$1"
  ActiveChart.SeriesCollection(1).XValues = "='Analyse des données'!$C$2:$C$" & li
  ActiveChart.SeriesCollection(1).Values = "='Analyse des données'!$" & ColLetter(Cells(1, col)) & "$2:$" & ColLetter(Cells(1, col)) & "$" & li

 
  Next col
 

End Sub

Private Function ColLetter(range As range) As String
  Dim oRegEx As Object
  Set oRegEx = CreateObject("VBScript.RegExp")
  With oRegEx
  .Pattern = "\d+"
  ColLetter = .Replace(range.Address(False, False), "")
  End With
  Set oRegEx = Nothing
End Function
 

demonsares

XLDnaute Junior
Bonjour Iznogood1, merci d'avoir répondu, je regarde ça !

Après lecture, j'ai du mal à l'adapter je ne comprends pas le code...
Je ne suis pas très doué en VBA, souvent je me débrouille à la bidouille et avec les commentaires des programmes...
 
Dernière édition:

demonsares

XLDnaute Junior
Après plusieurs recherches et tâtonnements et l'aide de Iznogood1 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
 

Discussions similaires

Réponses
0
Affichages
137

Statistiques des forums

Discussions
312 104
Messages
2 085 345
Membres
102 868
dernier inscrit
JJV