VBA : intégrer contenu cellule avec HtlmBody

Bonjour,

Débutant en VBA et encore plus Html, je bloque sur la mise en forme de mon corps de mail.

Contexte:

J'ai une macro qui me permet de générer des mails de signalement.

Je souhaite pouvoir hiérarchiser le corps de mail par de la couleur et du texte en gras.

J'utilise pour cela le langage Html.

Jusque là tout fonctionnement bien.

Problématique:

Dès que j'essaye d'intégrer dans le corps de mail le contenu d'une cellule (un chiffre) ça ne fonctionne pas.

C'est le texte du code qui se retrouve et gras et non le contenu de la cellule souhaitée : <b> HtmlRch(ThisWorkbook.Worksheets(1).Cells(6, 2).Text)</b>

Je bloque depuis maintenant des heures sur ce point et malgré mes recherches je n'ai pas trouvé de réponses à ma problématique.

Autre point :

Je veux intégrer le contenu d'une cellule dans le corps de mail Html. Valeur string OUI /NON

Je souhaite appliquer une mise en forme conditionnel sur le contenu de cette cellule : si OUI surligner en VERT / si NON surligner en ROUGE

Je suis conscient que la structure de mon code peut largement être optimisée mais dans un premier temps je souhaite un code fonctionnel et le plus simple possible.

Merci d'avance pour vos réponses

Ci-dessous le détail de mon code :

Sub EnvoyerMail()

Set OutApp = CreateObject("outlook.application")

Set OutMail = OutApp.CreateItem(0)

With OutMail

.To = Sheets("MAIL").Range("B199").Value

.CC = ""

.Subject = " SIGNALEMENT " & " " & Sheets("signalement").Range("A3").Value & " " & Sheets("signalement").Range("B6").Value & " " & " code erreur " & Sheets("signalement").Range("B17").Value

.BodyFormat = olFormatHTML

.HTMLBody = "<HTML><body>Bonjour <p>" _

& "Vous trouverez ci-dessous un nouveau signalement. <p>" _

& "Il s'agit de la fiche n°" & "<b> HtmlRch(ThisWorkbook.Worksheets(1).Cells(6, 2).Text)</b> <p>" _

& "<FONT COLOR=RED>Temps perdu</FONT> en minutes <p>" _

& "Cordialement </body><HTML>"

.Display

End Sub

Bonjour,

il vous faut séparer le texte de la fonction de la valeur de votre "texte", en gros il faut fermer les guillemets ajouter un "&& mettre la fonction VBA puis un autre "&" et rouvrir les guillemets.

MaVariable = "Aujourd'hui, il fait " & worksheet(1).range("A2").value & ", je m'ennuis à la maison"

Ici

& "Il s'agit de la fiche n°" & " <b> HtmlRch(ThisWorkbook.Worksheets(1).Cells(6, 2).Text)</b> <p>"

le découpage n'est pas bon

@ bientôt

LouReeD

Bonjour,

Merci pour votre réponse.

Cependant, ça ne marche pas chez moi.

J'ai copié le code avec votre syntaxe sur l'une des lignes du corps de mail : "Aujourd'hui, il fait " & worksheet(1).range("A2").value & ", je m'ennuis à la maison"

L'erreur suivante remonte : "Erreur de compilation dans le module caché : Module 3"

J'ai essayé toute de sorte de syntaxes et variantes et jamais le contenu d'une cellule n'a été reportée dans le mail.

Pour info j'ai bien activé Microsoft Outlook 14.0 Object Library.

Je sèche complètement sur le sujet...

Si vous avez un code "bout en bout" fonctionnel que je puisse intégrer au mien je suis preneur.

Merci d'avance et bon Dimanche.

Bonsoir,

Sub Test()
 With OutMail
 .To = Sheets("MAIL").Range("B199").Value
 .CC = ""
 .Subject = " SIGNALEMENT " & " " & Sheets("signalement").Range("A3").Value & " " & Sheets("signalement").Range("B6").Value & " " & " code erreur " & Sheets("signalement").Range("B17").Value
 .BodyFormat = olFormatHTML
 .HTMLBody = "<HTML><body>Bonjour <p>" _
 & "Vous trouverez ci-dessous un nouveau signalement. <p>" _
 & "Il s'agit de la fiche n°<b>" & ThisWorkbook.Worksheets(1).Cells(6, 2).Value &"</b> <p>" _
 & "<FONT COLOR=RED>Temps perdu</FONT> en minutes <p>" _
 & "Cordialement </body><HTML>"

 .Display
End With
End Sub

Un dernier test et je rend la main...

@ bientôt

LouReeD

Bonjour,

Top ça marche un grand merci. Un simple écart de syntaxe mais qui a fait toute la différence. Merci !

Je vais encore abuser de votre gentillesse désolé.

Avez-vous des éléments concernant ma 2ème problématique?

Je veux intégrer le contenu d'une cellule dans le corps de mail Html. Valeur string OUI /NON

Je souhaite appliquer une mise en forme conditionnel sur le contenu de cette cellule : si OUI surligner en VERT / si NON surligner en ROUGE

Pour surligner il faudra peut-être un CSS pour la mise en forme. Si c'est trop complexe je me contenterai de simplement colorer le "OUI" en vert et le "NON" en rouge.

Merci d'avance pour vos réponses

Bonne fin de journée

Cdt

Bonsoir,

un truc comme cela :

MaVariable = "Il fait très chaud, non ? " & IIF(Cells(6,5).value = "Oui","","<mark>NON !</mark>") & " Ceci est ma réponse..."

@ bientôt

LouReeD

Bonsoir,

Merci du retour mais malheureusement ça ne fonctionne pas chez moi.

Pas de remontée d'erreur de syntaxe mais avec ce code supplémentaire mon mail n'affiche plus rien excepté " -1".

Avez-vous une piste ?

Pour rappel ma problématique :

Appliquer une mise en forme conditionnelle dans le corps de mon mail sous VBA via la fonction HTMLBody.

Je veux intégrer le contenu d'une cellule dans le corps de mail Html. Valeur string OUI /NON

Je souhaite appliquer une mise en forme conditionnel sur le contenu de cette cellule : si OUI surligner en VERT / si NON surligner en ROUGE

La ligne concernée est la suivante :

& "La rame fiche est-elle pleine: <FONT COLOR=RED>" & ThisWorkbook.Worksheets(1).Cells(27, 8).Value & "</FONT> <p>" _

Mon code complet :

.BodyFormat = olFormatHTML

.HTMLBody = "<HTML><body>Bonjour <p>" _

& "Vous trouverez en PJ une nouvelle fiche signalement. <p>" _

& "Il s'agit de la fiche n° <b>" & ThisWorkbook.Worksheets(1).Cells(6, 2).Value & "</b> <p>" _

& "Temps perdu : <b>" & ThisWorkbook.Worksheets(1).Cells(27, 4).Value & " minutes </b> <p>" _

& "La rame fiche est-elle pleine: <FONT COLOR=RED>" & ThisWorkbook.Worksheets(1).Cells(27, 8).Value & "</FONT> <p>" _

& "<u> Cordialement</u> </body><HTML>"

Merci d'avance pour vos retours

Bonne fin de journée,

Cdt

Bonsoir,

un dernier test après je rend la main :

& "La rame fiche est-elle pleine: <FONT COLOR=" & iif( ThisWorkbook.Worksheets(1).Cells(27, 8).Value = "NON","RED","GREEN") & ">" & ThisWorkbook.Worksheets(1).Cells(27, 8).Value & "</FONT> <p>" _

@ bientôt

LouReeD

Bonjour,

Merci du retour. Malheureusement ça fonctionne partiellement. il ne doit pas manquer grand chose mais seul l'une des deux conditions est prise en compte.

En l'occurrence la couleur verte.

Si la valeur non est "true" ,le texte "NON" dans mon corps de mail devrait apparaître en rouge ce qui n'est pas le cas. Il reste en vert également.

& "La rame fiche est-elle pleine: <FONT COLOR=" & iif( ThisWorkbook.Worksheets(1).Cells(27, 8).Value = "NON","RED","GREEN") & ">" & ThisWorkbook.Worksheets(1).Cells(27, 8).Value & "</FONT> <p>" _

Un grand merci pour votre aide malgré tout, qui ma bien fait progresser sur le sujet.

Quelqu'un aurait-il une solution à m'apporter ?

Merci d'avance

Bonne journée

Bonsoir,

ceci fonctionne chez moi :

36test-loureed.xlsm (16.49 Ko)

et le résultat dans une page Web :

22test-loureed.zip (332.00 Octets)

En archive car html en extension n'est pas autorisé.

@ bientôt

LouReeD

Bonsoir,

Chez moi en utilisant votre fichier le non est bien en rouge, mais le oui reste en noir.

La condition "green" pour le OUI semble ne pas réussir à s'appliquer.

Idem quand je transpose dans mon code pour générer le corps de mail

Avec mon code ci-dessous ça fonctionne depuis votre poste ?

Au besoin pouvez-vous l'adapter ? Il doit manquer un petit quelque chose au niveau de la syntaxe mais je n'arrive pas à identifier le quoi.

Mon code ci-dessous :

Bonne fin de journée

Sub EnvoyerMail()

Set OutApp = CreateObject("outlook.application")

Set OutMail = OutApp.CreateItem(0)

With OutMail

.To = Sheets("MAIL").Range("B199").Value

.CC = ""

.Subject = " Fiche " & Sheets("Fiche").Range("A3").Value & " " & Sheets("Fiche").Range("B6").Value & " " & " code erreur " & Sheets("Fiche").Range("B17").Value

.BodyFormat = olFormatHTML

.HTMLBody = "<HTML><body>Bonjour <p>" _

& "Vous trouverez en PJ une nouvelle Fiche. <p>" _

& "Elle concerne l'équipement n° <b>" & ThisWorkbook.Worksheets(1).Cells(6, 2).Value & "</b> <p>" _

& "Code défaut : <b>" & ThisWorkbook.Worksheets(1).Cells(17, 2).Value & " </b> <p>" _

& "Description : " & ThisWorkbook.Worksheets(1).Cells(17, 3).Value & " </b> <p>" _

& "Description : <b>" & ThisWorkbook.Worksheets(1).Cells(21, 3).Value & " </b> <p>" _

& "Temps perdu : <b>" & ThisWorkbook.Worksheets(1).Cells(27, 4).Value & " minutes </b> <p>" _

& "Pouvez-vous continuer l'activité: <b> <u> <FONT COLOR=" & IIf(ThisWorkbook.Worksheets(1).Cells(27, 8).Value = "NON", "RED", "GREEN") & ">" & ThisWorkbook.Worksheets(1).Cells(27, 8).Value & "</FONT> </b> </u> <p>" _

& "Cordialement </body><HTML>"

'.Send

.Display

End With

End Sub

Bonsoir, je pense avoir trouvé !

Je suis trop bête !

En fait le texte brut HTML est :

<FONT COLOR="GREEN">

Il faut donc intégrer dans la variable les guillemetsqui entourent la couleur !

<FONT COLOR=""" & IIf(ThisWorkbook.Worksheets(1).Cells(27, 8).Value = "NON", "RED", "GREEN") & """>"

Ce qui donne comme vous pouvez le voir trois guillemets qui se suivent :

le premier pour dire que le second est à prendre comme un guillemet et non pas une fin de variable texte, le second qui sera considéré comme un caractère de la variable texte, et enfin le troisième qui correspond au guillemet de fin (ou de découpage) de la variable texte !

@ vous de jouer avec vos guillemets !

@ bientôt

LouReeD

Bonsoir,

Désolé pour la réponse tardive.

En fait le code ne marche toujours pas sur mon fichier ( fichier lourd sur lequel se trouve d'autres codes) peut importe le texte OUI / NON, la couleur dominante reste le vert.

J'ai essayé depuis un autre fichier en utilisant uniquement le code d'envoi par mail et là miracle ça fonctionne.

J'ai creusé le sujet mais impossible de voir d'où cela vient. Etrange.

Merci encore pour votre aide.

Bonne fin de journée

Bonjour,

n'y a t il pas un fichier CSS qui détermine la couleur de texte de certaines balises dans votre fichier ?

Sinon je ne voit pas, en effet mon code "seul" fonctionne bien, non ?

Peut-être vous faut-il ouvrir un nouveau sujet afin de laisser répondre d'autre intervenants plus caller sur les interaction d'application.

@ bientôt

LouReeD

Rechercher des sujets similaires à "vba integrer contenu htlmbody"