EXPORTER DES GRAPHIQUES D'UN FICHIER EXCEL EN IMAGES
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 2021
-
23 mai 2007 à 17:09
cs_cmoii
Messages postés1Date d'inscriptionmercredi 10 juillet 2013StatutMembreDernière intervention10 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.
cs_cmoii
Messages postés1Date d'inscriptionmercredi 10 juillet 2013StatutMembreDernière intervention10 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
' 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és17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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és3Date d'inscriptionjeudi 14 février 2008StatutMembreDerniè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és17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 2 avril 2008 à 13:17
As Object:
Dim oSheet As Object
Mohamedyounsi
Messages postés3Date d'inscriptionjeudi 14 février 2008StatutMembreDerniè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és4Date d'inscriptionlundi 4 février 2008StatutMembreDernière intervention 8 avril 2009 22 févr. 2008 à 18:22
Franchement, TOP la macro !!
PhilippeF66
Messages postés5Date d'inscriptiondimanche 31 août 2003StatutMembreDerniè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és14Date d'inscriptionmardi 15 mai 2007StatutMembreDernière intervention20 décembre 2007 29 juin 2007 à 10:08
Parfait :-) !
En tout cas ca me sera tres util !
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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és14Date d'inscriptionmardi 15 mai 2007StatutMembreDernière intervention20 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és17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 29 juin 2007 à 01:13
fais le test, c'est le plus simple :p
oliv_def
Messages postés14Date d'inscriptionmardi 15 mai 2007StatutMembreDernière intervention20 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és17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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 ?
PhilippeF66
Messages postés5Date d'inscriptiondimanche 31 août 2003StatutMembreDerniè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és17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 20 juin 2007 à 22:51
quel message, l'erreur 1004 ?
roro59650
Messages postés99Date d'inscriptionvendredi 20 avril 2007StatutMembreDernière intervention28 juillet 20111 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és5Date d'inscriptiondimanche 31 août 2003StatutMembreDerniè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és492Date d'inscriptionjeudi 5 avril 2007StatutMembreDernière intervention 2 juillet 20124 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és17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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és99Date d'inscriptionvendredi 20 avril 2007StatutMembreDernière intervention28 juillet 20111 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és17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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és17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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)
10 juil. 2013 à 22:43
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.
2 avril 2008 à 15:05
ca ressemble plutot à un "pas de ActiveWorkBook"
2 avril 2008 à 14:42
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.
2 avril 2008 à 13:17
Dim oSheet As Object
2 avril 2008 à 11:36
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.
22 févr. 2008 à 18:22
2 juil. 2007 à 21:14
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+
29 juin 2007 à 10:08
En tout cas ca me sera tres util !
29 juin 2007 à 09:39
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
29 juin 2007 à 08:51
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...
29 juin 2007 à 01:13
28 juin 2007 à 11:50
Merci d'avance : ca m'interesse !!!
21 juin 2007 à 08:08
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&
21 juin 2007 à 01:06
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.
20 juin 2007 à 22:51
20 juin 2007 à 09:59
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
19 juin 2007 à 18:21
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 ?
29 mai 2007 à 16:19
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
24 mai 2007 à 09:48
"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 '/' ^^
24 mai 2007 à 09:38
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...
23 mai 2007 à 17:19
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
23 mai 2007 à 17:09
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.