XL 2016 Automatisation graphique et export

cocro

XLDnaute Junior
Bonjour,
je dois réaliser plusieurs graphiques communaux qui devront être intégrés dans un document infographié.
Ce sont 4 séries d'histogramme pour 120 communes qui sont ainsi à créer. Une automatisation s'imposerait mais je ne sais comment m'y prendre 😞

je joins en exemple un extrait du tableau de données et graphique attendu.
De mon graphique, j'en ai fait un modèle pour le reproduire aisément, j'ai adapté une macro pour faire un export image de mon graphique ...

VB:
Sub GrapheEnImage()
Dim MyChart As Chart
Set MyChart = ActiveSheet.ChartObjects(1).Chart
MyChart.Export Filename:="E:\_travail_encours\monographie_2020\graph1_commune.png" ', filtername:="PNG"
End Sub

.... j'envisage de faire ce labeur manuellement à défaut de compétences autres.
Je vais copier les trois seuls lignes communales de ma base globale dans la feuille qui génère le graph puis exporter du nom de la commune traitée

A moins que vous puissiez m'apporter une solution pour gagner du temps ?
Merci pour votre appui

Corinne
 

Pièces jointes

  • graphique_en_serie.jpg
    graphique_en_serie.jpg
    38.4 KB · Affichages: 56

Rouge

XLDnaute Impliqué
Bonjour,

Proposition, fait défiler séquentiellement chaque commune dans le graphique.
A adapter à vos données pour copier le graphique à l'endroit désiré (ligne en remarque dans le code)
VB:
Sub GrapheEnImage()
    Dim DerLig As Long, i As Long
    DerLig = Range("B" & Rows.Count).End(xlUp).Row
    
    For i = 3 To DerLig - 2 Step 3
        Commune = Cells(i, "A")
        ActiveSheet.ChartObjects("Graphique 1").Activate
        ActiveChart.SetSourceData Source:=Range("Feuil1!$A$1:$H$2,Feuil1!$A" & i & ":$H" & i + 2)
        ActiveChart.ChartType = xlColumnClustered
        ActiveChart.ChartTitle.Text = Commune
        'MyChart.Export Filename:="E:\_travail_encours\monographie_2020\graph1_commune.png" ', filtername:="PNG"
        DoEvents 'attendre que les opérations précédentes soient terminées avant de passer à la suivante
    Next i
End Sub

Cdlt
 

Pièces jointes

  • cocro_Automatisation graphique et export.xlsm
    19.8 KB · Affichages: 13

cocro

XLDnaute Junior
Bonjour,
merci pour cette boucle qui devrait me faire gagner beaucoup de temps.

j'ai ouvert votre fichier xlsm, j'ai pris soin de supprimer les cotes de la ligne
... MyChart.Export Filename:="E:\_travail_encours\monographie_2020\graph1_commune.png"
puis j'ai lancé la macro. Elle stoppe sur cette ligne. :confused: Pourtant, le chemin est correcte.

Question complémentaire : comment faites-vous l'association du nom de la commune et l'export du graphique ?

Cordialement
 

Rouge

XLDnaute Impliqué
"j'ai ouvert votre fichier xlsm, j'ai pris soin de supprimer les cotes de la ligne
... MyChart.Export Filename:="E:\_travail_encours\monographie_2020\graph1_commune.png"
puis j'ai lancé la macro. Elle stoppe sur cette ligne. :confused: Pourtant, le chemin est correcte. "


Utilisez l'enregistreur de macro pour l'enregistrement et récupérez la ligne, puis pour y affecter le nom de la commune au nom du fichier, faire comme ceci, (la partie rouge)
MyChart.Export Filename:="E:\_travail_encours\monographie_2020\" & commune & ".png"
 

cocro

XLDnaute Junior
Merci pour le retour mais le problème n'est pas lié au chemin.
J'ai créé par enregistrement de macro, un export du graphique en pdf (macro4) : OK
J'ai relancé la macro d'export de graphique unique : Ok
J'ai relancé votre macro et immédiatement "erreur 424 - objet requis"

Mes compétences en vb ne me permettent pas de trouver ce qui bloquent dans la boucle que vous m'avez transmise... Un tour sur la toile me noie davantage

Cordialement
 

Pièces jointes

  • macro.jpg
    macro.jpg
    116.7 KB · Affichages: 15

Rouge

XLDnaute Impliqué
Vous noterez qu'avec l'enregistreur de macro il y a cette ligne:
Chdir "E:`\_travail_en_cours"
cela signifie que vous enregistrez sur un disque différent, donc si c'est bien le cas il faut recopier cette ligne avant celle du chemin complet.
Ensuite, sur la ligne du chemin, après le dernier "\" il faut copier ce que j'ai mis en rouge dans mon précédent message, si vous voulez que le fichier prenne le nom de la commune.
" & commune & ".jpg" "

Je vois aussi qu'au départ l'extension du fichier était PNG ensuite JPG et enfin PDF. Qu'en est-il réellement?
 

cocro

XLDnaute Junior
merci pour votre patience.
Je cherche à exporter en format image (jpg iou png) . Les deux lignes que j'ai inséré dans la macro devaient me permettre de voir ce qui fonctionnait ou pas. La ligne pdf est juste un essai pour valider le chemin de mon dossier d'importation des graphiques
Chdir apparait car (je suppose) le réperrtoire par défaut n'est pas sur mon disque E mais pointe sur C. Le fait de naviguer pour pointer sur mon répertoire a été enregistré dans la macro.

ceci marche sans souci
VB:
Sub GrapheEnImage()
    Dim MyChart As Chart
    Set MyChart = ActiveSheet.ChartObjects(1).Chart
    MyChart.Export Filename:="E:\_travail_en_cours\Test12.png" ', filtername:="PNG"
End Sub

et ceci bloque au niveau de MyChart.Export
Code:
Sub Macro3()
    Dim DerLig As Long, i As Long
    DerLig = Range("B" & Rows.Count).End(xlUp).Row
    
    For i = 3 To DerLig - 2 Step 3
        commune = Cells(i, "A")
        ActiveSheet.ChartObjects("Graphique 1").Activate
        ActiveChart.SetSourceData Source:=Range("Feuil1!$A$1:$H$2,Feuil1!$A" & i & ":$H" & i + 2)
        ActiveChart.ChartType = xlColumnClustered
        ActiveChart.ChartTitle.Text = commune
        MyChart.Export Filename:="E:\_travail_en_cours\Test12.png" ', filtername:="PNG"
        MyChart.Export Filename:="E:\_travail_en_cours\" & commune & ".png"
        DoEvents 'attendre que les opérations précédentes soient terminées avant de passer à la suivante
    Next i
End Sub

Je n'y comprends rien. Vraiment désolée d'insister
Cordialement
 

cocro

XLDnaute Junior
Merci pour cet oeil avisé.
En effet, correction faite dans votre code
VB:
ActiveSheet.ChartObjects(1).Activate
Set MyChart = ActiveSheet.ChartObjects(1).Chart

et cela marche nickel. :)
Les graphiques se génèrent les uns derrière les autres dans mon dossier de destination

Mille merci, vous m'avez fait gagné des heures de travail.
Plus qu'à le reproduire dans mon contexte de travail

Bonne fin de dimanche à vous
Très Cordialement
 

cocro

XLDnaute Junior
Désolée, je reviens de nouveau vers vous

je pensais réussir à adapter la macro pour un autre type de graphique mais je coince à nouveau.
La série à représenter pour deux années est décomposée de 11 modalités.
Le graphique généré par la macro me renvoie deux communes.

je pense à une non compréhension de l'usage de "For i = 2 To DerLig - 1 Step 11", plusieurs tests mais rien de concluant

VB:
Sub Graphique1119_secteur_()

    Dim DerLig As Long, i As Long
    DerLig = Range("B" & Rows.Count).End(xlUp).Row
    For i = 2 To DerLig - 1 Step 11
        commune = Cells(i, "A")
        ActiveSheet.ChartObjects(1).Activate
        Set MyChart = ActiveSheet.ChartObjects(1).Chart
        ActiveChart.SetSourceData Source:=Range("Feuil1!$C$1:$E$12,feuil1!$C" & i & ":$E" & i + 10)
        ActiveChart.ChartType = xlColumnClustered
        
        MyChart.Export Filename:="E:\_travai_encours\graphique1\" & commune & ".png"
        
        DoEvents 'attendre que les opérations précédentes soient terminées avant de passer à la suivante
    Next i
End Sub

Cordialement
 

Pièces jointes

  • test_graphique.jpg
    test_graphique.jpg
    138.3 KB · Affichages: 12

Rouge

XLDnaute Impliqué
Bonjour,

Attention, dans cette ligne
ActiveChart.SetSourceData Source:=Range("Feuil1!$C$1:$E$12,feuil1!$C" & i & ":$E" & i + 10)

ce n'est pas 12, mais 1 (on sélectionne la ligne des titres)

Voici une autre proposition de présentation, on fusionne les "codGEO" et les "communes", puis on prend les données des colonnes B à E pour le graphique. ainsi la commune est prise dans les abscisses et est affichée directement sous les groupes.
cocro.JPG

Cdlt
 

Pièces jointes

  • cocro_Automatisation graphique et export_2.xlsm
    22.1 KB · Affichages: 6

cocro

XLDnaute Junior
Bonjour,
merci pour ce double retour.
grâce à vous, j'ai réussi à déchiffrer le fonctionnement de la macro
En effet, l'idée de prendre deux colonnes pour axe des abscisses est pertinente.

je vais adapter mes graphiques de la sorte

Bonne fin de journée
Cordialement
 

cocro

XLDnaute Junior
Bonjour,
désolée de revenir vers vous mais incompréhension totale pour le génération de ma 2eme série de graphique.
Souci bloquant le non affichage des étiquettes. Seules les 1er et derniers graphiques générés par la macro voient apparaitre les étiquettes, les autres non. Pourquoi ?

Souci mineur mais j'aimerais comprendre. Sous excel, je modifie l'ordre d'affichage des séries à représenter (ligne3 du tableau serait à voir en 2e barre). Le fait de lancer la macro ne prend pas ma personnalisation.
Peut-on forcer la chose ?

Merci
 

Pièces jointes

  • graph2_cree_excel.jpg
    graph2_cree_excel.jpg
    54.5 KB · Affichages: 15
  • graph2_resultat_macro.jpg
    graph2_resultat_macro.jpg
    27.1 KB · Affichages: 15
  • graph2_resultat_macro_pas_etiquette.jpg
    graph2_resultat_macro_pas_etiquette.jpg
    25.4 KB · Affichages: 14

Statistiques des forums

Discussions
315 093
Messages
2 116 138
Membres
112 669
dernier inscrit
Guigui2502