Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Convertir shapes en jpeg

  • Initiateur de la discussion Initiateur de la discussion joums
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

joums

XLDnaute Occasionnel
Bonjour,

Je souhaiterais convertir plusieurs shapes et cellules (qui se trouve dans la même feuille) en 1 seule image (Jpeg) qui sera un fichier à part.

J'ai trouvé plusieurs macro avec la fonction copypicture mais cela ne marche pas pour les shapes ....

Pour quelles raisons ? avec vous une idée pour m'aider à résoudre se problème.

Merci
 
Re : Convertir shapes en jpeg

Bonjour joums


Essayes ceci:

Enregistres ton classeur au format HTML (Page Web)

ensuite va voir dans le dossier* créer lors de cet enregistrement

tu trouveras les images dans ce dossier

* Ex: Si tu enregistres un classeur nommé Classeur1.htm
tu obtiendras un dossier nommée Classeur1_fichiers

PS:
tu peux faire cette manip en utilisant l'enregistreur de macros
 
Dernière édition:
Re : Convertir shapes en jpeg

Bonjour Joums,

@hello l'agrafe🙂

CopyPicture fonctionne avec les shapes, mais il faut soit les selectionner et faire Selection.copypicture ou parcourir la collection et faire
Code:
' .....
Shapes(i).CopyPicture
'.....
Ou
'
Code:
Shapes.Range(Array("NomDunShape1", "NomDunShape2")).Select
    Selection.CopyPicture
'

A+
 
Re : Convertir shapes en jpeg

Bonsoir,

Hi, les deux... 🙂🙂

une méthode, sans sélection...

Il faut renommer l'image avant de l'exporter...

Code:
Sub copie_image()
Dim Img As Object
Dim Chemin As String
Chemin = ActiveWorkbook.Path & "\"
Set Img = ActiveSheet.Shapes("Picture 1")
Img.DrawingObject.CopyPicture
With ActiveSheet.ChartObjects.Add(0, 0, Img.Width, Img.Height).Chart
  .Paste
  .Export Chemin & Img.Name & ".jpg", "JPG"
  .Parent.Delete
End With
End Sub

Bonne soirée
 
Re : Convertir shapes en jpeg

Bonjour à tous,

Merci pour votre aide,
je m'oriente plus vers la solution de bhbh,
seulement je ne peux pas nommer mes shapes, car les noms changent
Comment faudrait faire ?
je vous joins un fichier en exemple.
En cellule A1 à A3 il y a du texte
et les shapes se trouvent en A4 et A5 (celllules fusionnées)

Je voudrais donc faire une "image" de l'ensemble de la feuille et l'exporter dans un dossier.

Merci
 

Pièces jointes

Re : Convertir shapes en jpeg

J'ai un début de solution ...
Voici le code que j'utilise, il marche mais bizarrement la copie ne s'effectue pas sur la totalité de la sélection demandée (Img1)

Code:
'Création de l'image
Dim img1 As Range 'déclare la variable imag (Image)
Dim img2 As Range 'déclare la variable imag (Image)

Set img1 = Sheets("Feuil1").Range("A1:B15")
Set img2 = Sheets("Feuil1").Range("A20")

'img1.Copy img2 'copie la plage  et la colle dans dest
    img1.Select
        Selection.CopyPicture Appearance:=xlScreen, Format:=xlPicture
    img2.Select
        Me.Paste
        ThisWorkbook.Names.Add "Image", Selection.Name 'mémorise dans le nom défini Image
        ActiveCell.Activate
    

Dim Pict As Object
On Error Resume Next
Set Pict = Me.Pictures([Image])
    Application.ScreenUpdating = False
    
Pict.Name = Range("F2").Value
Pict.CopyPicture 'copie la dernière image créée
With Me.ChartObjects.Add(0, 0, Pict.Width, Pict.Height).Chart
  .Paste 'colle l'image dans un graphique temporaire
  .Export "D:\" & Pict.Name & ".jpg", "JPG"
  .Parent.Delete 'Supprime le graphique

End With
 
Re : Convertir shapes en jpeg

Bonjour,

Essayez la démarche suivante

1) copiez le code suivant dans un module standard (adaptez éventuellement la constante cernée par des ###)

Code:
'### Constante à adapter ###
Const MON_IMAGE As String = "C:\ma plage sélectionnée.jpg"
'###########################

Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, _
  ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Private Declare Function SetCursorPos& Lib "user32" (ByVal x As Long, ByVal y As Long)
Private Declare Function GetMessageExtraInfo& Lib "user32" ()
 
Const MOUSEEVENTF_LEFTDOWN = &H2
Const MOUSEEVENTF_LEFTUP = &H4

'//////////////////////////////////////////////
'/// NE PAS LANCER LA MACRO A PARTIR DU VBE ///
'//////////////////////////////////////////////
Sub Selection2JPG()
Dim C As CommandBar
Dim B As CommandBarButton
Dim S1 As Worksheet
Dim S2 As Worksheet
Dim S As Shape
Dim CO As ChartObject
Dim x&
Dim y&
Application.ScreenUpdating = True
Application.WindowState = xlMaximized
With ActiveWorkbook.Windows(1)
  .WindowState = xlMaximized
  x& = .Width \ 2
  y& = .Height \ 2
End With
Set S1 = ActiveSheet
Set S2 = Sheets.Add
Set C = CommandBars.Add
Set B = C.Controls.Add(Type:=msoControlButton, ID:=280)
S1.Activate
B.Execute
S2.Activate
SetCursorPos x&, y&
Call mouse_event(MOUSEEVENTF_LEFTDOWN, x&, y&, 0, GetMessageExtraInfo)     '
Call mouse_event(MOUSEEVENTF_LEFTUP, x&, y&, 0, GetMessageExtraInfo)
DoEvents
C.Delete
Set S = S2.Shapes(1)
With S
  .CopyPicture
  Set CO = S2.ChartObjects.Add(.Left, .Top, .Width, .Height)
End With
With CO.Chart
  .Paste
  .Export Filename:=MON_IMAGE
End With
Application.DisplayAlerts = False
S2.Delete
Application.DisplayAlerts = True
End Sub


2) sélectionnez la plage à exporter et lancez la macro Selection2JPG
SURTOUT NE PAS LANCER LA MACRO A PARTIR DU VBE à cause des simulations de touches
Dans l'exemple fourni, le résultat figurera dans le fichier "C:\ma plage sélectionnée.jpg"

Cordialement.

PMO
 
Re : Convertir shapes en jpeg

Bonjour,

Merci de votre aide, j'ai mis le code comme indiqué mais cela ne fonctionne pas 😕
je vais le relire pour bien tout comprendre car il me parait assez compliqué

Je voyais plus quelque chose de plus simple comme ci-dessous :
Code:
Sub test()
'Création de l'image
Dim RngImg As Range 'déclare la variable imag (Image)
Dim img2 As Range 'déclare la variable imag (Image)
Dim Ch As Chart
Dim Im As Picture
 
Set RngImg = Range("A1:I23")
Set Ch = Charts.Add
 
'copier image
RngImg.CopyPicture xlScreen, xlPicture
 
'coller dans chart
Ch.Paste
 
'export vers jpeg
Ch.Export "D:\Test.jpg"
 
End Sub

A modifier car il me donne pas vraiment ce que je souhaite (l'image est déformée)
Qu'en pensez-vous ?
 
Re : Convertir shapes en jpeg

Bonjour,

Dans votre code essayez de remplacer

Code:
RngImg.CopyPicture xlScreen, xlPicture

par

Code:
RngImg.CopyPicture xlScreen, xlBitmap

Cordialement.

PMO

j'ai essayé mais ca ne donne pas le résultat escompté
Par contre, je contourne le problème en redéfinissant le mode d'impression qui se met par défaut en paysage 😱, je le met en portrait et ca marche.

Il ne me reste plus qu'à supprimer le graph temporaire qui se crée dans un onglet.

Si quelqu'un avait une autre méthode ou m'expliquerai pourquoi cela fait ca.
 
Re : Convertir shapes en jpeg

Tout est ok, j'ai résolu les petits soucis qui concernait le graph

MERCI à tous

Voici le code pour ceux que ca intéresse
Code:
Private Sub CommandButton3_Click()
'Création de l'image
Dim RngImg As Range 'déclare la variable imag (Image)
Dim Ch As Chart
Dim Im As Picture
Dim A As Range




Set A = Sheets("Feuil1").Range("B4")

 
Set RngImg = Range("A1:B15")
Set Ch = Charts.Add

Ch.Name = Sheets("Feuil1").Range("B9").Value
'copier image
RngImg.CopyPicture xlScreen, xlPicture
 

'coller dans chart
Ch.Paste
 Application.ScreenUpdating = False
    With ActiveChart.PageSetup
        .LeftHeader = ""
        .CenterHeader = ""
        .RightHeader = ""
        .LeftFooter = ""
        .CenterFooter = ""
        .RightFooter = ""
        .LeftMargin = Application.InchesToPoints(0.17)
        .RightMargin = Application.InchesToPoints(0.19)
        .TopMargin = Application.InchesToPoints(0.33)
        .BottomMargin = Application.InchesToPoints(0.35)
        .HeaderMargin = Application.InchesToPoints(0.26)
        .FooterMargin = Application.InchesToPoints(0.19)
        .ChartSize = xlFullPage
        .PrintQuality = 600
        .CenterHorizontally = False
        .CenterVertically = False
        .Orientation = xlPortrait
        .Draft = False
        .PaperSize = xlPaperA4
        .FirstPageNumber = xlAutomatic
        .BlackAndWhite = False
        .Zoom = 100
    End With
     Application.ScreenUpdating = True
     
    
'export vers jpeg
Ch.Export "D:\" & A & "\" & Ch.Name & ".jpg", "JPG"

Application.DisplayAlerts = False
    Ch.Delete 'Supprime le graphique

End Sub
🙂
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
15
Affichages
614
Réponses
3
Affichages
326
Réponses
5
Affichages
265
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…