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 FunctionJe 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 !
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
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