Microsoft 365 Envoi de la signature de l'utilisateur macro envoi de mail

spike29

XLDnaute Occasionnel
Bonjour le forum,

J'ai un programme qui permet à l'utilisateur de générer automatiquement un mail via outlook après avoir saisie une valeur en C19 & D19 de la feuil "tools".

La construction du mail fonctionne très bien chez moi. Pour des raisons de lisibilité j'ai intégré au code du html afin de travailler la mise en forme du mail.

Ma problématique est la suivante :

Plusieurs personnes utilisent ce fichier et j'aimerai dans la construction du mail pouvoir automatiquement intégrer leurs signatures personnelle outlook. A noter que dans la signature de ces différents utilisateurs comme souvent, il y a des logos en plus du texte.
Après quelques lectures à ce sujet, j'ai noté que c'était possible, notamment avec du html. Mon seul problème est que tout les codes que j'ai pu récupérer ne fonctionnent pas lorsque je les intègre au mien.

J'ai testé le code "GetBoiler" sans succès

ce code ci également
VB:
.GetInspector.CommandBars.Item("Insert").Controls("Signature").Controls(1).Execute
sans résultat.

Mon dernier test quant à lui intègre la fonction suivante insérée en fin de code :

Code:
Function Signature(nom_signature As String) As String
    Dim FSO As Object, TextStream As Object
    Dim nom_fichier As String

    Signature = Empty
    On Error Resume Next
    Set FSO = CreateObject("Scripting.FileSystemObject")
    nom_fichier = Environ("APPDATA") & "\Microsoft\Signatures\" & nom_signature & ".htm"
    Set TextStream = FSO.OpenTextFile(nom_fichier)
    If Err.num = 0 Then
        Signature = TextStream.ReadAll
        'remplacement adresse relative images par adresse absolue
        Signature = Replace(Signature, nom_signature & "_fichiers/", Environ("APPDATA") & "\Microsoft\Signatures\" & nom_signature & "_fichiers/")
    End If
End Function

La partie du code pour la construction du mail est la suivante, j'y insère le code "Signature replace" à la fin du balisage html mais ça ne fonctionne pas.
Lorsque j'essaye d'insérer la partie "signature replace" à la syntaxe html cela ne fonctionne toujours pas.


Code:
et OutApp = CreateObject("outlook.application")
Set Outmail = OutApp.CreateItem(0)


    With Outmail
        .to = Dest
        .CC = ""
        .Subject = "#HELP I'm lost ! => " & Besoin
        
         .BodyFormat = 2
         '.GetInspector.CommandBars.Item("Insert").Controls("Signature").Controls(1).Execute
            .htmlbody = "<HTML><body>Bonjour cher admin <p>" _
                    & "Vous trouverez ci-dessous une nouvelle demande : <p>" _
                    & "Elle concerne la catégorie suivante  : <b>" & Sheets("Tools").Range("C19").Value & " </b> <p>" _
                    & "<u> Détail de la demande : </u>  <b>" & Sheets("Tools").Range("D19").Value & " </b> <p>" _
                    & "Bonne journée </body><HTML>"
                    Signature Replace(Signature, NA & "_fichiers/", Environ("APPDATA") & "\Microsoft\Signatures\" & NA & "_fichiers/")
        .display
        .Importance = 2 ' Niveau d'importance du mail
    
    End With

Le fichier est en PJ. Le module Mail_AC correspond au code que j'utilise. Le module banque_deCode_Signature correspond comme son nom l'indique à une banque de code que j'ai testé sans succès.

Si quelqu'un a une solution je suis preneur. Merci d'avance et bonne journée le forum.
 
Solution
Bonjour Spike29, JP

Je n'utilise plus cette méthode (GetInspector) depuis longtemps :eek:
Puisque la signature de la personne s'affiche automatiquement lorsque celle-ci créée un mail (ou alors pb de paramétrage)

Il suffit d'afficher le mail avant sa création, voici le code
VB:
Sub EnvoiMail
  Dim OutObj as Object, Email as Object
  Dim Signature As String
  ' Création d'une instance Outlook pour envoyer un mail
  Set OutObj = CreateObject("Outlook.Application")
  Set Email = OutObj.CreateItem(0)
  ' Afficher l'objet mail pour avoir la signature
  Email.Display
  ' Mémoriser la signature qui s'affiche
  Signature = Email.HtmlBody
  Email.To = "destinataire@fai.fr"
  Email.Cc = "copie@fai.fr"
  ' Sujet de l'eMail
  Email.Subject = "LE...

jurassic pork

XLDnaute Occasionnel
Hello,
es-tu sûr que les signatures sont présentes :
  1. Localisez le dossier Signatures: Le dossier Signatures se trouve dans le répertoire AppData, qui varie en fonction du système d'exploitation:
    • Windows 10/8: les C:\Users\<username>\AppData\Roaming\Microsoft\Signatures
    • Windows 7: C:\Users\<username>\AppData\Roaming\Microsoft\Signatures
    • Windows XP: C:\Documents and Settings\<username>\Application Data\Microsoft\Signatures
Y a t il des fichiers .htm dans un de ses répertoires.
Les signatures des autres personnes ne sont-elles pas sous un autre <username> ? y as tu accès ?
Si les autres personnes travaillent sur un autre ordinateur, tu n'auras pas leur signature.

Ami calmant, J.P
 

wDog66

XLDnaute Occasionnel
Bonjour Spike29, JP

Je n'utilise plus cette méthode (GetInspector) depuis longtemps :eek:
Puisque la signature de la personne s'affiche automatiquement lorsque celle-ci créée un mail (ou alors pb de paramétrage)

Il suffit d'afficher le mail avant sa création, voici le code
VB:
Sub EnvoiMail
  Dim OutObj as Object, Email as Object
  Dim Signature As String
  ' Création d'une instance Outlook pour envoyer un mail
  Set OutObj = CreateObject("Outlook.Application")
  Set Email = OutObj.CreateItem(0)
  ' Afficher l'objet mail pour avoir la signature
  Email.Display
  ' Mémoriser la signature qui s'affiche
  Signature = Email.HtmlBody
  Email.To = "destinataire@fai.fr"
  Email.Cc = "copie@fai.fr"
  ' Sujet de l'eMail
  Email.Subject = "LE sujet de mon mail"
  ' Corps de mon mail
  Email.HtmlBody = "Bonjour,<BR><BR>" _
  & "voici le texte de mon mail<BR><BR>" _
  & "Cordialement" & Signature
  ' Envoyer l'Email
  Email.Send
    ' Effacer les objets
  Set Email = Nothing
  Set OutObj = Nothing
  ' Afficher un message
  Application.StatusBar = "C'est fini, le mail a été envoyé !"
  ' ou
  MsgBox = "C'est fini, le mail a été envoyé !"
End Sub

A+
 

spike29

XLDnaute Occasionnel
Bonsoir à vous deux et merci pour vos retours,

J'ai testé la réponse de wDog66 et ça fonctionne parfaitement. Reste plus qu'a tester avec d'autres collègues mais il n'y a pas de raison que ça ne fonctionne pas chez eux. Encore Merci.
Bonne fin de journée

 

Discussions similaires

Réponses
6
Affichages
613

Statistiques des forums

Discussions
315 111
Messages
2 116 340
Membres
112 721
dernier inscrit
Ulricn