Signature outlook

Bonjour à tous,

Je me permets de vous solliciter car je suis bloqué avec une macro.

Dans la macro « mail » présent dans le module 4 du fichier ci-joint, je souhaiterais intégrer l’ajout de ma signature aux mails généré par excel mais je bloque complètement.

Voici les quelques points utiles à mentionner :

  • Ma signature a une mise en forme particulière (couleur particulière, police etc) et je souhaite impérativement la conserver
  • Ma signature comporte une image

Dans la macro ci-dessous, est-il possible de demander à excel d’insérer ma signature comme elle se présente dans outlook ?
Si non, est-il possible que je reproduisse ma signature dans excel et qu’elle soit insérée dans le mail généré par la macro ? (texte sous forme de texte comme je l’aurai mis en forme + image)

Sub EnregistrerPDF()
On Error Resume Next
chemin = Sheets("Adresse+Chemin pour OM").Columns("A:A").Find(What:=Range("Q22"), After:=Sheets("Adresse+Chemin pour OM").Range("A1"), LookIn:=xlValues, LookAt:=xlWhole).Offset(0, 2).Value
If chemin = "" Then
MsgBox ("le code " & Range("Q22") & " est inexistant onglet Adresse+Chemin pour OM colonne A !!!")
Exit Sub
End If
lignesousdossier = 0
lignesousdossier = Sheets("Contact prestataires").Columns("A:A").Find(What:=Range("Q22"), After:=Sheets("Contact prestataires").Range("A1"), LookIn:=xlValues, LookAt:=xlWhole).Row
If lignesousdossier = 0 Then
MsgBox ("le code " & Range("Q22") & " est inexistant onglet Contact prestataires colonne A !!!")
Exit Sub
End If
If Sheets("Contact prestataires").Range("G" & lignesousdossier).Value = Range("Q13").Value Then
sousdossier = Sheets("Contact prestataires").Range("C" & lignesousdossier).Value
adrmail = Sheets("Contact prestataires").Range("I" & lignesousdossier).Value
Else
Do While lignesousdossier < Sheets("Contact prestataires").Range("G" & Rows.Count).End(xlUp).Row + 1
If Sheets("Contact prestataires").Range("G" & lignesousdossier).Value = Range("Q13").Value And Sheets("Contact prestataires").Range("A" & lignesousdossier).Value = Range("Q22").Value Then
sousdossier = Sheets("Contact prestataires").Range("C" & lignesousdossier).Value
adrmail = Sheets("Contact prestataires").Range("I" & lignesousdossier).Value
Exit Do
End If
lignesousdossier = lignesousdossier + 1
Loop
End If
If sousdossier = "" Then
MsgBox ("Attention aucun sous dossier correspondant au code site " & Range("Q22") & " pour l'entreprise " & Range("Q13") & " onglet Contact prestataires colonne A avec colonne G !!!")
Exit Sub
End If
If Dir(chemin & "\" & sousdossier, vbDirectory) = "" Then
MkDir chemin & "\" & sousdossier
End If

If Range("BB21") = 1 Then
typeordre = "D"
Else
typeordre = "T"
End If
jour = Replace(Format(Date, "YYYYMMDD"), "/", "")
nomfichier = "Ordre de mission " & Range("Q13") & " " & jour & "_" & typeordre & Range("Q22")

Fichier = Dir(chemin & "\" & sousdossier & "\**", vbDirectory)
Do While Fichier <> ""
If Fichier = nomfichier & ".pdf" Then
If MsgBox("Attention le fichier " & nomfichier & " est déjà présent dans le sous dossier " & sousdossier & " voulez vous le remplacer ???", vbYesNo) = vbNo Then
nomfichier = nomfichier & "-2"
End If
Exit Do
End If
    Fichier = Dir
Loop
    ActiveSheet.Columns("A:AS").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
       chemin & "\" & sousdossier & "\" & nomfichier, Quality:= _
        xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
        OpenAfterPublish:=False
Range("AY23") = ""
Range("AY25") = ""
Range("AY23") = chemin & "\" & sousdossier & "\" & nomfichier & ".pdf"
Range("AY25") = adrmail
End Sub
Sub mail()
Dim ol As New Outlook.Application
Dim olmail As MailItem
Dim CurrFile As String
   Set ol = New Outlook.Application
   Set olmail = ol.CreateItem(olMailItem)
   If Range("BB21") = 1 Then
   typeordre = "D"
   Else
   typeordre = "T"
   End If
If typeordre = "D" Then
If Range("AY25") = "" Or Range("AY23") = "" Then
MsgBox ("Attention une ou plusieurs données manquantes en cellules AY25/AY23 !!!")
Exit Sub
End If
Else
If Range("AY25") = "" Or Range("AY23") = "" Then
MsgBox ("Attention une ou plusieurs données manquantes en cellules AY25/AY23 !!!")
Exit Sub
End If
End If
Copie = ""
   If typeordre = "D" Then
   Destinataire = Range("AY25")
   Copie = Range("BA35")
   Sujet = Range("AX34")
   Contenu = Range("AW36")
   Else
   Destinataire = Range("AY25")
   Copie = Range("BA43")
   Sujet = Range("AX42")
   Contenu = Range("AW44")
   End If
   fichierpdf = Range("AY23")
   With olmail
      .To = Destinataire
      If Copie <> "" Then
      .CC = Copie
      End If
      .Subject = Sujet 'le sujet
      .Body = Contenu 'le contenu
      .Attachments.Add fichierpdf 'si piéce jointe
      .Display
'On peut switcher entre .send et .display selon que l'on veut envoyer le mail (send) ou seulement le préparer et le vérifier(display)
   End With
   'ol.Quit 'si l'on veut fermer l'application Outlook

End Sub



J’espère que je suis clair dans ma demande et que vous aurez une solution pour moi !

Merci à vous tous par avance !
Exemple 1 EMAIL.xlsm (1,3 Mo)

Bonjour.

Je pense qu’il es peux etre pas nécessaire de tout cela.

Avez vous essayer de rajouter l’option dans la signature « Nouveau Message » ?

selectionnez la votre et fait des testes

Salutations
Johnny

Bonjour Johonny,

Effectivement ma signature est insérée automatiquement dans outlook lorsque je crée un nouveau message…

J’aimerai qu’il en soit de même pour les nouceau message outllok générés via mon code mais je n’y parviens pas…

Et avec ceci ???

le body doit être HTML !!!
Si vous avez encore des problèmes, dites-le.

Bonjour Cow18,

J’ai bien vu votre retour sur mon autre sujet. J’allais vous répondre sur l’autre sujet mais ce sera plus simple et cohérent ici !

Je me suis permis de faire un nouveau sujet pour avoir l’aide de plus de monde et car l’autre est solutionné.

Pour ce qui est de votre proposition en effet j’ai avancé grâce à vous !

Mon image s’insère, j’arrive à paramétrer ma signature à l’aide de Word to HTML (Convertir des fichiers Word et PDF en HTML | Éditeur HTML en ligne gratuit).

Je n’ai plus qu’un problème et une interrogation :

  • Le problème : je n’arrive pas à supprimer l’espacement entre chaque ligne dans le code HTML (voir PJ. Je voudrais obtenir la configuration suivante mais je ne trouve pas comment :

  • L’interrogation : est-il possible, dans le code que vous avez adapté, de faire en sorte que la signature du mail soit en html et que le reste du mail ne le soit pas (je voudrais pouvoir modifier le corps du mail sans passer par du langage HTLM. J’ai donc créée une zone « signature » dans mon exemple ci-joint.

Merci infiniment pour l’aide apporté !
Exemple 1 EMAIL.xlsm (1,3 Mo)

Re !

Mea culpa, j’avais fait une fausse manip pour ce qui est de cet espace entre les lignes (j’avais omis de retirer </p>

Ma signature est donc fonctionnelle !! Merci pour votre aide Cow18 :grin:

Pouvez-vous me faire un retour pour ce qui est de séparer la signature du corps du mail ? (avec signature en HTLM et corps du mail sans HTML) ?

Dans l’attente de votre retour !

En AY2, vous avez une liste déroulante « Avec » ou « Sans » signature
Puis dans la macro « Mail », on a ces 3 lignes, qui décident sur la signature
Exemple 1 EMAIL (4).xlsm (110,8 Ko)

         bSignature = StrComp(Range("Avec Signature").Value, "Avec Signature", 1) = 0     'dans la cellule AY2, on a "Avec Signature"
          If bSignature Then .Attachments.Add ThisWorkbook.Path & "\E68D88.png"     'ajouter votre signature comme PJ si vous voulez la signature
          .HTMLBody = Replace(contenu, vbLf, "<br>") & IIf(bSignature, "<img src=""cid:E68D88.png"" width=" & 397 & ">", "")     'transformer le body en HTML & intégrer signature

Re !

Je vous remercie pour votre retour :slight_smile:

Après test, j’ai une erreur à ce niveau :

bSignature = StrComp(Range("Avec Signature").Value, "Avec Signature", 1) = 0     'dans la cellule AY2, on a "Avec Signature"

image

Par ailleurs, je n’aurai sans doute jamais besoin de choisir entre avec ou sans signature car je l’insère systématiquement. Est-il possible d’adapter le code dans ce sens ?

Je vous remercie pour votre aide et votre temps… !

j’avais mal compris la question et la cellule AY2 était la plage nommée « Avec_Signature »
Maintenant, j’utilise l’adresse de cette cellule et le choix entre un body « normal » en un body « HTML ». Naturellement, vous pouvez faire ce choix d’une manière différente.

Exemple 1 EMAIL (4).xlsm (110,7 Ko)

bHTML = StrComp(Range("AY2").Value, "Avec HTML", 1) = 0     'dans la cellule AY2, on a "Avec HTML"   >>>> alors le choix entre "Body " "HTMLBody"
          If bHTML Then
               .Attachments.Add ThisWorkbook.Path & "\E68D88.png"     'ajouter votre signature comme PJ si vous voulez la signature
               .HTMLBody = Replace(contenu, vbLf, "<br>") & "<img src=""cid:E68D88.png"" width=" & 397 & ">"     'transformer le body en HTML & intégrer signature
          Else
               .Body = contenu               'le contenu
          End If

Bonjour Cow18,

Je vous remercie une fois de plus pour retour et votre aide.

Il y un point que je ne comprends pas : avec le code que FFO avait établit, les mail générés avaient pour police du Calibri 12 (en noir). Avec code, la police est en times new roman 12 noir.

Sub EnregistrerPDF()
On Error Resume Next
chemin = Sheets("Adresse+Chemin pour OM").Columns("A:A").Find(What:=Range("Q22"), After:=Sheets("Adresse+Chemin pour OM").Range("A1"), LookIn:=xlValues, LookAt:=xlWhole).Offset(0, 2).Value
If chemin = "" Then
MsgBox ("le code " & Range("Q22") & " est inexistant onglet Adresse+Chemin pour OM colonne A !!!")
Exit Sub
End If
lignesousdossier = 0
lignesousdossier = Sheets("Contact prestataires").Columns("A:A").Find(What:=Range("Q22"), After:=Sheets("Contact prestataires").Range("A1"), LookIn:=xlValues, LookAt:=xlWhole).Row
If lignesousdossier = 0 Then
MsgBox ("le code " & Range("Q22") & " est inexistant onglet Contact prestataires colonne A !!!")
Exit Sub
End If
If Sheets("Contact prestataires").Range("G" & lignesousdossier).Value = Range("Q13").Value Then
sousdossier = Sheets("Contact prestataires").Range("C" & lignesousdossier).Value
adrmail = Sheets("Contact prestataires").Range("I" & lignesousdossier).Value
Else
Do While lignesousdossier < Sheets("Contact prestataires").Range("G" & Rows.Count).End(xlUp).Row + 1
If Sheets("Contact prestataires").Range("G" & lignesousdossier).Value = Range("Q13").Value And Sheets("Contact prestataires").Range("A" & lignesousdossier).Value = Range("Q22").Value Then
sousdossier = Sheets("Contact prestataires").Range("C" & lignesousdossier).Value
adrmail = Sheets("Contact prestataires").Range("I" & lignesousdossier).Value
Exit Do
End If
lignesousdossier = lignesousdossier + 1
Loop
End If
If sousdossier = "" Then
MsgBox ("Attention aucun sous dossier correspondant au code site " & Range("Q22") & " pour l'entreprise " & Range("Q13") & " onglet Contact prestataires colonne A avec colonne G !!!")
Exit Sub
End If
If Dir(chemin & "\" & sousdossier, vbDirectory) = "" Then
MkDir chemin & "\" & sousdossier
End If

If Range("BB21") = 1 Then
typeordre = "D"
Else
typeordre = "T"
End If
jour = Replace(Format(Date, "YYYYMMDD"), "/", "")
nomfichier = "Ordre de mission " & Range("Q13") & " " & jour & "_" & typeordre & Range("Q22")

Fichier = Dir(chemin & "\" & sousdossier & "\**", vbDirectory)
Do While Fichier <> ""
If Fichier = nomfichier & ".pdf" Then
If MsgBox("Attention le fichier " & nomfichier & " est déjà présent dans le sous dossier " & sousdossier & " voulez vous le remplacer ???", vbYesNo) = vbNo Then
nomfichier = nomfichier & "-2"
End If
Exit Do
End If
    Fichier = Dir
Loop
    ActiveSheet.Columns("A:AS").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
       chemin & "\" & sousdossier & "\" & nomfichier, Quality:= _
        xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
        OpenAfterPublish:=False
Range("AY23") = ""
Range("AY25") = ""
Range("AY23") = chemin & "\" & sousdossier & "\" & nomfichier & ".pdf"
Range("AY25") = adrmail
End Sub
Sub mail()
Dim ol As New Outlook.Application
Dim olmail As MailItem
Dim CurrFile As String
   Set ol = New Outlook.Application
   Set olmail = ol.CreateItem(olMailItem)
   If Range("BB21") = 1 Then
   typeordre = "D"
   Else
   typeordre = "T"
   End If
If typeordre = "D" Then
If Range("AY25") = "" Or Range("AY23") = "" Then
MsgBox ("Attention une ou plusieurs données manquantes en cellules AY25/AY23 !!!")
Exit Sub
End If
Else
If Range("AY25") = "" Or Range("AY23") = "" Then
MsgBox ("Attention une ou plusieurs données manquantes en cellules AY25/AY23 !!!")
Exit Sub
End If
End If
Copie = ""
   If typeordre = "D" Then
   Destinataire = Range("AY25")
   Copie = Range("BA35")
   Sujet = Range("AX34")
   Contenu = Range("AW36")
   Else
   Destinataire = Range("AY25")
   Copie = Range("BA43")
   Sujet = Range("AX42")
   Contenu = Range("AW44")
   End If
   fichierpdf = Range("AY23")
   With olmail
      .To = Destinataire
      If Copie <> "" Then
      .CC = Copie
      End If
      .Subject = Sujet 'le sujet
      .Body = Contenu 'le contenu
      .Attachments.Add fichierpdf 'si piéce jointe
      .Display
'On peut switcher entre .send et .display selon que l'on veut envoyer le mail (send) ou seulement le préparer et le vérifier(display)
   End With
   ol.Quit 'si l'on veut fermer l'application Outlook

End Sub


Je souhaite que le corps du mail soit en calibri 12 noir (comme c’était le cas avec le code ci-dessus). Savez-vous pourquoi le corps du mail passe en times new roman avec votre code ?

Par ailleurs, je reviens sur votre dernière proposition et ma demande (que j’exprime surement mal).

Je ne veux pas choisir entre un body avec ou sans HTML (la liste déroulante peut donc être supprimé). Je souhaiterais que le corps du mail soit généré comme il l’était dans le code ci-dessus (ou je pouvais modifier le corps du mail simplement sans passer par du html et que le corps du mail soit en calibri 12 noir) PUIS, que soit soit ajouté à la suite, ma signature (au format HTML vu que ça fonctionne ainsi à ce stade).
L’idée est de ne pas mélanger du HTML avec le reste du body… La signature du mail (en html) serait donc à placer dans la cellule AW53 par exemple.

Je ne sais pas si vous voyez ce que je veux dire ?

Récap :

Corps du mail = cellules AW36 ou AW44 = sans HTML, en calibri 12 noir (comme cela se faisait avec le code de FFO = code inséré plus haut dans mon message)
+
Signature en HTML (présente en cellule AW53
+
Image (enregistrée dans le même dossier que le fichier excel)

Est-ce possible ?

c’est la réponse de @Johnny d’avant-hier.
On crée une fois une signature fixe dans Outlook et quand vous créez un nouveau mail, Outlook ajoute sans intervention d’excel cette signature au mail (ou excel choisit entre vos signatures si vous en avez plusieurs). On n’aura pas des problèmes avec le font, cela sera le défaut « calibri 12 noir » et on oublie complètement le « HTMLbody ».

Bonjour,

Cette option est déjà activée de mon côté mais ce n’est pas pour autant que ma signature est insérée.

Pour activer cette option je vais dans : Fichier puis Option puis Courrier puis créer ou modifier les signatures des messages et j’ai effectivement activé l’insertion de ma signature pour les nouveaux messages…

Savez-vous d’où vient ce problème ?

Par ailleurs, la présence de la ligne « compte de messagerie » peut-elle être à l’origine du problème ? Cette case indique pourtant bien mon compte de messagerie.

Capture

je n’utilise pas Outlook et mon Outlook365 n’est pas francophone, mais pour créer votre signature, il faut choisir Fichier>Options>eMail>creer ou modifier signatures >Signatures et puis dans let écran on doit créer sa signature.

Si cela est trop difficile pour vous, est-ce qu’on peut communiquer en « privé » (avec mail) ?

Bonjour,

Je pense avoir configuré ma signature comme il faut car elle s’affiche automatiquement au quotidien : dans mes nouveaux mails et lors des réponses.

Le problème vient d’Excel selon moi et il est possible que le « compte de messagerie » soit l’origine exact de ce souci.

Enfaite, dans ma société, il doit y avoir un montage particulier avec outlook (mon compte de messagerie n’est accessible qu’en intranet). Par ailleurs, je pense qu’il doit y avoir X comptes pour une licence…

Peut-être qu’il manque un paramétrage dans le code pour qu’excel insère ma signature ou l’ouverture d’un nouveau mail ?

Si cette piste est trop complexe peut on étudier la possibilité de créer un mail avec deux partie ? Une en HTML dans une cellule et une sans HTML dans l’autre ? Je ne sais pas si c’est faisable ou non…

un autre essai avec la macro « mailen » (sans le reste, juste pour le teste)
Exemple 1 EMAIL (4).xlsm (114,0 Ko)

Bonjour !

Suite à ce test j’ai bien un mail qui est généré AVEC ma signature de mail !!

Le souci vient donc du code et pas de mon compte Outlook ni d’un paramétrage mal réglé.

Je vous remercie pour votre persévérance !

oui et non, j’ai ressenti une forme de pieds froids pour le HTMLBody mais cela est nécessaire pour utiliser soit la signature prévue ou soit la signature avec un attachment en combinaison avec un texte variable.
Exemple 1 EMAIL (4).xlsm (113,4 Ko)
Maintenant la macro « Mail » dans le module4 est modifiée.

1 « J'aime »

Vous voyez juste car la macro semble fonctionnelle après quelques tests !

La PJ est bien jointe, tout est ok pour les destinataires / destinataires en copie / objet / corps du mail / signature.

Un grand merci à vous !

Une dernière question, est-il possible de demander à excel de supprimer une ligne entre le corps du mail et la signature ?

J’ai un double saut de ligne actuellement (également présent lorsque je crée un nouveau mail directement via outlook). Exemple :
Saut de ligne
Saut de ligne
Signature

Cela me convient lorsque j’édite mes mails à la mains car je m’économise l’insertion d’un saut ligne dès le départ.

Cependant, dans le cadre de mail automatique je voudrais savoir s’il est possible de le supprimer à l’aide de la macro ?

Encore un immense merci à vous !

je peux supprimer un saut de ligne dans le texte que VBA ajoute (donc dans « contenu ») mais je ne peux pas changer les sauts de ligne dans la signature. (il faut créer un 2ième signature avec un en moins ???)
Exemple 1 EMAIL (4).xlsm (113,1 Ko)

J’avais déjà essayé de supprimé tous les sauts de lignes se trouvant à la fin du corps du mail…

Enfaite le soucis est que je n’ai pas de saut de ligne d’inséré avant le début de ma signature dans la signature que j’ai créé sur outlook.

Je viens d’effectuer un test en créant une autre signature avec juste un mot et lors de la création d’un nouveau mail j’ai malgré tout un double saut de ligne avant le début de la signature…

Concrètement ce n’est pas dramatique mais je posais la question au cas ou il existait une commande permettant de supprimer un de ces sauts de ligne.