Créer mail depuis Excel vers Outlook EN TEXTE BRUT
Résolu
touroul
Messages postés
520
Date d'inscription
Statut
Membre
Dernière intervention
-
touroul Messages postés 520 Date d'inscription Statut Membre Dernière intervention -
touroul Messages postés 520 Date d'inscription Statut Membre Dernière intervention -
Bonsoir le forum,
Depuis longtemps déjà, j'ai adapté une macro me permettant de générer un mail vers Outlook.
Le corps du mail est un ensemble de lignes du fichier Excel Source, ça fonctionne très bien, et sans activer de complément Excel.
Aujourd'hui, je cherche à modifier ma macro pour que les lignes de texte soient copiés dans le corps du mail non pas avec leur mise en forme (couleur, bordure, et ... cellules), mais en TEXTE BRUT.
Je n'ai rien trouvé là dessus, si ce n'est un paramètre :
Pourriez-vous m'apporter de l'aide SVP ?
Voici un lien vers un fichier exemple :
https://www.cjoint.com/c/IFes7YD4Gfb
Et voici ma macro :
Par avance merci pour votre aide
Depuis longtemps déjà, j'ai adapté une macro me permettant de générer un mail vers Outlook.
Le corps du mail est un ensemble de lignes du fichier Excel Source, ça fonctionne très bien, et sans activer de complément Excel.
Aujourd'hui, je cherche à modifier ma macro pour que les lignes de texte soient copiés dans le corps du mail non pas avec leur mise en forme (couleur, bordure, et ... cellules), mais en TEXTE BRUT.
Je n'ai rien trouvé là dessus, si ce n'est un paramètre :
.BodyFormat = olFormatRichTextque je ne sais pas adapter.
Pourriez-vous m'apporter de l'aide SVP ?
Voici un lien vers un fichier exemple :
https://www.cjoint.com/c/IFes7YD4Gfb
Et voici ma macro :
Option Explicit
Sub Mailing() 'Envoi automatique de mails
Dim lienH As String
Dim Body As Variant
Dim FeuilleActive As String
FeuilleActive = ActiveSheet.Name
Const olMailItem = 0
Dim r As Range
Set r = Range("B6:B15")
r.Copy
Dim outlookApp As Object
Set outlookApp = CreateObject("Outlook.Application")
Dim OutMail As Object
Set OutMail = outlookApp.CreateItem(olMailItem)
With OutMail 'Destinataires et Objet :
.To = Range("B2").Text
.Subject = Range("B4").Text
' .BodyFormat = olFormatRichText
End With
OutMail.Display
Dim wordDoc As Object
Set wordDoc = OutMail.GetInspector.WordEditor
'BodyFormat = olFormatRichText
wordDoc.Range.PasteExcelTable LinkedToExcel:=False, WordFormatting:=False, RTF:=False
Application.CutCopyMode = False
ThisWorkbook.Activate: Sheets(FeuilleActive).Range("C2").Select
End Sub
Par avance merci pour votre aide
Configuration: Windows / Firefox 67.0 / Excel 365
5 réponses
-
Salut ,
Au moment de copier ton tableau excel il y a plusieurs arguments à prendre en compte.
Ton code d'origine au moment de la copie est :
wordDoc.Range.PasteExcelTable LinkedToExcel:=False, WordFormatting:=False, RTF:=False
Essai soit ceci :wordDoc.Range.PasteExcelTable LinkedToExcel:=False, WordFormatting:=True, RTF:=True
SoitwordDoc.Range.PasteExcelTable LinkedToExcel:=False, WordFormatting:=False, RTF:=True
Je me suis appuyé sur cette doc pour te proposer une des deux solutions qui me semble viable :
https://docs.microsoft.com/fr-fr/office/vba/api/word.range.pasteexceltable
-
Bonjour
Un petit up!
Avez-vous une idée pour intégrer la variable BodyFormat = olFormatRichText dans ma macro ?
Merci ! -
Bonsoir Ozone
Merci pour ton aide.
J'ai essayé avec :
- wordDoc.Range.PasteExcelTable LinkedToExcel:=False, WordFormatting:=True, RTF:=True : il recopie les cellules dans le mail sans la couleur de fond, mais avec les cellules et leurs bordures (comme en False/True/False)
-wordDoc.Range.PasteExcelTable LinkedToExcel:=False, WordFormatting:=False, RTF:=True
: il recopie les cellules dans le mail avec la couleur de fond, avec les cellules, mais sans leur bordure.
Le site de Microsoft ne semble pas indiquer d'autres options.
Je ne parviens donc pas à me débarasser des cellules, pas moyen de faire du texte brut.
Pourtant il existe la variableBodyFormat = olFormatRichText
: lorsque je la mets dans la définition de Outmail, il me l'indique en variable non définie ... :(
Si tu as une idée : pas sûr que ce soit possible
Bonne soirée ! -
Ah mince !
Le.BodyFormat = olFormatRichText
aurait un intérêt si tu avait une instruction .body dans ton mail. Tu as .To et .Subject pour respectivement le destinataire du mail et le sujet.
Or dans ton cas tu ne met pas de message (body) dans ton mail mais un copier/coller des cellules avec cette instructionSet r = Range("B6:B15")
Comment est le tableau dans B6:B15 ?
Tu peux concaténer ces valeurs les une à la suite des autres et ainsi t'éviter le copier/coller.
Ce qui pourrait donner :Option Explicit
Sub Mailing() 'Envoi automatique de mails
Dim lienH As String
Dim Body As Variant
Dim FeuilleActive As String
FeuilleActive = ActiveSheet.Name
Const olMailItem = 0
Dim outlookApp As Object
Set outlookApp = CreateObject("Outlook.Application")
Dim OutMail As Object
Set OutMail = outlookApp.CreateItem(olMailItem)
With OutMail 'Destinataires et Objet :
.To = Range("B2").Text
.Subject = Range("B4").Text
.BodyFormat = olFormatRichText
.Body = Range("B6").Text & chr(10) & Range("B7").Text & chr(10) & Range("B8").Text & chr(10) & Range("B9").Text & chr(10) & Range("B10").Text & chr(10) & Range("B11").Text & chr(10) & Range("B12").Text & chr(10) & Range("B13").Text & chr(10) & Range("B14").Text & chr(10) & Range("B15").Text
End With
OutMail.Display
ThisWorkbook.Activate: Sheets(FeuilleActive).Range("C2").Select
End Sub
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Je comprends à présent ... j'ai donc mal mélangé 2 procédures distinctes.
L'idée de remplacer le Range de cellules en concaténant les mêmes cellules est à creuser.
Si j'utilise ta macro adaptée exactement comme tu l'as mis dans le post, j'obtiens systématiquement les mêmes erreurs :
- avec Option Explicit m'obligeant à déclarer toutes les variables : erreur de compilation : Variable non définie
- sans option Explicit : Erreur d'éxecution '5' : Argument ou appel de procédure incorrect.
J'imagine donc qu'il faut fixer via Dim la variable.
Je te remets mon fichier ici : https://www.cjoint.com/c/IFgsZ3IOvLb
Merci pour ta persévérance !