Graphique en boucle sur différents onglets

Bonjour à toutes et à tous,

Je suis débutant dans les macros excel et je recherche un code permettant de générer un graphique pour chaque ligne d'un tableau. Les graphiques seraient générés sur des onglets différents afin de pouvoir les éditer indépendamment.

En espérant avoir été clair.

merci d'avance à ceux qui disposent déja de ce codes ou aux pros capables de l'écrire.

bonjour,

voici un proposition de macro

Sub generegraphe()

' à adapter remplacer sheet1 par le nom de la feuille contenant les données pour les graphes
Set ws1 = Sheets("sheet1")
' à adapter
premierecolonne = "A"
dernierecolonne = "F"

' première ligne contenant des données
ligne = 1
' on lance une boucle sur les lignes de données
While ws1.Cells(ligne, 1) <> ""
   ' on ajoute un feuille
   Sheets.Add After:=Sheets(Sheets.Count)
   Set ns = Sheets(Sheets.Count)
    ' on la nomme en fonction du numéro de ligne des données
   ns.Name = "graphe " & ligne
   ' on y insère un graphe
   ns.Shapes.AddChart.Select
   ' on précise la source des données
   ActiveChart.SetSourceData Source:=Range("'" & ws1.Name & "'!" & premierecolonne & ligne & ":" & dernierecolonne & ligne)
   ' on précise le type de graphe
   ActiveChart.ChartType = xlColumnClustered
   'on passe à la ligne de données suivante
   ligne = ligne + 1
Wend
Set ws1 = Nothing
Set ns = Nothing
End Sub

Merci H2SO4 pour ta réponse très rapide et qui fonctionne parfaitement.

C'est ce que j'attendais

Je te remercie tu me retires une épine du pied.

Bonne continuation

Rebonjour,

j'ai une demande de modification sur le code généreusement transmis par H2SO4.

je souhaiterai que les graphiques ne soient pas générés en tant qu'objet sur une feuille mais plutot dans une feuille ou il n'y a que le graphique (fonction déplacer le graphique sous excel).

Est ce possible?

Merci d'avance

voici le code adapté.

Sub generegraphe()

' à adapter remplacer sheet1 par le nom de la feuille contenant les données pour les graphes
Set ws1 = Sheets("sheet1")
' à adapter
premierecolonne = "A"
dernierecolonne = "F"
Application.DisplayAlerts = False
' première ligne contenant des données
ligne = 1
' on lance une boucle sur les lignes de données
While ws1.Cells(ligne, 1) <> ""
   ' on ajoute un feuille
 ' on ajoute un feuille
  Sheets.Add After:=Sheets(Sheets.Count)
   Set ns = Sheets(Sheets.Count)
    ' on la nomme en fonction du numéro de ligne des données
   ' on y insère un graphe
  ns.Shapes.AddChart.Select
   ' on précise la source des données
  ActiveChart.SetSourceData Source:=Range("'" & ws1.Name & "'!" & premierecolonne & ligne & ":" & dernierecolonne & ligne)
   ' on précise le type de graphe
  ActiveChart.ChartType = xlColumnClustered

' on copie le graphe dans une nouvelle feuille
  ActiveChart.Location Where:=xlLocationAsNewSheet
  ActiveChart.Name = "Graphique " & ligne
  ns.Delete

 'on passe à la ligne de données suivante

  ligne = ligne + 1
Wend
Set ws1 = Nothing
Set ns = Nothing
End Sub

Mille mercis H2SO4, ça marche très bien.

Encore une fois, tu as été très réactif.

A+

Bonjour les amis,

J'ai une nouvelle demande concernant ce graphique.

1ere question

Ma plage de données se situe entre les cellules C2 et M20

Le titre de mes données entre C1 et M1

Mes séries sont situées entre B2 et B20

Je voudrais adapter ce code pour faire apparaitre les étiquettes de chaque colonne sur ce graphique.

Je pense qu'il faut ajouter une ligne au niveau de la précision du type de graphique mais je ne sais pas l'écrire.

2eme question

Concernant le premier code, comment je peux indiquer la position du graphique sur une ou plusieurs cellules et en adapter le format (par exemple que le coin gauche en haut du graphique se situe sur la cellule C10)

Je vous remercie par avance

A+

Bonjour,

si j'ai bien compris ta première demande, voici la macro adaptée. données en B1 à M20, avec 19 séries et label en colonne B et ligne 1

pour la deuxième, comme tu as explicitement demandé d'avoir des graphes sur des feuilles séparées de type chart, il n'y a pas de cellule, donc je ne comprends pas ce que tu veux.

Sub generegraphe()

' à adapter remplacer sheet1 par le nom de la feuille contenant les données pour les graphes
Set ws1 = Sheets("sheet1")
' à adapter
premierecolonne = "B"
dernierecolonne = "M"
Application.DisplayAlerts = False
' première ligne contenant des données
ligne = 2
' on lance une boucle sur les lignes de données
While ws1.Cells(ligne, 1) <> ""
   ' on ajoute un feuille
' on ajoute un feuille
 Sheets.Add After:=Sheets(Sheets.Count)
   Set ns = Sheets(Sheets.Count)
    ' on la nomme en fonction du numéro de ligne des données
  ' on y insère un graphe
 ns.Shapes.AddChart.Select
   ' on précise la source des données
   rg = "'" & ws1.Name & "'!" & premierecolonne & "1:" & dernierecolonne & "1,'" & ws1.Name & "'!" & premierecolonne & ligne & ":" & dernierecolonne & ligne
 ActiveChart.SetSourceData Source:=Range(rg)
   ' on précise le type de graphe
 ActiveChart.ChartType = xlColumnClustered

' on copie le graphe dans une nouvelle feuille
 ActiveChart.Location Where:=xlLocationAsNewSheet
  ActiveChart.Name = "Graphique " & ligne
  ns.Delete

 'on passe à la ligne de données suivante

  ligne = ligne + 1
Wend
Set ws1 = Nothing
Set ns = Nothing
End Sub

Merci h2so4,

le code que tu m'as envoyé fonctionne très bien, je dirai comme d'habitude. C'est ce qe j'attendais.

Ma deuxième demande correspond à une nouvelle attente, je veux placer un graphique dans une fiche qui fonctionne en boucle également.

Je dispose actuellement d'un code qui me permet de générer cette fiche et je voudrais intégrer ton premier code dedans pour placer un graphique à un endroit particulier (par exemple sur une cellule) et pouvoir adapter sa taille

Je te transmets le code si tu veux, c'est le suivant :

Sub test_Click()

Dim i As Integer

Dim e As Integer

Dim nb As Integer

i = 1 'compteur de ligne

e = 2 '

nb = WorksheetFunction.CountIf(Range("A1:A180"), "*")

nb = nb - 1

MsgBox "Nombre de feuilles a générer " & nb, vbOKOnly + vbInformation, "Feuilles a générer"

Dim nomfeuille As String

nomfeuille = ""

While i < nb + 1

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

ActiveSheet.Name = Sheets(1).Range(("A") & e).Text

nomfeuille = Sheets(1).Range(("A") & e).Text

'Ajustement des marges pour l'impresssion

With ActiveSheet.PageSetup

.LeftMargin = Application.InchesToPoints(0.590551181102362)

.RightMargin = Application.InchesToPoints(0.590551181102362)

.TopMargin = Application.InchesToPoints(0.393700787401575)

.BottomMargin = Application.InchesToPoints(0.393700787401575)

.HeaderMargin = Application.InchesToPoints(0.511811023622047)

.FooterMargin = Application.InchesToPoints(0.511811023622047)

.PrintArea = "$A$1:$H$33"

End With

Sheets("fiche descriptive").Select

Cells.Select

Selection.Copy

Sheets(nomfeuille).Select

Cells.Select

ActiveSheet.Paste

ActiveSheet.Range("D1") = nomfeuille

'Fin de la procédure, on passe a la feuille suivante

i = i + 1

e = e + 1

Wend

e = e - 2

MsgBox "Nombre de feuilles générées : " & e, vbOKOnly + vbInformation, "Fin de la Génération"

End Sub

Peux tu me l'intégrer dans mon code?

Merci d'avance

Encore merci pour ce que tu fais H2SO4

A+


Merci h2so4,

le code que tu m'as envoyé fonctionne très bien, je dirai comme d'habitude. C'est ce qe j'attendais.

Ma deuxième demande correspond à une nouvelle attente, je veux placer un graphique dans une fiche qui fonctionne en boucle également.

Je dispose actuellement d'un code qui me permet de générer cette fiche et je voudrais intégrer ton premier code dedans pour placer un graphique à un endroit particulier (par exemple sur une cellule) et pouvoir adapter sa taille

Je te transmets le code si tu veux, c'est le suivant :

Sub test_Click()

Dim i As Integer

Dim e As Integer

Dim nb As Integer

i = 1 'compteur de ligne

e = 2 '

nb = WorksheetFunction.CountIf(Range("A1:A180"), "*")

nb = nb - 1

MsgBox "Nombre de feuilles a générer " & nb, vbOKOnly + vbInformation, "Feuilles a générer"

Dim nomfeuille As String

nomfeuille = ""

While i < nb + 1

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

ActiveSheet.Name = Sheets(1).Range(("A") & e).Text

nomfeuille = Sheets(1).Range(("A") & e).Text

'Ajustement des marges pour l'impresssion

With ActiveSheet.PageSetup

.LeftMargin = Application.InchesToPoints(0.590551181102362)

.RightMargin = Application.InchesToPoints(0.590551181102362)

.TopMargin = Application.InchesToPoints(0.393700787401575)

.BottomMargin = Application.InchesToPoints(0.393700787401575)

.HeaderMargin = Application.InchesToPoints(0.511811023622047)

.FooterMargin = Application.InchesToPoints(0.511811023622047)

.PrintArea = "$A$1:$H$33"

End With

Sheets("fiche descriptive").Select

Cells.Select

Selection.Copy

Sheets(nomfeuille).Select

Cells.Select

ActiveSheet.Paste

ActiveSheet.Range("D1") = nomfeuille

'Fin de la procédure, on passe a la feuille suivante

i = i + 1

e = e + 1

Wend

e = e - 2

MsgBox "Nombre de feuilles générées : " & e, vbOKOnly + vbInformation, "Fin de la Génération"

End Sub

Peux tu me l'intégrer dans mon code?

Merci d'avance

Encore merci pour ce que tu fais H2SO4

A+

Bonjour,

peux-tu me mettre un fichier avec les données de base et le résultat souhaité après exécution de la macro. Je n'ai pas compris ce que tu voulais comme intégration des 2 macros.

Rechercher des sujets similaires à "graphique boucle differents onglets"