EXPORTER DES GRAPHIQUES D'UN FICHIER EXCEL EN IMAGES

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 23 mai 2007 à 17:09
cs_cmoii Messages postés 1 Date d'inscription mercredi 10 juillet 2013 Statut Membre Dernière intervention 10 juillet 2013 - 10 juil. 2013 à 22:43
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/42814-exporter-des-graphiques-d-un-fichier-excel-en-images

cs_cmoii Messages postés 1 Date d'inscription mercredi 10 juillet 2013 Statut Membre Dernière intervention 10 juillet 2013
10 juil. 2013 à 22:43
J'ai trouvé l'erreur du script présenté en haut !
Il s'agit de la variable "i" qui n'est pas remise à 0 dans la première boucle du for.
Voici un code SANS erreur qui extrait au format GIF TOUS les graphiques de TOUS les onglets du fichier. Ce fichier Excel est à convertir en .XLSM

' -----------------------------------------------------------
' DEBUT

Sub ExportGraph()

' Chemin où l'on veut exporter les graphiques
Destination = "C:\Users\moi\Desktop"

' Déclaration des variables
Dim Sheets As Variant
Dim NomSheet As String
Dim Graph As Variant
Dim NomGraph As String
Dim Fich As String
Dim i As Byte

' Boucle parcourant les feuilles
For Each Sheets In ActiveWorkbook.Sheets
NomSheet = Sheets.Name
i = 0
' On écrit dans la boite de message le nom de la feuille
'MsgBox NomSheet
' On parcours les graphiques de la feuille
For Each Graph In Sheets.ChartObjects
i = i + 1
' Sélection d'un graphique
Sheets.ChartObjects(i).Activate
NomGraph = ActiveChart.Name
' On affiche le nom du graphique exporté
'MsgBox NomGraph

' On lance la procédure d'export
ActiveChart.Export Filename:=Destination & NomGraph & ".gif", FilterName:="GIF"
Next
Next
End Sub

' -----------------------------------------------------------
' FIN

Il manquait "i=0". Testé avec succès le 10/07/2013 dans un fichier .XLSM.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
2 avril 2008 à 15:05
l'erreur ne semble pas venir du type de variable...
ca ressemble plutot à un "pas de ActiveWorkBook"
Mohamedyounsi Messages postés 3 Date d'inscription jeudi 14 février 2008 Statut Membre Dernière intervention 2 avril 2008
2 avril 2008 à 14:42
salut,

j'ai déclaré oSheet comme objet.
mais le même problème qui persiste
erreur d'exécution 91
"variable objet ou variable bloc With non définie" le problème est dans "ActiveWorkbook.sheets"

Merci de me répondre.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
2 avril 2008 à 13:17
As Object:

Dim oSheet As Object
Mohamedyounsi Messages postés 3 Date d'inscription jeudi 14 février 2008 Statut Membre Dernière intervention 2 avril 2008
2 avril 2008 à 11:36
Salut,
erreur d'exécution 91
"variable objet ou variable bloc With non définie"
ma question c'est quelle est ke type de déclaration de l'objet oSheet?
set oSheet = new .....

Merci de me répondre.
nonka Messages postés 4 Date d'inscription lundi 4 février 2008 Statut Membre Dernière intervention 8 avril 2009
22 févr. 2008 à 18:22
Franchement, TOP la macro !!
PhilippeF66 Messages postés 5 Date d'inscription dimanche 31 août 2003 Statut Membre Dernière intervention 2 juillet 2007
2 juil. 2007 à 21:14
Merci Renfield,
J'ai été absent qqs jours et n'ai pu répondre.
La même erreur se produit dans les mêmes circonstances, que je sois sur mon PC professionnel (je ne suis pas administrateur et il est en réseau) ou que je sois sur mon PC personnel dont je suis administrateur.
J'utilise Excel 2003 (suite Office Pro 2003).
Il n'y a pas de problème sur le nom du fichier image, ni sur son chemin, ni sur la longueur du nom de l'ensemble chemin + fichier.
L'erreur existe que j'essaie en gif ou en jpg, quant à l'AddIn, je ne sais...
L'erreur existe tant avec mon code qu'avec le tien ou celui de Roro...
A+
oliv_def Messages postés 14 Date d'inscription mardi 15 mai 2007 Statut Membre Dernière intervention 20 décembre 2007
29 juin 2007 à 10:08
Parfait :-) !

En tout cas ca me sera tres util !
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
29 juin 2007 à 09:39
les modifications ne sont pas très lourdes...




Private Declare Function MkDir Lib "imagehlp.dll" Alias "MakeSureDirectoryPathExists" (ByVal lpPath As String) As Long

Sub test()
ExportGraphs "C:\test"
End Sub

Sub ExportGraphs(ByVal vsDestPath As String)
Dim oSheet As Object
Dim i As Long
If Right$(vsDestPath, 1) <> "" Then
vsDestPath = vsDestPath & ""
End If

MkDir vsDestPath

For Each oSheet In ActiveWorkbook.Sheets
If TypeOf oSheet Is Worksheet Then
' On parcours les graphiques de la feuille
For i = 1 To oSheet.ChartObjects.Count
With oSheet.ChartObjects(i).Chart
.Export vsDestPath & .Name & ".gif", "GIF"
End With
Next i
ElseIf TypeOf oSheet Is Chart Then
With oSheet
.Export vsDestPath & .Name & ".gif", "GIF"
End With
End If
Next oSheet
End Sub
oliv_def Messages postés 14 Date d'inscription mardi 15 mai 2007 Statut Membre Dernière intervention 20 décembre 2007
29 juin 2007 à 08:51
Ok je viens de faire le test et ton programme fonctionne tres bien :-) !!!
Par contre : quand le graphique est inséré non pas dans une feuille mais constitue directement une feuille : ca ne fonctionne pas ! Plantage sur la ligne " Next oSheet". Que peut on faire ce serait qd même pas mal interessant que ca fonctionne pour tous les graphs ;-), je dis ca je dis rien...
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
29 juin 2007 à 01:13
fais le test, c'est le plus simple :p
oliv_def Messages postés 14 Date d'inscription mardi 15 mai 2007 Statut Membre Dernière intervention 20 décembre 2007
28 juin 2007 à 11:50
En conclusion de tout ca : quel est le programme qui fonctionne et incorporable ds VBA excel SVP ?
Merci d'avance : ca m'interesse !!!
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
21 juin 2007 à 08:08
Je pense que le chemin du gif n'est pas correct.
qu'a tu mis ?

quelques pistes, pour tester ........


quellle version d'office ?

est tu admin de ton poste ?
si non, est-ce que tu peux tenter en passant avec un compte admin ?

le chemin du gif est il correct ?
le fichier gif existe peut etre (lecture seule ou non) et empeche la recreation
peut etre une histoire de droit dans le repertoire cible

as tu essayé mon code, ou celui de roro59650

le FileName ne peut exceder 255 caractères

aurais tu un AddIn sur ton Office, qui pourrais empecher l'export ?

esssaye d'exporter en jpg plutot qu'en gif

as tu excel 2007 qui cohabiterais avec ton excel classsique ?

je te laisse consulter :
http://groups.google.com/groups?q=chart+export+1004&start=0&hl=fr&
PhilippeF66 Messages postés 5 Date d'inscription dimanche 31 août 2003 Statut Membre Dernière intervention 2 juillet 2007
21 juin 2007 à 01:06
Bonsoir,
Maintenant, l'erreur est systématiquement 438, méthode non gérée par l'objet. Et pourtant j'ai bien coché les librairies objets correspondantes (notamment Word) dans le sous-menu Références...
Je m'en suis évidemment sorti avec du copié-collé manuel, mais sur le fond, j'aimerais bien trouver la solution.
Merci.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
20 juin 2007 à 22:51
quel message, l'erreur 1004 ?
roro59650 Messages postés 99 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 28 juillet 2011 1
20 juin 2007 à 09:59
Bonjour,
moi, il m'a fallu deux jours pour trouver la bonne méthode, mais c'est assez vieux,lol.
Essaye peut-être avec un ChartObjects(i).Export, enfin je sais pas trop.
Je suis pas spécialisté d'Excel, désolé.
J'espère que Renfield saura te répondre!!

Roro
PhilippeF66 Messages postés 5 Date d'inscription dimanche 31 août 2003 Statut Membre Dernière intervention 2 juillet 2007
19 juin 2007 à 18:21
Bonjour à tous,
le problème de ce code (dans mes applications) est que quelle que soit la façon dont j'arrive à la ligne "export" (mon contexte de code est différent), la méthode export provoque une erreur 1004...
rien à faire pour passer outre
idem avec la méthode SaveAS
"y'a queq'chose qui cloche" comme disait B. Vian, mais quoi ?
cs_lermite222 Messages postés 492 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 2 juillet 2012 4
29 mai 2007 à 16:19
bonjour,
Je ne commenterais pas le code mais ce qui m'a interressé c'est la possibilité d'exporté l'image d'un graph.
Question dernièrement posée sur un forum et auquel je n'ai pu répondre.
Merci de l'info
A+
louis
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
24 mai 2007 à 09:48
je répète :
"ton .Activate n'est pas utile, tu peux directement demander la propriété Chart de ton CharObject obtenu via ChartObjects(i)."

sans le Activate, donc :
NomGraph = Sheets.ChartObjects(i).Chart.Name


d'où mon code :
With oSheet.ChartObjects(i).Chart
.Export vsDestPath & .Name & ".gif", "GIF"
End With


au fait, sous Windows, les chemins c'est avec des '\', pas des '/' ^^
roro59650 Messages postés 99 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 28 juillet 2011 1
24 mai 2007 à 09:38
Bonjour,
j'ai changé le code pour exporter les graphes de la feuille parcourue.
Si j'enleve le .Activate du graphique, je ne vois pas comment afficher son nom dans la boite de message.
Apres, pour les variables, j'ai fait ce que j'ai pu, je sais que ma fonction est loin d'être parfaite, mais elle marche.
On peut toujours faire mieux...
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
23 mai 2007 à 17:19
ton .Activate n'est pas utile, tu peux directement demander la propriété Chart de ton CharObject obtenu via ChartObjects(i).



en gros, ton code pourrait être :


Private Declare Function MkDir Lib "imagehlp.dll" Alias "MakeSureDirectoryPathExists" (ByVal lpPath As String) As Long

Sub test()
ExportGraphs "C:\test"
End Sub

Sub ExportGraphs(ByVal vsDestPath As String)
Dim oSheet As Worksheet
Dim i As Long
If Right$(vsDestPath, 1) <> "" Then
vsDestPath = vsDestPath & ""
End If

MkDir vsDestPath

For Each oSheet In ActiveWorkbook.Sheets
' On parcours les graphiques de la feuille
For i = 1 To oSheet.ChartObjects.Count
With oSheet.ChartObjects(i).Chart
.Export vsDestPath & .Name & ".gif", "GIF"
End With
Next i
Next oSheet
End Sub
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
23 mai 2007 à 17:09
copie a revoir...
variable mal nommée, pas typées, chemin en dur
tu exportes toujours les graphs de la feuille active (ta boucle sur les feuille ne sert a rien)

etc.
Rejoignez-nous