VBA envoi mail Outlook avec signature - Mauvaise gestion du HTML ?

Bonjour à tous,

Je suis tombée sur plusieurs posts (maintenant clôturés) décrivant comment ajouter une signature à un mail outlook créé via VBA. Le dernier post de ce "fil" indirect est celui de damajeur du 30/03/23 :

https://forum.excel-pratique.com/excel/suite-du-sujet-vba-envoi-mail-outlook-avec-signature-182858#p...

J'utilise donc la fonction de thev pour insérer ma signature. Voici le code en question :

Function Signature(nom_signature As String, Optional nom_compte As String) As String
    Dim FSO As Object, TextStream As Object
    Dim nom_fichier As String, id_signature As String, id_signature_Pct20 As String

    On Error Resume Next
    Set FSO = CreateObject("Scripting.FileSystemObject")

    If nom_compte <> Empty Then id_signature = nom_signature & " (" & nom_compte & ")" _
    Else id_signature = nom_signature

    nom_fichier = Environ("APPDATA") & "\Microsoft\Signatures\" & id_signature & ".htm"
    Set TextStream = FSO.OpenTextFile(nom_fichier)

    If Err.Num = 0 Then
        Signature = TextStream.ReadAll
        id_signature_Pct20 = Replace(id_signature, " ", "%20")
        Signature = Replace(Signature, id_signature_Pct20, id_signature)
        'remplacement adresse relative images par adresse absolue
        Signature = Replace(Signature, id_signature & "_fichiers/", Environ("APPDATA") & "\Microsoft\Signatures\" & id_signature & "_fichiers/")
    End If

End Function

Je rencontre cependant un problème avec ce code :

Mon mail se crée avec la signature, pas de soucis, mais la signature est un espèce de méga pavé en HTML. Pourtant le format du mail est bien le HTML. Je ne comprends pas pourquoi cela ne se crée pas correctement. Voici le début de ce que j'obtiens :

<html xmlns:v="urn:schemas-microsoft-com:vml" 
xmlns:o="urn:schemas-microsoft-com:office:office" 
xmlns:w="urn:schemas-microsoft-com:office:word" 
xmlns:m=" [ici j'ai un lien]
xmlns= [ici j'ai un autre lien]
<head> 
<meta http-equiv=Content-Type content="text/html; charset=windows-1252"> 
<meta name=ProgId content=Word.Document> 
<meta name=Generator content="Microsoft Word 15"> 
<meta name=Originator content="Microsoft Word 15"> 

Bref, j'ai des centaines de lignes en HTML qui doivent correspondre à ce que Outlook est censé faire, mais pas de signature malheureusement...

Est-ce que quelqu'un aurait une idée de la raison et de comment résoudre le problème ?

Je vous remercie par avance pour votre aide, bonne soirée !

Bonjour,

Je vous conseille d'afficher le contenu du répertoire :

C:\Users\<votre profil>\AppData\Roaming\Microsoft\Signatures

pour voir comment est stockée votre signature : <nom_signature>.htm. Elle peut l'être avec le compte ou non.

Bonjour thev,

Merci pour la réponse !

En bidouillant j'ai passé mon corps de mail en .HTMLBody plutôt que en .Body et ça a fini par fonctionner, et effectivement j'ai passé la fonction signature en anglais pour les images et ça fonctionne niquel !

Encore merci.

Pour ceux que ça pourrait aider, voici mon code final (merci thev encore une fois pour ce code) :

Sub Envoi_Mail() 'début du programme 'mail_outlook'  

    'Création du mail :
    Dim OutApp As Object 'Déclaration de l'application objet Outlook
    Dim OutMail As Object 'Déclaration du mail objet Outlook

    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(olMailItem)

    With OutMail 'début de la déclaration concernant notre mail
        .to = "contact@mail.com"
        '.CC = ""      'ne pas oublier les "" lorsque le texte est écrit 'en dur', séparer les adresses mail par un ;
        '.CC = "aaaaaa@gmail.com; aaaaaa@gmail.com" 'champ mail en copie
        '.BCC = "" 'champ mail en copie caché

        'Champ du sujet du mail
        .Subject = "Mon_Sujet"
        .HTMLBody = "Mon corps de mail" & _
                    Signature("Mon_nom", "Mon_Compte") & _
                    .HTMLBody

        .Display 'affiche le mail en brouillon dans Outlook, pratique pour vérifier avant d'envoyer
        '.Send 'envoie directement le mail
        '.Save 'sauvegarde le mail

    End With 'fin de la déclaration

    Set OutMail = Nothing 'nettoie la mémoire en nettoyant les variables
    Set OutApp = Nothing 'nettoie la mémoire en nettoyant les variables

End Sub

Function Signature(nom_signature As String, Optional nom_compte As String) As String
    Dim FSO As Object, TextStream As Object
    Dim nom_fichier As String, id_signature As String, id_signature_Pct20 As String

    On Error Resume Next
    Set FSO = CreateObject("Scripting.FileSystemObject")

    If nom_compte <> Empty Then id_signature = nom_signature & " (" & nom_compte & ")" _
    Else id_signature = nom_signature

    nom_fichier = Environ("APPDATA") & "\Microsoft\Signatures\" & id_signature & ".htm"
    Set TextStream = FSO.OpenTextFile(nom_fichier)

    If Err.Num = 0 Then
        Signature = TextStream.ReadAll
        id_signature_Pct20 = Replace(id_signature, " ", "%20")
        Signature = Replace(Signature, id_signature_Pct20, id_signature)
        'remplacement adresse relative images par adresse absolue
        Signature = Replace(Signature, id_signature & "_files/", Environ("APPDATA") & "\Microsoft\Signatures\" & id_signature & "_files/")
    End If

End Function
Rechercher des sujets similaires à "vba envoi mail outlook signature mauvaise gestion html"