Macro suppression double saut de ligne avant signature mail
Bonjour à tous !
J'ai la macro ci-dessous qui fonctionne très bien pour ce que je veux en faire. Il reste tout de même un point qui me dérange mais que je n'arrive pas à le solutionner.
Lorsque le mail est généré par la macro, j'ai un double saut de ligne avant ma signature par défaut dans outlook. De ce que j'ai compris, ce double saut de ligne est présent par défaut en amont des signatures dans Outlook. Cela me convient au quotidien dans l'usage de ma boite mail.
Par contre, dans le cadre de l'usage de la macro ci-dessous, je souhaiterais que ce saut de ligne soit simple et non double.... Savez-vous s'il est possible de faire ce genre de chose en ajoutant une ou plusieurs lignes de code ?
Je vous remercie par avance pour votre aide !
Sub mail()
Dim ol As New Outlook.Application
Dim olmail As MailItem
Dim CurrFile As String, bHTML
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
.Display
.To = Destinataire
If Copie <> "" Then
.CC = Copie
End If
.Subject = Sujet 'le sujet
.HTMLBody = "<BODY style='font-size:12pt;font-family:Calibri'>" & _
Replace(contenu, vbLf, "<br>") & _
"</BODY>" & .HTMLBody
.Attachments.Add fichierpdf 'si piéce jointe
'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 SubBonjour,
Si je comprends bien, tu as une signature Outlook qui s'ajoute automatiquement au corps du message ? A ton avis, c'est au moment du .Send ?
Qu'est ce qu'il y a dans la cellule AW44 qui correspnd au contenu ? En fait, je veux savoir s'il y a un saut de ligne après le dernier mot.
Benead
Je viens de faire quelques tests, 2 solutions :
1- Mettre le .Display ou le .Send après " .HTMLBody" après avoir ajouter dans la signature dans le corps du message, soit présente dans une cellule, soit regénérée d'après le username de l'utilisateur + table d'indentification de l'utilisateur
2- Laisser le .Display au début, ajouter la signature au contenu, puis supprimer la signature déjà indiquée dans le corps du message :
.Display
contenu = contenu & .Body ' Ajout de la signature au contenu
.Body = "" ' Suppression de la signatureLa signature a bien deux sauts de lignes, mais ajouté au contenu cela devrait correspondre à ta demande, par contre cela supprime toute personnalisation de cette dernière
Bonjour,
Je vous remercie pour ce retour.
Pour moi, la signature est insérée lorsqu'un "nouveau message" est créé par outlook. Si je ne me trompe pas la signature est donc présente dès le début, le corps du mail et les autres infos sont renseignées dans un second temps (comme c'est le cas lorsque j'utilise outlook indépendamment d'excel).
Pour ce qui est de la cellule AW44 en effet, il s'agit du corps du mail et je vous confirme qu'il n'y a pas de saut de ligne dedans.
Pour recentrer le problème, la présence de ce double saut de ligne avant la signature est un paramètre par défaut d'Outlook (si je ne me trompe pas). Au quotidien, lors de mon usage de ma boite mail, j'ai systémiquement ce double saut de ligne d'inséré automatiquement lorsque j'ajoute ma signature.
Ma question était donc de savoir s'il est possible de conserver tout le paramétrage de ma macro et de simplement ajouter une commande indiquant de supprimer un saut de ligne entre le corps du mail et la signature.
Pour ce qui est de votre proposition 2, je ne comprends pas trop. Pouvez-vous m'en dire plus ?
Bonjour,
La seconde proposition est de mettre ces deux lignes :
contenu = contenu & .Body ' Ajout de la signature au contenu
.Body = "" ' Suppression de la signatureJuste après le .Display, j'ai testé cela fonctionne mais ça supprime le formatage de la signature s'il y en avait un.
bonjour Benead, Ed6888,
@Ed688, c'est une question difficile, n'est-ce pas ??? Je reprendrai là où j'étais coincé.
Sub Mailen()
Dim ol As New Outlook.Application
Dim olmail As MailItem
contenu = Sheets("Ordre_de_mission").Range("AW36").Value
If Right(contenu, 1) <> vbLf Then contenu = contenu & vbLf 'ajouter un saut de ligne s'il n'y est pas
Destinataire = "xyz@abc.de"
sujet = "blablabla"
Set ol = New Outlook.Application
Set olmail = ol.CreateItem(olMailItem)
With olmail
.Display
.Attachments.Add ThisWorkbook.Path & "\E68D88.png" 'ajouter votre signature comme PJ si vous voulez la signature
'.Attachments.Add fichier 'le fichier pdf
.To = Destinataire
.Subject = sujet 'le sujet
contenu2 = Replace(contenu, vbLf, "<br>") & "<align=""left""><img src=""cid:E68D88.png"" width=" & 397 & ">" 'transformer le body en HTML & intégrer signature
.HTMLBody = "<BODY style='font-size:12pt;font-family:Calibiri'>" & contenu2 & "</BODY>"
End With
End SubSalutations, Cow18.
Hello BsAlv (Cow18)
En effet c'est une problématique complexe...
J'avais en effet remarqué cette petite erreur de frappe (calibiri)
Pour ce qui est de la proposition ci-dessus, le corps du mail est bien en calibri 12 noir, et la signature s'insère comme il faut, au bon endroit. Tout est ok.
La seule chose que j'aurais aimé est que la signature (en HTML) ne soit pas dans la même cellule que le corps du mail (c'est un détail mais à l'usage je voudrais verrouiller la cellule ou se trouve la signature et avoir en parallèle la possibilité de modifier le corps du mail simplement)
Vous êtes persévérant !
re, oui, la même personne
j'ai modifié la macro "mail" mais je ne sais pas la tester, donc je suppose/éspère que c'est okay.
je voudrais verrouiller la cellule ou se trouve la signature
Il n'y a pas des cellules dans Outlook mais ça veut dire que la signature est toujours situé à X cm du dessus, quel que soit le nombre de lignes ??? Maintenant si vous choississez AW36 ou AW44, la signature se déplace et se trouvera juste après leur contenu. Si ce n'est pas çà, veuillez m'expliquer mieux.
Re,
Lorsque je disais que : "je voudrais verrouiller la cellule ou se trouve la signature" je voulais dire que je souhaite créer une cellule (AW53 par exemple) dédiée uniquement à ma signature. L'objectif est d'avoir la signature dans une cellule dédiée dans ma feuille de calcul et de pouvoir la verrouiller (et donc la protéger d'une modification accidentelle).
L'idée finale étant de demander à la macro de concatener le corps du mail + la signature (exemple : AW36 + AW53)
Je ne sais pas si c'est plus clair ?
A l'usage je peux être amené à modifier le corps du mail bien plus souvent que je serai amené à modifier ma signature : d'où m'ou histoire de les séparer dans des cellules distinctes l'une de l'autre.
re,
donc ce n'est plus la signature avec un fichier, mais maintenant, c'est une signature avec un texte HTML ?
Ou les 2 ?
Re !
J'ai du mal à exprimer ce que je cherche à faire et j'ai beau essayer de modifier directement votre code je n'y parviens pas seul...
Je n'ai pas besoin de toute la partie de code en liens avec l'onglet "signature" de votre fichier.
Ci-joint le fichier avec la macro mail (qui fonctionne et qui est la plus proche du résultat final recherché) et avec mes explications. Est-ce que je suis plus clair ?
Merci à vous pour votre patiente..
re, quel détour avons-nous fait pour arriver ici
Salut !
J'ai bidoullié de mon côté et j'ai rajouté l'image (j'ai oublié de vous préciser que je voulais garder l'image...)
Je vous remercie pour votre aide très précieuse ! Et surtout pour votre patience...
Voici le résultat final, ca fonctionne très bien (j'espère que je n'ai pas laissé des choses superflues.. :
Sub mail()
Dim ol As New Outlook.Application, olmail As MailItem
Dim Copie, Sujet, Contenu, FichierPDF, MyBody
If Range("AY25").Value = "" Then MsgBox "Email prestataire est inconnu (AY25)", vbCritical, "Problème": Exit Sub
If Range("AY23").Value = "" Then MsgBox "Chemin d'enregistrement du pdf est inconnu (AY23)", vbCritical, "Problème": Exit Sub
If Range("BB21") = 1 Then 'un "T" ou un "D"
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
MyBody = Replace(Contenu & IIf(Right(Contenu, 1) <> vbLf, vbLf, "") & Range("AW53").Value, vbLf, "<br>") 'ajouter un saut de ligne s'il n'y est pas
FichierPDF = Range("AY23").Value
Set ol = New Outlook.Application
Set olmail = ol.CreateItem(olMailItem)
With olmail
.Display
.Attachments.Add ThisWorkbook.Path & "\E68D88.png"
.Attachments.Add FichierPDF 'le fichier pdf !!!, supprimer le ' en face *********************
.To = Destinataire
If Copie <> "" Then .CC = Copie
.Subject = Sujet 'le sujet
contenu2 = "<align=""left""><img src=""cid:E68D88.png"" width=" & 397 & ">" 'transformer le body en HTML & intégrer signature
.HTMLBody = "<BODY style='font-size:12pt;font-family:Calibri'>" & MyBody & "</BODY>" & contenu2
'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 Subre,
à premier vue, c'est okay. Si vous voulez, on peut envoyer ce mail directement, sans intervention (et sans contrôle visuel) mais normallement les gens ne préfèrent pas cet option !!! (Sendkeys ne fonctionne plus dans Outlook365???)
Re,
En effet je préfère contrôler que tout est ok avant d'envoyer.
Je suis sur Excel / Outlook 2016 et .send ou .display fonctionnent tout deux
Vous m'avez vraiment bien aidé !! Merci à vous