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

capture capture1

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) = ...

Ok merci beaucoup pour affecter ma ligne mes cases A1 B1 et C1 en légende il faut une autre ligne de code ?

Oui, mais je t'invite à le faire manuellement avec l'enregistreur de macro et à étudier le code produit pour l'insérer et l'adapter dans la macro existante.

Ah oui je n'y avais pas pensé super merci bcp !

Ah oui je n'y avais pas pensé super merci bcp !

N'hésite pas à poster tes tentatives pour avis.

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.

3classeur5.xlsm (27.64 Ko)

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.

3classeur5.xlsm (21.99 Ko)

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.

Rechercher des sujets similaires à "mettre graphiques cases"