Boucle 'for' pour la création de plusieurs graphiques

Bonjour,

Je suis relativement nouveau en programmation VBA, j'ai récolté plusieurs infos utiles sur le forum pour avancer mais je bloque toujours.

Mon problème est une écriture de macro afin de produire plusieurs graphiques grâce à une boucle for.

L'erreur est sur la boucle for dont j'ai donné le nom 'j'. Je ne sais pas comment inscrire la variable 'j' à l'intérieur des commandes du graphique.

Sub Macro13()
'

For j = 6 To 38

ActiveSheet.Shapes.AddChart.Select
    ActiveChart.ChartType = xlLine
    ActiveChart.SetSourceData Source:=Range("'Sheet1'!$c$j:$ND$j")
    ActiveChart.SeriesCollection(1).XValues = Range("'Sheet1'!$c$4:$ND$4")
    ActiveChart.SeriesCollection(1).Name = Range("'Sheet1'!$B$j:$B$j").Cells(1, 1).Value

Next j

End Sub

Je vous remercie d'avance pour tout aide.

Pablo

Salut Pablo et bienvenue sur le Forum,

Si tu veux remplacer des données de base par une variable, tu dois – à l’endroit de la ‘cassure’ – fermer le string précédent par un signe ", placer le signe & avant ta variable, puis ta variable, encore un signe & en enfin encore un dernier signe " afin de créer un nouveau string sur la deuxième partie de ta référence.

Ainsi, si dans l’instruction ci-dessous

Source:=Range("Feuil1!$A$1:$B$11")

tu veux remplacer le 1 par une variable ça va donner

Source:=Range("Feuil1!$A$" & j & ":$B$11")

Cet exemple est illustré dans le fichier ci-joint. Si tu lances la macro par le bouton en place, ça fonctionne bien.

Cordialement.

241classeur1.xlsx (11.55 Ko)

Ça fonctionne parfaitement!! Merci beaucoup Yvouille pour ton aide rapide et clair.

Une autre question si cela ne te dérange pas. Dans le même code, si je veux déplacer chaque graphique créer dans une nouvelle page (existante) dédié aux graphiques, que j'appelle ici "chart3", j'obtient une erreur avec la nouvelle ligne rajouté.

For j = 6 To 38

ActiveSheet.Shapes.AddChart.Select
    ActiveChart.ChartType = xlLine
    ActiveChart.SetSourceData Source:=Range("'Sheet1'!$c$" & j & ":$ND$" & j & "")
    ActiveChart.SeriesCollection(1).XValues = Range("'Sheet1'!$c$4:$ND$4")
    ActiveChart.SeriesCollection(1).Name = Range("'Sheet1'!$B$" & j & ":$B$" & j & "").Cells(1, 1).Value

    ActiveChart.Location Where:=xlLocationAsObject, Name:="Chart3"

Next j

Excel me renvoie l'erreur sur la première ligne de code: ActiveSheet.Shapes.AddChart.Select

Merci encore pour l'aide que tu pourrais m'apporter.

Cordialement,

Pablo

Re,

Par l’enregistreur de macros, j’ai découvert que l’on peut couper un graphique sur une feuille et le coller sur une autre feuille. Il faudrait pour cela au préalable récupérer le nom du graphique nouvellement créé.

Sub Macro2()
    ActiveSheet.ChartObjects("Graphique 4").Activate
    ActiveChart.PlotArea.Select
    ActiveChart.Parent.Cut
    Sheets("Feuil2").Select
    Range("F7").Select
    ActiveSheet.Paste
End Sub

Mais rien ne dit que ce soit la bonne solution.

Je veux bien essayer de t’aider – bien que les graphiques ne soient pas ma tasse de thé – mais il me faudrait ton fichier afin de pouvoir tester mon idée ci-dessus.

Alors, tu me l’envoies ?

Amicalement.

En effet, excel ne revenait pas à ma feuille de valeurs pour créer un nouveau graphique.

J'ai joint le fichier excel. Ce sont des valeurs de débits pour différentes années. Ma macro s'appelle principale ici.

J'ai découvert une erreur dans la création de graphes : lors d'une itération sur une valeur de j, excel commence à tracer à partir de la première valeur, alors que souhaiterai qu'il trace des le premiers jours de l'année, même s'il n'y a pas de valeurs. Est-ce qu'il y a un moyen de remédier à cela?

Je tiens à te remercier de l'attention que tu portes à ce problème. C'est très apprécié !

58debits.xlsm (86.24 Ko)

Re,

La macro ci-dessous devrait répondre à ton attente, mais je ne place pas les graphies créés les uns à la suite de autres sur le feuille ‘Chart3’, mais sur une feuille normale, de manière à pouvoir incrémenter l’emplacement du prochain graphique.

Sub Pricipale()

Application.ScreenUpdating = False

i = 2

For j = 6 To 38

ActiveSheet.Shapes.AddChart.Select
    ActiveChart.ChartType = xlLine
    ActiveChart.SetSourceData Source:=Range("'Sheet1'!$c$" & j & ":$ND$" & j & "")
    ActiveChart.SeriesCollection(1).XValues = Range("'Sheet1'!$c$4:$ND$4")
    ActiveChart.SeriesCollection(1).Name = Range("'Sheet1'!$B$" & j & ":$B$" & j & "").Cells(1, 1).Value
    xx = Right(ActiveChart.Name, Len(ActiveChart.Name) - 7)

    ActiveSheet.ChartObjects(xx).Activate
    ActiveChart.Parent.Cut
    Sheets("Feuil1").Select
    Range("B" & i).Select
    ActiveSheet.Paste

    Sheets("Sheet1").Select

    i = i + 18

Next j

End Sub

A te relire.

145debits-v1.xlsm (70.50 Ko)

Cher Yvouille tu es très bon, c'est exactement ce que je voulais!

Merci beaucoup!

Amicalement,

Pablo

Rechercher des sujets similaires à "boucle creation graphiques"