Copiar una tabla en Outlook en formato imagen
Resuelto
fabkiller78
Mensajes publicados
11
Estado
Miembro
-
fabkiller78 Mensajes publicados 11 Estado Miembro -
fabkiller78 Mensajes publicados 11 Estado Miembro -
Bonjour,
Merci pour votre message. Vous pouvez insérer directement une image du tableau Excel dans le corps du mail en utilisant VBA pour copier le tableau au format image et l’ajouter en tant que pièce jointe ou HTML dans le Corps. Voici une approche possible en préservant votre structure et en ajoutant l’image dans le corps du mail.
Option 1: insérer l’image en tant que pièce jointe et l’utiliser dans le corps HTML
- Copier le tableau en image
- Enregistrer l’image sur le disque
- Joindre l’image au mail et l’insérer dans le corps HTML
Exemple adapté à votre code (suppose que vous utilisez le corps HTML):
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
Dim corps_mail As String
Dim imgPath As String
JourJ = Date ' ou votre variable existante
imgPath = Environ("USERPROFILE") & "\Desktop\DailySales.png" ' chemin de sauvegarde temporaire
' Copier le tableau Excel comme image
With ThisWorkbook.Sheets("Daily sales")
.Range("B2:X53").CopyPicture xlScreen, xlPicture
' Sauvegarder l'image dans le presse-papiers, puis créer un shape dans une fenêtre temporaire pour enregistrer si nécessaire
' Alternative simple : coller dans un nouveau classeur puis enregistrer comme image
Dim tmpWbk As Workbook
Dim tmpSh As Worksheet
Set tmpWbk = Workbooks.Add
Set tmpSh = tmpWbk.Sheets(1)
tmpSh.Range("A1").PasteSpecial
tmpWbk.SaveAs ThisWorkbook.Path & "\DailySales.png", xlPNG
imgPath = ThisWorkbook.Path & "\DailySales.png"
tmpWbk.Close False
End With
corps_mail = "Bonjour, " & vbNewLine & vbNewLine & _
"Veuillez trouver ci-dessous les ventes jour au " & Format(JourJ, "dd/mm/yyyy") & "." & vbNewLine & vbNewLine & _
"
" & vbNewLine & vbNewLine & _
"Bien cordialement
" With OutMail .To = "ventesjour" .CC = "" .BCC = "" .Subject = "Ventes jour au " & Format(JourJ, "dd/mm/yyyy") ' Utilisez du HTML dans le Body et attachez l’image en tant que pièce jointe avec un CID .HTMLBody = Replace(corps_mail, "
", "
") ' si vous mélangez HTML et texte .Attachments.Add imgPath, 1, 0, "DailySalesImage" ' 1 = olByValue, 0 = position (peut varier) ' Définir l’image en CID Dim f As Object Set f = .Attachments(.Attachments.Count) f.PropertyAccessor.SetProperty "http://schemas.microsoft.com/mapi/proptag/0x3712001F", "DailySalesImage" .Display End With Set OutMail = Nothing Set OutApp = Nothing Notes et remarques: - Cette méthode crée une image du tableau et l insère dans le corps via HTML en utilisant un CID (Content-ID). Outlook peut nécessiter des manipulations supplémentaires selon la version. - Le code ci-dessus peut nécessiter des ajustements pour enregistrer correctement le tableau comme image et pour définir le CID. Une méthode alternative consiste à copier-coller le tableau directement dans le corps en tant qu’image via les méthodes HTML/Image d’Outlook, mais cela dépend des possibilités d’Outlook et d’Excel sur votre système. - Assurez-vous que le chemin imgPath est accessible et que les permissions d’écriture/exportation sont autorisées. - Cette approche suppose que le fichier est ouvert et que l’onglet Daily sales est actif; si vous souhaitez automatiser sans activer, vous pouvez vous référer explicitement à la feuille et scanner la plage. Option 2: insérer l’image en tant que fichier joint et afficher une miniature dans le corps (liens inline simples) - Enregistrer l’image comme DailySales.png - Insérer une balise dans le HTMLBody - Note: certains clients Outlook bloquent les images locales; l’utilisation de CID (comme ci-dessus) est préférable. Si vous préférez, je peux vous proposer une version plus simplifiée et testée étape par étape adaptée exactement à votre modèle de code (garde de la chaîne corps_mail, gestion des sauts de ligne, et insertion de l’image). Dites-moi quelle approche vous convient le mieux (CID dans HTMLBody, ou image jointe avec lien local).
" With OutMail .To = "ventesjour" .CC = "" .BCC = "" .Subject = "Ventes jour au " & Format(JourJ, "dd/mm/yyyy") ' Utilisez du HTML dans le Body et attachez l’image en tant que pièce jointe avec un CID .HTMLBody = Replace(corps_mail, "
", "
") ' si vous mélangez HTML et texte .Attachments.Add imgPath, 1, 0, "DailySalesImage" ' 1 = olByValue, 0 = position (peut varier) ' Définir l’image en CID Dim f As Object Set f = .Attachments(.Attachments.Count) f.PropertyAccessor.SetProperty "http://schemas.microsoft.com/mapi/proptag/0x3712001F", "DailySalesImage" .Display End With Set OutMail = Nothing Set OutApp = Nothing Notes et remarques: - Cette méthode crée une image du tableau et l insère dans le corps via HTML en utilisant un CID (Content-ID). Outlook peut nécessiter des manipulations supplémentaires selon la version. - Le code ci-dessus peut nécessiter des ajustements pour enregistrer correctement le tableau comme image et pour définir le CID. Une méthode alternative consiste à copier-coller le tableau directement dans le corps en tant qu’image via les méthodes HTML/Image d’Outlook, mais cela dépend des possibilités d’Outlook et d’Excel sur votre système. - Assurez-vous que le chemin imgPath est accessible et que les permissions d’écriture/exportation sont autorisées. - Cette approche suppose que le fichier est ouvert et que l’onglet Daily sales est actif; si vous souhaitez automatiser sans activer, vous pouvez vous référer explicitement à la feuille et scanner la plage. Option 2: insérer l’image en tant que fichier joint et afficher une miniature dans le corps (liens inline simples) - Enregistrer l’image comme DailySales.png - Insérer une balise dans le HTMLBody - Note: certains clients Outlook bloquent les images locales; l’utilisation de CID (comme ci-dessus) est préférable. Si vous préférez, je peux vous proposer une version plus simplifiée et testée étape par étape adaptée exactement à votre modèle de code (garde de la chaîne corps_mail, gestion des sauts de ligne, et insertion de l’image). Dites-moi quelle approche vous convient le mieux (CID dans HTMLBody, ou image jointe avec lien local).
6 respuestas
-
Hola,
Una solución parcial, añade la copia como imagen en el código
Range("B2:X53").CopyPicture xlScreen, xlBitmap
Luego haz un Ctrl+V en la ubicación deseada en el cuerpo del correo de Outlook. -
Hola,
Me gustaría que todo sea automático.
He probado vuestra solución integrando en CorpsMail una "selection.paste", pero la macro falla en esa línea. Después de varias búsquedas y pruebas me pregunto si no sería más sencillo pasar por Word o PowerPoint en la macro? Es decir, hacer una copia de imagen hacia Word y recuperar esta imagen de Word para incluirla en el cuerpo del correo. -
En este caso, creo que hay que hacer el mensaje en formato HTML en el que se puede insertar una imagen mediante código.
Gran día de bondad, después de algunos ensayos, aquí está el código adaptado:
Dim Img As String, Plage As Range, PathTmp As String
PathTmp = Environ$("temp") & ""
Img = "Image.jpg"
Set Plage = Range("B2:X53")
'Creación de un archivo de imagen en el directorio temporal
Plage.CopyPicture
With ActiveSheet.ChartObjects.Add(0, 0, Plage.Width, Plage.Height)
.Activate
.Chart.Paste
.Chart.Export PathTmp & Img, "JPG"
End With
ActiveSheet.ChartObjects(ActiveSheet.ChartObjects.Count).Delete
Set OutApp = CreateObject("outlook.application")
Set OutMail = OutApp.CreateItem(olMailItem)
With OutMail
.TO = "ventesjour"
'.CC = ""
'.BCC = ""
.Subject = "Ventes jour au " & Format(JourJ, "dd/mm/yyyy")
.Attachments.Add PathTmp & Img, olByValue, 0
.HTMLBody = "<span LANG=FR><p class=style2>" _
& "<font FACE=Calibri SIZE=3>Bonjour,<br><br>" _
& "Veuillez trouver ci-dessous les ventes jour au " _
& Format(JourJ, "dd/mm/yyyy") & "<br><br>" _
& "Bien cordialement<br><br>" _
& "<img src='cid:" & Img & "'</font></span>"
.Display
End With
On Error GoTo 0
Set OutMail = Nothing
Set OutApp = Nothing
Kill PathTmp & Img -
Hola Normad,
Gracias por esta solución, creo que vamos en la dirección correcta.
Me aparece una imagen vacía en el cuerpo del correo con el siguiente mensaje:
"imposible de mostrar la imagen vinculada. El archivo puede haber sido movido, renombrado o eliminado. Verifica que la liga apunte al archivo y a la ubicación correcta"
Intento modificar el código pero hasta ahora en vano. -
Hola,
En casa funciona perfectamente.
¿Qué intentaste modificar?
Viendo el mensaje de error, empezaría por eliminar la
última línea:Kill PathTmp & Img
(Esta línea borra la imagen creada en tu carpeta temporal).
Si tras la eliminación funciona, habrá que borrar el archivo que puede existir ya al inicio del procedimiento, justo después de las líneas:
Dim Img As String, Plage As Range, PathTmp As String
PathTmp = Environ$("temp") & ""
Img = "Image.jpg"
añadir esta línea:If Dir(PathTmp & Img) <> "" Then Kill PathTmp & Img
Si no, pon el código completo del procedimiento.-
Hola, @Normad: El problema está relacionado con un fallo conocido en CCM... Tu línea de código: PathTmp = Environ$("temp") & "\"" fue transformada por las etiquetas de código del sitio commentçamarche.net, quedando como PathTmp = Environ$("temp") & """ Por lo tanto, no puede funcionar. @fabkiller78: así que reemplaza PathTmp = Environ$("temp") & "" por PathTmp = Environ$("temp") & "\"
-
-
Muchas gracias a ustedes dos
De hecho bastaba con modificar la línea PatchTmp para que funcionara
Mi problema está resuelto