[VBA] - Exporter une image des cellules au format .jpg
AelithX
Messages postés
4
Statut
Membre
-
Krp753 -
Krp753 -
Bonjour à tous !
Merci d'avance pour les réponses que vous m'apporterez,
Je suis actuellement en train de travailler sur un fichier VBA au travail.
Le concept est simple :
- en appuyant sur le bouton "CommandButton1",
- vba doit générer image de la zone "A1:J30" de l'unique feuille du classeur
- puis exporter cette image au format .jpg
Ca doit donner ca :
https://img-19.ccm2.net/KDzdiENXQzXWylfMmv56kV3jrTE=/ff43548c75244698beae5ddb684c632e/ccm-ugc/Bonne_image.jpg
Le code suivant fonctionne sous 2013, ce qui tombe bien car mon ordinateur professionnel a cette configuration.
Malheureusement, mon chef est sous Windows 10 / Excel 2016 et il y a un problème. Il obtient l'image suivante, totalement vierge (blanche et poids de l'image = 20 ko) :
https://img-19.ccm2.net/MWK_JyUewKjg_qrH4o16darT3f8=/69688c04c4064f348765aed0c4bcc3c5/ccm-ugc/Mauvaise_image.jpg
Ayant testé plusieurs pc, il semble que ma macro ne fonctionne que sous excel 2013, alors que microsoft indique que la méthode ChartObject.Export fonctionne pour "2013 et ultérieur".
De plus, et c'est une énigme pour moi : le code fonctionne en mode pas à pas (F8) sur excel 2016 et j'obtiens bien mon image telle qu'attendue.
Avez-vous une idée de pourquoi le mode pas à pas fonctionne, et mon bouton ne fonctionne pas ? Savez-vous comment adapter mon code à excel 2016 ? Ou alors, y a-t-il une autre approche permettant le fonctionnement ?
Merci à tous,
PS : Je suis parfaitement disposée à fournir une copie de mon fichier .xlsm par MP
AelithX
Merci d'avance pour les réponses que vous m'apporterez,
Je suis actuellement en train de travailler sur un fichier VBA au travail.
Le concept est simple :
- en appuyant sur le bouton "CommandButton1",
- vba doit générer image de la zone "A1:J30" de l'unique feuille du classeur
- puis exporter cette image au format .jpg
Ca doit donner ca :
https://img-19.ccm2.net/KDzdiENXQzXWylfMmv56kV3jrTE=/ff43548c75244698beae5ddb684c632e/ccm-ugc/Bonne_image.jpg
Le code suivant fonctionne sous 2013, ce qui tombe bien car mon ordinateur professionnel a cette configuration.
Private Sub CommandButton1_Click()
Dim Ligne As Integer, Colonne As Integer
'Copie, en tant qu'image, les cellules
Feuil1.Range("A1:J30").CopyPicture
Feuil1.Paste
'Crée un graphique temporaire
With Feuil1.ChartObjects.Add(0, 0, Cells(30, 10).Left, Cells(30, 10).Top).Chart
.Paste
'exporte l'image sur le disque dur, dans le même répertoire que ce classeur.
.Export ThisWorkbook.Path & "\monImage.jpg", "JPG"
End With
With Feuil1
'Supprime le graphique temporaire
.ChartObjects(Feuil1.ChartObjects.Count).Delete
'Supprime l'image dans la feuille.
.Shapes(Feuil1.Shapes.Count).Delete
End With
End Sub
Malheureusement, mon chef est sous Windows 10 / Excel 2016 et il y a un problème. Il obtient l'image suivante, totalement vierge (blanche et poids de l'image = 20 ko) :
https://img-19.ccm2.net/MWK_JyUewKjg_qrH4o16darT3f8=/69688c04c4064f348765aed0c4bcc3c5/ccm-ugc/Mauvaise_image.jpg
Ayant testé plusieurs pc, il semble que ma macro ne fonctionne que sous excel 2013, alors que microsoft indique que la méthode ChartObject.Export fonctionne pour "2013 et ultérieur".
De plus, et c'est une énigme pour moi : le code fonctionne en mode pas à pas (F8) sur excel 2016 et j'obtiens bien mon image telle qu'attendue.
Avez-vous une idée de pourquoi le mode pas à pas fonctionne, et mon bouton ne fonctionne pas ? Savez-vous comment adapter mon code à excel 2016 ? Ou alors, y a-t-il une autre approche permettant le fonctionnement ?
Merci à tous,
PS : Je suis parfaitement disposée à fournir une copie de mon fichier .xlsm par MP
AelithX
A voir également:
- [VBA] - Exporter une image des cellules au format .jpg
- Format epub - Guide
- Format factory - Télécharger - Conversion & Codecs
- Hp usb disk storage format tool - Télécharger - Stockage
- Format apfs - Guide
- Exporter favoris chrome - Guide
5 réponses
Bonjour,
Sous Windows10 et Excel 2007, cette macro fonctionne bien.
Une solution enregistrer ton classeur sous "Classeur Excel 97-2003"
Cette version fonctionne avec toutes les versions Office après 2003
Je m'en sers toujours pour envoyer des exemples car je suis sur que tout le monde pourra les ouvrir!
@+ Le Pivert
Sous Windows10 et Excel 2007, cette macro fonctionne bien.
Une solution enregistrer ton classeur sous "Classeur Excel 97-2003"
Cette version fonctionne avec toutes les versions Office après 2003
Je m'en sers toujours pour envoyer des exemples car je suis sur que tout le monde pourra les ouvrir!
@+ Le Pivert
Bonjour cs_Le Pivert,
Merci pour ta réponse rapide.
En enregistrant le classeur sous excel 97-2003, ca marche bien chez moi (excel 2013), mais toujours pas sur excel 2016. Le fichier final est toujours désespérément vierge.
Je suis en train de tester une solution en passant par Powerpoint :
au lieu de générer un fichier image .jpg, j'essaie de créer un ppt avec une seule slide contenant mon image. Normalement, les formats de fichiers .jpg et .ppt conviennent tous deux à mon chef, donc si ça marche ça devrait aller. Au pire, je sais qu'il est possible de créer un fichier .jpg depuis Powerpoint...
Je te tiens au courant de ce qui finit par fonctionner et posterai le code associé...
Merci pour ta réponse rapide.
En enregistrant le classeur sous excel 97-2003, ca marche bien chez moi (excel 2013), mais toujours pas sur excel 2016. Le fichier final est toujours désespérément vierge.
Je suis en train de tester une solution en passant par Powerpoint :
au lieu de générer un fichier image .jpg, j'essaie de créer un ppt avec une seule slide contenant mon image. Normalement, les formats de fichiers .jpg et .ppt conviennent tous deux à mon chef, donc si ça marche ça devrait aller. Au pire, je sais qu'il est possible de créer un fichier .jpg depuis Powerpoint...
Je te tiens au courant de ce qui finit par fonctionner et posterai le code associé...
J'ai trouvé cela:
A essayer
Public Sub SaveRangeAsImage()
Dim r As Range
Dim x As Integer, y As Integer
Dim varFullPath As Variant
Dim Graph As String
' selection de la plage par une InputBox
Set r = Application.InputBox("Sélectionnez la plage à exporter", _
"Export Image", Selection.AddressLocal, Type:=8)
r.Select
' copie de la plage en format image grâce à .CopyPicture
Selection.CopyPicture appearance:=xlScreen, Format:=xlBitmap
x = Selection.Width
y = Selection.Height
' on utilise l'objet Chart pour sa facilité d'export
' création du graphique
Workbooks.Add (1)
ActiveSheet.Name = "enJPG"
Charts.Add
ActiveChart.ChartType = xl3DArea
ActiveChart.SetSourceData r
ActiveChart.Location xlLocationAsObject, "enJPG"
' le graph n'est là que comme réceptacle de l'image, on le vide avec .ClearContents
ActiveChart.ChartArea.ClearContents
' on colle l'image qui réside dans le presse papier
ActiveChart.Paste
' redimensionnement
' on récupére le nom du graph de la collection Shapes
Graph = Mid(ActiveChart.Name, Len(ActiveSheet.Name) + 1)
' on effectue un redimensionnement
'ActiveSheet.Shapes(Graph).ScaleWidth x / ActiveChart.ChartArea.Width, _
' msoFalse, msoScaleFromTopLeft
'ActiveSheet.Shapes(Graph).ScaleHeight y / ActiveChart.ChartArea.Height, _
' msoFalse, msoScaleFromTopLeft
' export
varFullPath = Application.GetSaveAsFilename("C:\Temp\export-" & Format(Now, "yyyymmddhhnn") & ".jpg", _
"Fichiers JPG(*.jpg), *.jpg")
ActiveChart.Export varFullPath, "JPG"
ActiveChart.Pictures(1).Delete
ActiveWorkbook.Close False
End Sub
A essayer
yg_be
Messages postés
24281
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 585
j'ai exactement le même problème, et le soucis n'est pas dans l'export: l'image n'est pas correcte avant l'export.
et rien trouvé pour éviter cela.
et rien trouvé pour éviter cela.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
Pour ma part, j'ai exactement le même problème d'exportation d'image sous Excel 2016 et VBA 7.1.
ça marche très bien en pas à pas mais l'image est vide en exécution de la macro.
J'arrive à cerner le problème sur le dernier .paste avant le .exporte.
J'en déduis que l'image n'a pas le temps de se copier avant d'être exportée. Mais même en ajoutant un DoEvents ou un Sleep entre les deux, ça ne fonctionne pas...
Qui a résolu le problème ?
Pour ma part, j'ai exactement le même problème d'exportation d'image sous Excel 2016 et VBA 7.1.
ça marche très bien en pas à pas mais l'image est vide en exécution de la macro.
J'arrive à cerner le problème sur le dernier .paste avant le .exporte.
J'en déduis que l'image n'a pas le temps de se copier avant d'être exportée. Mais même en ajoutant un DoEvents ou un Sleep entre les deux, ça ne fonctionne pas...
Qui a résolu le problème ?