[VBA] - Exporter une image des cellules au format .jpg

AelithX Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -  
 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.

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:

5 réponses

cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
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
0
AelithX Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
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é...
0
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
J'ai trouvé cela:

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
0
AelithX Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
Re-hello,

Ta solution fonctionne en effet bien sur mon excel 2013.
Il faudra, la semaine prochaine, que je la teste sur un excel 2016.

Merci tout de même pour l'aide :)
0
zlatooob69 Messages postés 1 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour

merci pour vos contributions

Elle fonctionne bien chez moi sur 2016 par contre la qualité de l'image n'est pas top , tu aurais une idée pour l'améliorer ? :)
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 583
 
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.
0
AelithX Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
En ce qui me concerne, l'image apparait bien comme ok lors de la copie...
Peut-être deux problèmes différents ?
Quelle config as-tu ?

Avec la solution de l'export via ppt ça convient à mon boss donc ça me va.
Je testerai la solution de cs_Le Pivert pour voir si ca répond mieux à la demande.
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 583 > AelithX Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
avec Excel 2016, j'ai supprimé la copie en ligne 6, qui, je pense, ne sert à rien. la copie en ligne 9 ne fonctionne pas (sauf en pas à pas).
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
PhilippeF75 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
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 ?
0
Krp753
 
Merci pour cette solution
Même souci avec Excel 2016 et VBA même conclusion sur problème avant .export.
0

Discussions similaires