Insérer tableau dans email

Fermé
GDX Messages postés 219 Date d'inscription lundi 27 avril 2009 Statut Membre Dernière intervention 16 janvier 2020 - 19 juin 2019 à 18:00
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 - 20 juin 2019 à 22:01
Bonjour,

Je souhaite insérer un tableau (range) dans un mail en conservant ses propriétés de forme.

Il existe déjà une fonction pour faire cela à l'adresse suivante :

https://www.developpez.net/forums/d1554308-2/logiciels/microsoft-office/excel/macros-vba-excel/envoi-plusieurs-fichiers-mail-via-macro/#post11002156

Il s'agit de la fonction RetournTable de Partick. Je le remercie pour ce travail.

Je l'ai copé ci-dessous

Function RetournTable(R As Range) As String
    Dim L As Integer, C As Integer, Styl As String, elem As Object
    For L = 1 To R.Rows.Count
        code = code & "<tr id=ligne" & L & " > " & vbCrLf
        For C = 1 To R.Columns.Count
            code = code & "<td id=" & R(L, C).Address & ">" & R(L, C).Value & "</td>" & vbCrLf
        Next
        code = code & "</tr>" & vbCrLf
    Next
    With CreateObject("htmlfile")
        .write "<table>" & vbCrLf & code & "</table>"
        'ON VA STYLER LES CELLULES HTML IDENTIQUEMENT A CELLE DU SHEETS
        For Each elem In .all
            If elem.TAGNAME = "TABLE" Then
                elem.cellspacing = 0: elem.Style.Width = R.Width * (96 / 72): elem.Style.Height = R.Height * (96 / 72): elem.Style.bordercollapse = "collapse"
            End If
            If elem.TAGNAME = "TD" Then
                elem.Style.Border = "1px  solid " & coul_XL_to_coul_HTMLX(15853019)
                elem.Style.backgroundcolor = coul_XL_to_coul_HTMLX(Range(elem.ID).Interior.Color)
                elem.Style.Color = coul_XL_to_coul_HTMLX(Range(elem.ID).Font.Color)
                elem.Style.fontWeight = IIf(Range(elem.ID).Font.Bold, "bold", "")
                elem.Style.FontStyle = IIf(Range(elem.ID).Font.Italic, "italic", "")
                elem.Style.Width = Range(elem.ID).Width * (96 / 72)
                elem.Style.Height = Range(elem.ID).Height * (96 / 72)
            End If
        Next
        RetournTable = "<Div align='center'>" & .body.innerhtml & "</Div>"
    End With
End Function
Function coul_XL_to_coul_HTMLX(couleur)
    Dim str0 As String, str As String
    If couleur = 16777215 Then couleur = vbWhite
    str0 = Right("000000" & Hex(couleur), 6)
    str = Right(str0, 2) & Mid(str0, 3, 2) & Left(str0, 2)
    coul_XL_to_coul_HTMLX = "#" & str & ""
End Function


J'ai implémenté cette fonction dans mon code et cela fonctionne très bien.

Voilà ce que j'ai fait.
J'ouvre un fichier .msg dont je me sers comme modèle.
Je remplace un mot clé (ici "Tableau") par mon Range avec la fonction de Patrick.
Ensuite, j'affiche mon mail.

Dim myolapp As Object
    Dim MyItem As Object
 
    Set myolapp = CreateObject("Outlook.Application")
    Set MyItem = myolapp.CreateItemFromTemplate("C:\Temp\test.msg")
 
    MyItem.To = "toto@gmail.com"
    MyItem.Subject = "Nouveau mail"
    MyItem.HTMLBody = Replace(MyItem.HTMLBody, "Tableau", RetournTable(Sheets("Recap").Range("recapTab[#ALL]")))
 
    MyItem.Display


Lorsque le mail s'affiche, je retrouve bien mon modèle test.msg avec mon range inséré au bon emplacement.

Par contre sur les premières ligne, je retrouve au format texte le contenu de mon tableau avec des élément de mise en forme.

Pouvez-vous m'expliquer pourquoi ?
Savez-vous comment ne pas afficher ces premières lignes et à défaut, pouvez-vous me dire comment les supprimer après coup ?

Je vous remercie par avance,
A voir également:

2 réponses

yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477
Modifié le 19 juin 2019 à 20:54
bonjour, veux-tu dire que tout va bien à part que tu as quelques lignes superflues avec des informations de mise en forme?
si oui, peut-être utile de nous montrer ces informations de mise en forme, ou même l'ensemble du contenu html du mail..
je pense comprendre que la fonction RetournTable te renvoie un texte formaté html. Tu ne nous montres pas ce que tu en fais: où se trouve Tableau dans ton modèle? en d'autres mots, ton modèle est-il prévu pour y ajouter un tableau html?
pour tester, tu pourrais envoyer un mail avec, comme contenu, uniquement le texte fourni par RetournTable: cela donne quoi?
0
GDX Messages postés 219 Date d'inscription lundi 27 avril 2009 Statut Membre Dernière intervention 16 janvier 2020 9
20 juin 2019 à 10:25
Bonjour,

je vous remercie pour cette réponse.

Vous trouverez ci-dessous un lien vers deux images et un document txt pour illustrer mon problème

https://we.tl/t-ymnzqjh9xT

Merci encore,
GDX
0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477
20 juin 2019 à 22:01
merci de nous montrer le texte contenu dans C:\Temp\test.msg
0