Mettre de la couleur dans UNE PARTIE du corps d'un mail en VBA

lancelot92

XLDnaute Nouveau
Bonjour à tous,

Je suis étudiant en qualité et aussi novice en VBA.
J'ai programmé une macro qui me permet d'envoyer un mail à une personne lorsque je clique sur un bouton.
Voici mon programme :

Sub Envoi_mail_mars()
Dim MonMessage As Object
Dim TOTO As String
TOTO = Range("AF2")
Set MonOutlook = CreateObject("Outlook.Application")
Set MonMessage = MonOutlook.createitem(0)
MonMessage.to = "arnaud.piquerez@mslcircuits.com"
MonMessage.Subject = "Audit 5S / Zone NXT5 / mars 2014"
Corps = "Bonjour,"
Corps = Corps & Chr(13) & Chr(10) & Chr(13) & Chr(10)
Corps = Corps & "Le fichier de suivi pour la zone NXT5 vient d'être complété pour le mois de mars."
Corps = Corps & Chr(13) & Chr(10) & Chr(13) & Chr(10)
If TOTO > 0 Then
Corps = Corps & "ATTENTION Vous avez " & Range("AF2") & " commentaire(s) redondant(s) depuis 3 mois !!"
Else
End If
Corps = Corps & Chr(13) & Chr(10) & Chr(13) & Chr(10)
Corps = Corps & "Vous pouvez dorénavant imprimer l'audit, l'afficher au poste et mettre en place les actions correctives associées."
MonMessage.body = Corps
MonMessage.send
Set MonOutlook = Nothing
End Sub


Cependant, il y a une partie du corps que je voudrais faire apparaître en rouge dans mon mail :

Corps = Corps & "ATTENTION Vous avez " & Range("AF2") & " commentaire(s) redondant(s) depuis 3 mois !!"


Auriez vous une solution à me proposer ?

Un grand merci d'avance !
 

sousou

XLDnaute Barbatruc
Re : Mettre de la couleur dans UNE PARTIE du corps d'un mail en VBA

Bonjour.
Je pense qu'il faut d'abord que ton mail soit de type Html (voir ta messagerie)
Ensuite confectionner le corps du mail avec les balise html nécessaires
 

lancelot92

XLDnaute Nouveau
Re : Mettre de la couleur dans UNE PARTIE du corps d'un mail en VBA

Bonjour sousou,

Déjà merci beaucoup pour ta réponse.
Pour les balise je comprends mais par rapport au type html j'ai un peu de mal. Car si tu veux ma macro va servir à une centaine de personnes et du coup si je te suis il faudrait paramétrer chaque messagerie, c'est bien ça ?
 

camarchepas

XLDnaute Barbatruc
Re : Mettre de la couleur dans UNE PARTIE du corps d'un mail en VBA

Bonjour Lancelot , Sousou

Traité ici par Hulk :

et c'est juste Géant



https://www.excel-downloads.com/thr...tre-format-texte-en-gras-avec-couleur.130198/

Code:
Sub Envoi()

    Dim olApp As Outlook.Application
    Dim olItem As Outlook.MailItem

    Set olApp = CreateObject("Outlook.application")
    Set olItem = olApp.CreateItem(olMailItem)

    With olItem
        .To = "xxxxxxx@xxxxx.xx"
        .Subject = "Test"
        .BodyFormat = olFormatHTML
        .HTMLBody = "<HTML><body>Ce <b>mot</b> est en gras.<p>" _
        & "Ce " & "<u>mot</u> est souligné.<p>" & "Ce " _
        & "<FONT COLOR=RED>mot</FONT> est en rouge.<p>" _
        & "Ce " & "<i>mot</i> est en italique.</body><HTML>"
        .Display
    End With

End Sub
 

lancelot92

XLDnaute Nouveau
Re : Mettre de la couleur dans UNE PARTIE du corps d'un mail en VBA

Bonjour camarchepas,

Ecoute j'ai essayé ton code ainsi que celui vers lequel tu m'as envoyé mais ça ne fonctionne pas... pourtant je te promets que j'ai testé pas mal de fois en adaptant à mon code.
Soit j'ai droit à une "erreur de syntaxe" soit il ne reconnait pas mes instructions avec .html

Que faire ?
 

camarchepas

XLDnaute Barbatruc
Re : Mettre de la couleur dans UNE PARTIE du corps d'un mail en VBA

Alors ,

As tu bien référencé la bibliothéque outlook ?

Car j'arrive avec le résultat si joint juste en copiant le code dans un nouveau module et en déclarant ma bibliotheque.

Résultats.JPG

Peux- tu faire une copie écran de l'erreur ?
 

lancelot92

XLDnaute Nouveau
Re : Mettre de la couleur dans UNE PARTIE du corps d'un mail en VBA

Camarchepas,

Les options liées à la library outlook que tu m'indiques de cocher dans références sont déjà activées puisque mon mail fonctionne (tel qu'il est écrit en haut du topic).

En plus j'ai vérifié elles sont activées.

Est - ce que je me trompe en te disant ça ?
 

camarchepas

XLDnaute Barbatruc
Re : Mettre de la couleur dans UNE PARTIE du corps d'un mail en VBA

Bien en l'occurence oui,

Dans ton cas de figure tu déclare des objets et pas les objets outlook , donc tu n'as pas besoin de déclarer la bibliothéque dans ton cas.

par contre si tu veux des fonctions plus évoluées et ne pas te perdre dans les déclaration , il faut déclarer la bibliothéque, dés que c'est fait ça marche tout seul.

Par ailleur dans ton code :
ceci n'est pas correct: If TOTO > 0 Then

car Toto est déclaré : Dim TOTO As String autrement dit en chaine

l'écriture correcte est if Toto <>"" then

Voilà , poste moi une copie du référencement de ta bibliothéque ou mieux le fichier ou tu as implanté ce code que je regarde le problème

cordialement
 

camarchepas

XLDnaute Barbatruc
Re : Mettre de la couleur dans UNE PARTIE du corps d'un mail en VBA

Bonjour à tous,

Le fichier d'utilisation de cette procédure pour des raisons de confidentialité a été traité hors Forum,
Néanmoins pour que l'ensemble de la communauté puisse profiter de l'exemple, je publie le code, modifié et aseptisé.

Pour rappel, la bibliothèque Outlook doit être déclarée comme référence pour ce fichier :

https://www.excel-downloads.com/threads/envoyer-un-document-en-piece-jointe-avec-macro-excel.221583/

Recopiez le code ci dessous dans un module standard (ATTENTION de ne pas doublonner 'Option Explicit

Voilà , voilà pour le reste à vous de jouer ....

Code:
Option Explicit
Sub Envoi()
  'Mes objets
    Dim Appli_Outlook As Outlook.Application
    Dim Mail As Outlook.MailItem
    Dim Piece_Jointe As Outlook.Attachments
  
  'Mes variables
    Dim Coms As String, Phrase(10) As String, Pluriel As String
    Dim Corps As String, Info1 As String, Destinataires As String
    Dim Mois As String, Année As String
    Dim Chemin_Temp As String, Nom_Fichier As String
        
   'Initialisation des object outlook
    Set Appli_Outlook = CreateObject("Outlook.application")
    Set Mail = Appli_Outlook.CreateItem(olMailItem)
    Set Piece_Jointe = Mail.Attachments
    
    'A régler chaque mois et année ou trouver une cellule dans la feuille où l'info existe
     'Les adresses sont fictives , à remplacer par celle désirées
     Destinataires = "camarchepas@Fauxmail.fr; PasBo78@mailessai.fr"
    
    'L'on suppose que l'appellation de l'onglet correspond à ce que l'on veut afficher
    'Pour la démo mise en dur des valeurs
     Mois = "Juillet" 'ActiveSheet.Name
     Année = "2014" 'Range("A1")
     Info1 = "Parc Général Leclerc" ' Trim(Range("A5"))
     Coms = 1 'Range("A3")
    'Chemin et nom du fichier temporaire pièce jointe
     Chemin_Temp = "C:\temp\"
     Nom_Fichier = "Rapport.xlsx"
    
    'L'on suppose  pour l'exercice que le document à joindre est un relevé contenu dans l'onglet
    'depuis lequel on a lancé la macro
    'Gestion de la pièce jointe
    ActiveSheet.Copy
    Application.DisplayAlerts = False
     ActiveWorkbook.SaveAs Filename:=Chemin_Temp & Nom_Fichier, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
    Application.DisplayAlerts = True
    Workbooks(Nom_Fichier).Close False
    Piece_Jointe.Add Chemin_Temp & Nom_Fichier
    Kill Chemin_Temp & Nom_Fichier
    
    'Petit memo HTML: Pour plus de détail taper HTML sur la barre de recherche de votre navigateur
     '<!DOCTYPE html>  La balise !DOCTYPE donne les règles de mise en forme à appliquer par le l'interpréteur,
                       ' C'est le premier élément censé apparaître dans le code d'une page html
     '<body>           Il encadre le corps du document
     '<p>              Permet d'introduire un nouveau paragraphe: retour à la ligne + ligne vierge.
     '<FONT COLOR=RED> Réglage de la fonte de lettres ici Color pour la couleur : RED = Rouge
     '<u>              balise de mise en forme du texte
     '</u>             Fin de mise en forme
     '</FONT>          Fin des réglages de la fonte
     '<i>              Soulignement du texte
     '</i>             Fin du soulignement
     '</body><HTML>    Fin du corps de texte HTLM
     
    'Segmentation du texte
    Pluriel = IIf(Coms > 1, "s", "")
    Phrase(0) = "<!DOCTYPE html><body>Bonjour<p>"
    Phrase(1) = "Le fichier de rapport pour l'entretien du " & Info1
    Phrase(2) = " vient d'être compilé pour le mois de " & Mois & ".<p>"
    Phrase(3) = "<FONT COLOR=RED><u>"
    Phrase(4) = "ATTENTION " & Coms & " poubelle" & Pluriel & " pleine " & Pluriel & "!!"
    Phrase(5) = "</u><p></FONT><p>"
    Phrase(6) = "L'emplacement exact des poubelles vous est fournis ainsi que le planning des "
    Phrase(7) = "<i>actions correctives associées.</i>"
    Phrase(8) = "</body><HTML>"
    
   'Construction du corps de message
     Corps = Phrase(0) & Phrase(1) & Phrase(2)
    'Partie conditionnelle
     If Coms > 0 Then Corps = Corps & Phrase(3) & Phrase(4) & Phrase(5)
    '2 eme partie fixe
     Corps = Corps & Phrase(6) & Phrase(7) & Phrase(8)
   
   'Construction structure Mail
    With Mail
        'Destinataires
        .To = Destinataires
        'Sujet du mail
        .Subject = "Rapport / Secteur " & Info1 & " / " & Mois & " " & Année
        'Format du corps de message pour Outlook
        .BodyFormat = olFormatHTML
        'Corps du message outlook
        .HTMLBody = Corps
        'Affiche pour les tests, lorsque ok mettre en commentaire et activer la ligne envoi
        .Display
        'Commande t'envoi mail à activer lorsque ok, entre autre les bons destinataires
    '   .send
    End With

End Sub
 
Dernière édition:

Discussions similaires

Réponses
4
Affichages
8 K

Statistiques des forums

Discussions
314 495
Messages
2 110 223
Membres
110 708
dernier inscrit
novy16