Mettre plusieurs graphiques dans plusieurs cases
Ok merci beaucoup de ton aide et du temps consacré à m'aider, dans le programme que tu m'as donné j'ai une erreur en l’exécutant.
Je ne l'avais pas testé, l'instruction pour ajouter ton graph était incorrecte, et en plus tu peux gérer directement la position et la taille de ton graphique dès cet instant. Voilà donc le nouveau code que je propose :
Sub tuto()
On Error Resume Next
Dim DerLig As Long, Lig As Long, Grph As ChartObject, Chemin As String
Chemin = "C:\Users\yassine\Downloads\Nouveau dossier 1\"
With Sheets(1)
'Suppression anciens gaphs
For Each Grph In .ChartObjects
Grph.Delete
Next Grph
DerLig = .Cells(Rows.Count, 1).End(xlUp).Row 'trouver derniere ligne du tableau à partir de la colonne 1
For Lig = 2 To DerLig 'boucle sur les lignes - de la premiere et la derniere
'création du graphique
.Shapes.AddChart(xlDoughnut, .Cells(Lig, 4).Left, .Cells(Lig, 4).Top, .Cells(Lig, 4).Width, .Cells(Lig, 4).Height).Select
ActiveChart.SetSourceData Source:=Range("A" & Lig & ":C" & Lig)
'Export PDF
.Cells(Lig, 4).ExportAsFixedFormat Type:=xlTypePDF, Filename:=Chemin & .Cells(Lig, 1) & ".pdf"
Next Lig
End With
End Sub
Merci pour ce nouveau code je vais cependant garder l'ancien je ne comprends pas grand chose au tiens, et encore merci pour ton aide et ton temps consacré à m'aider !
Merci pour ce nouveau code je vais cependant garder l'ancien je ne comprends pas grand chose au tiens, et encore merci pour ton aide et ton temps consacré à m'aider !
Je doute que tu comprennes grands choses au tien aussi... Je peux ajouter des commentaires, mais le mieux reste de te référer à l'aide d'Excel et VBA en appuyant sur F1 sur les instructions qui te posent problème.
Étant donné que j'ai quand même travaillé dessus je comprends certaines fonctionnalités, alors qu'avec ton programme je suis totalement perdu je ne sais même pas ou faire des modifications... Ok merci encore pour ton aide.
Étant donné que j'ai quand même travaillé dessus je comprends certaines fonctionnalités, alors qu'avec ton programme je suis totalement perdu je ne sais même pas ou faire des modifications... Ok merci encore pour ton aide.
Voilà le code commenté, et c'est surprenant car je me suis basé sur ton code, que j'ai simplifié pour aboutir au mien... :
Sub tuto()
On Error Resume Next 'En cas d'erreur, passer à l'instruction suivante
'Déclaration des variables utilisées
Dim DerLig As Long, Lig As Long, Grph As ChartObject, Chemin As String
Chemin = "C:\Users\yassine\Downloads\Nouveau dossier 1\" 'Repertoire où enregistrer les PDF
With Sheets(1) 'Tout objet qui débute par "." se rapporte à la première feuille
'Suppression anciens gaphs
For Each Grph In .ChartObjects 'Parcourir les grahiques
Grph.Delete 'Suppression
Next Grph
DerLig = .Cells(Rows.Count, 1).End(xlUp).Row 'trouver derniere ligne du tableau à partir de la colonne 1
For Lig = 2 To DerLig 'boucle sur les lignes - de la ligne 2 à la derniere
.Shapes.AddChart(xlDoughnut, .Cells(Lig, 4).Left, .Cells(Lig, 4).Top, .Cells(Lig, 4).Width, .Cells(Lig, 4).Height).Select 'Ajout, positionnement et dimensionnement d'un graphique
ActiveChart.SetSourceData Source:=Range("A" & Lig & ":C" & Lig) 'Ajout de la source de données (plage A:C de la ligne considérée)
.Cells(Lig, 4).ExportAsFixedFormat Type:=xlTypePDF, Filename:=Chemin & .Cells(Lig, 1) & ".pdf" 'Export PDF prenant le nom de la colonne A, pour la ligne considérée
Next Lig 'Passage à la ligne suivante
End With
End Sub
Merci beaucoup mais pourquoi je n'ai pas le même modelé de graphique anneau que j'ai habituellement quand j’exécute ton programme.
La taille des anneaux et la position de la légende sont des paramètres modifiables. Je vais ajouter ça au code.
En attendant, j'ai commenté ton code original (voir '==>
) :
Sub tuto()
Dim onglet1 As Worksheet
Dim derniereligne As Long
Dim ligne_en_cours As Long
'identifier l 'onglet
Set onglet1 = Worksheets(1) '==> Peut être simplifié par une instruction With Worksheets(1)...End With
'trouver derniere ligne du tableau à partir de la colonne 1
derniereligne = onglet1.Cells(Rows.Count, 1).End(xlUp).Row
'boucle sur les lignes - de la premiere et la derniere
For ligne_en_cours = 1 To derniereligne
'création du graphique
ActiveSheet.Shapes.AddChart2(251, xlDoughnut).Select '==> INSTRUCTION INCORRECTE + POSSIBILITE DE POSITIONNER LE GRAPH DES CETTE ETAPE
ActiveChart.SetSourceData Source:=Range("A" & ligne_en_cours, "C" & ligne_en_cours)
ActiveChart.Legend.Select '==> INSTRUCTION INUTILE (on ne séléctionne la légende mais on ne fait rien avec...)
'With ActiveSheet.ChartObjects(1)
'.Left = Range("G12").Left
'.Top = Range("G12").Top
'End With
'position du graph
Dim i As Integer '==> Déclaration en cours de macro à éviter
With Sheets("Feuil1")
For i = 1 To .ChartObjects.Count '==> On utilise inutilement une seconde boucle, alors qu'on peut faire ces étapes dans la première boucle
.ChartObjects(i).Top = .Cells(i, 4).Top
.ChartObjects(i).Left = .Cells(i, 4).Left
.ChartObjects(i).Width = .Cells(i, 4).Width
.ChartObjects(i).Height = .Cells(i, 4).Height
Next i
End With
'convertion du graph
Dim FL1 As Worksheet, Cell As Range, Plage As Range '==> IDEM : Déclaration en cours de macro à éviter
Set FL1 = Worksheets("Feuil1") '==> Tu as déjà un objet qui désigne cette feuille, inutile d'en faire un nouveau
With FL1
'Détermination de la plage de cellules à lire
'Peut s'écrire en utilisant l'objet range de la plage
'For Each Cell In .Range("B3:E15")
'ou en utilisant l'objet Plage (range) de la plage
Set Plage = .Range("D2:D4") '==> Plage inadaptée si la dimension de tes données change
i = 1
For Each Cell In Plage '==> IDEM : On utilise inutilement une 3ème boucle, alors qu'on peut faire ces étapes dans la première boucle
Range(Cell.Address).Select '==> Inutile d'utiliser SELECT, on peut directement appliquer la ligne dessous sur l'objet "Cell" (Cell.ExportAsFixedFormat)
Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"C:\Users\nomutilisateur\Downloads\Nouveau dossier\" & Cells(i, 1).Value & ".pdf", Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
False '==> Beaucoup d'arguments sont facultatifs et inutile de re-préciser leur valeur par défaut
i = i + 1 '==> Inutile d'utiliser cette variable si tu choisies une boucle adaptée
Next
End With
Set FL1 = Nothing '==> Inutile
Set Plage = Nothing '==> Inutile
Next '==> Mal placé, tes boucles ne devraient pas être imbriquées car tu multiplies inutilement les mêmes opérations
End Sub
Merci beaucoup mais pourquoi je n'ai pas le même modèle de graphique anneau que j'ai habituellement quand j’exécute ton programme. Je souhaite avoir le second sans titre et avec pour légende de A1 à C1.
Nouveau code :
Sub tuto()
On Error Resume Next
Dim DerLig As Long, Lig As Long, Grph As ChartObject, Chemin As String
Chemin = "C:\Users\yassine\Downloads\Nouveau dossier 1\"
With Sheets(1)
'Suppression anciens gaphs
For Each Grph In .ChartObjects
Grph.Delete
Next Grph
DerLig = .Cells(Rows.Count, 1).End(xlUp).Row 'trouver derniere ligne du tableau à partir de la colonne 1
For Lig = 2 To DerLig 'boucle sur les lignes - de la premiere et la derniere
'création du graphique
.Shapes.AddChart(xlDoughnut, .Cells(Lig, 4).Left, .Cells(Lig, 4).Top, .Cells(Lig, 4).Width, .Cells(Lig, 4).Height).Select
ActiveChart.SetSourceData Source:=Range("A" & Lig & ":C" & Lig) 'Plage source
ActiveChart.Legend.Position = xlBottom 'Position légende (en bas du graph)
ActiveChart.ChartGroups(1).DoughnutHoleSize = 75 'Epaisseur de l'anneau
'Export PDF
.Cells(Lig, 4).ExportAsFixedFormat Type:=xlTypePDF, Filename:=Chemin & .Cells(Lig, 1) & ".pdf"
Next Lig
End With
End Sub
Ok merci beaucoup pour affecter ma ligne mes cases A1 B1 et C1 en légende il faut une autre ligne de code ?
dans le style ActiveChart.Legend.Range(A1;C1) = ...
Ah oui je n'y avais pas pensé super merci bcp !
J'ai réussi je partagerais mon programme quand il sera fini, merci encore
Voici donc mon excel avec mon programme fini, merci pour l'aide que j'ai reçu sur ce site.
J'ai une question quand je veux mettre mes graphs dans la ligne 5 sois la colonne sois E je dois modifier le programme comme ca ?(fichier joint) car mes graphs ne se génèrent pas dans la colonne E mais plus loin hors des cellules.
Des fois j'ai un problème mes graphes ses génèrent mais il prend en compte que la colonne 1 et me fait un triple anneau.