Coloration contenue cellule tableau HTML selon valeur

Bonjour tout le monde,

Je souhaiterais que le contenu des cellules d'un tableau passe au rouge si inférieur à 5

Ce tableau est envoyé par mail (HTML), il est codé comme suit (les MyBench correspondent à d'autres cellules issues d'une feuille Excel) :

contenu = _
    "<html><head><meta http-equiv='Content-Type' content='text/html; charset=utf-8'>" & _
    "<style>td {font-family: times new roman,arial,sans-serif;font-size: 16px;border: 1px solid black;}</style>" & _
    "<body><table>" & "<th>" & "Désignation" & "<th>" & "Nbre" & "<th>" & "Stock" & _
    "<tr><td>" & MyBench & "</td><td>" & MyBench2 & "</td><td>" & MyBench41 & "</td></tr>" & _
    "<tr><td>" & MyBench3 & "</td><td>" & MyBench4 & "</td><td>" & MyBench42 & "</td></tr>" & _
    "<tr><td>" & MyBench5 & "</td><td>" & MyBench6 & "</td><td>" & MyBench43 & "</td></tr>" & _
    "<tr><td>" & MyBench7 & "</td><td>" & MyBench8 & "</td><td>" & MyBench44 & "</td></tr>" & _
    "<tr><td>" & MyBench9 & "</td><td>" & MyBench10 & "</td><td>" & MyBench45 & "</td></tr>" & _
    "<tr><td>" & MyBench11 & "</td><td>" & MyBench12 & "</td><td>" & MyBench46 & "</td></tr>" & _
    "<tr><td>" & MyBench13 & "</td><td>" & MyBench14 & "</td><td>" & MyBench47 & "</td></tr>" & _
    "<tr><td>" & MyBench15 & "</td><td>" & MyBench16 & "</td><td>" & MyBench48 & "</td></tr>" & _
    "<tr><td>" & MyBench17 & "</td><td>" & MyBench18 & "</td><td>" & MyBench49 & "</td></tr>" & _
    "<tr><td>" & MyBench19 & "</td><td>" & MyBench20 & "</td><td>" & MyBench50 & "</td></tr>" & _
    "<tr><td>" & MyBench21 & "</td><td>" & MyBench22 & "</td><td>" & MyBench51 & "</td></tr>" & _
    "<tr><td>" & MyBench23 & "</td><td>" & MyBench24 & "</td><td>" & MyBench52 & "</td></tr>" & _
    "<tr><td>" & MyBench25 & "</td><td>" & MyBench26 & "</td><td>" & MyBench53 & "</td></tr>" & _
    "<tr><td>" & MyBench27 & "</td><td>" & MyBench28 & "</td><td>" & MyBench54 & "</td></tr>" & _
    "<tr><td>" & MyBench29 & "</td><td>" & MyBench30 & "</td><td>" & MyBench55 & "</td></tr>" & _
    "<tr><td>" & MyBench31 & "</td><td>" & MyBench32 & "</td><td>" & MyBench56 & "</td></tr>" & _
    "<tr><td>" & MyBench33 & "</td><td>" & MyBench34 & "</td><td>" & MyBench57 & "</td></tr>" & _
    "<tr><td>" & MyBench35 & "</td><td>" & MyBench36 & "</td><td>" & MyBench58 & "</td></tr>" & _
    "<tr><td>" & MyBench37 & "</td><td>" & MyBench38 & "</td><td>" & MyBench59 & "</td></tr>" & _
    "<tr><td>" & MyBench39 & "</td><td>" & MyBench40 & "</td><td>" & MyBench60 & "</td></tr>" & _
    "</table></body></html>"

PreparerOutlook oOutlook

Il faudrait quelque chose comme

If MyBench41 <=5 Then

Est-ce possible ? Merci pour vos réponses !

Ou différemment et peut-être plus simplement :

Je fais mes MFC sur une feuille Excel et je copie dans le corps du mail la plage de cellule qui m'intéresse avec la même mise en forme

Un coup de pouce s'il vous plaît !?

Bonjour,

Ce qui est bizarre dans ce que tu proposes est de nommer une cellule excel par une variable "MyBench" différente à chaque fois...

Ensuite, il faudrait définir les couleurs en CSS par des "class" :

<style>
.tdblack {font-family: times new roman,arial,sans-serif;font-size: 16px;border: 1px solid black;}
.tdred {font-family: times new roman,arial,sans-serif;font-size: 16px;border: 1px solid red;}
<style>

Puis tu construis ta chaîne avec une boucle du genre :

contenu = _
    "<html><head><meta http-equiv='Content-Type' content='text/html; charset=utf-8'>" & _
    "<style>
.tdblack {font-family: times new roman,arial,sans-serif;font-size: 16px;border: 1px solid black;}
.tdred {font-family: times new roman,arial,sans-serif;font-size: 16px;border: 1px solid red;}
<style>" & _
    "<body><table>" & "<th>" & "Désignation" & "<th>" & "Nbre" & "<th>" & "Stock"
For i = 1 to 20 ' à adapter selon besoin
  MyBench1 = Range("A"&CStr(i)).Cells.Value
  MyBench2 = Range("B"&CStr(i)).Cells.Value
  MyBench3 = Range("G"&CStr(i)).Cells.Value
  If MyBench1 <=5 Then Couleur1 =  "tdred" else Couleur1 = "tdblack"
  If MyBench2 <=5 Then Couleur2 =  "tdred" else Couleur2 = "tdblack"
  If MyBench3 <=5 Then Couleur3 =  "tdred" else Couleur3 = "tdblack"
  contenu = contenu &  "<tr><td class='" & Couleur1 & "'>" & _
                        MyBench1 & "</td><td class='" & Couleur2 & ">" & _
                        MyBench2 & "</td><td class='" & Couleur3 & ">" & _
                        MyBench3 & "</td></tr>" 
Next i
contenu = contenu &  "</table></body></html>"

Bonsoir oxydum,

Merci pour ta réponse et désolé, je suis novice en VBA c'est sans doute la raison pour laquelle mon code te semble bizarre

J'ai tenté d'adapter ton code à mes besoins, le voici :

MyBench = Sheets("BDC").Range("H8").Value
MyBench2 = Sheets("BDC").Range("F8").Value
MyBench41 = Sheets("Stock").Range("D2").Value
contenu = _
    "<html><head><meta http-equiv='Content-Type' content='text/html; charset=utf-8'>" & _
"<style> .tdblack {font-family: times new roman,arial,sans-serif;font-size: 16px;border: 1px solid black;}" & _
"<style> .tdred {font-family: times new roman,arial,sans-serif;font-size: 16px;border: 1px solid red;}" & _
    "<body><table>" & "<th>" & "Désignation" & "<th>" & "Nbre" & "<th>" & "Stock"
  If MyBench41 <= 5 Then couleur41 = "tdred" Else couleur41 = "tdblack"
  contenu = contenu & "<tr><td class='" & couleur41 & "'>" & _
MyBench & "</td><td class='" & MyBench2 & "</td><td class='" & MyBench41 & "</td><td class='" & couleur41 & ">" & "</td></tr>"

PreparerOutlook oOutlook
Set oMailItem = oOutlook.CreateItem(0)

With oMailItem
.To = "xxx@xxx.com"
.Subject = "Nouvelle demande"
.HTMLBody = "<html><p>" & "Bonjour,<br><br>Une nouvelle demande :<br><br>" & contenu & "<html><p>" & "Merci !<br><br>Bien à vous,<br>"
'.Display
'.Save
.Send
End With

Dans le corps du mail MyBench est récupéré et le contour de la cellule est rouge, MyBench2 et MyBench41 ne sont pas récupérés (ni le contenu ni le contour de la cellule)

Ce que je veux :

C'est de la couleur uniquement pour MyBench41 si < à 5

Et si possible, le contenu inscrit en blanc en caractère gras sur fond rouge

Merci

1) Vérifie bien que lorsque tu écris :

<td class='" & MyBench41 & "</td>

les quotes et double-quotes ouvrantes et fermantes : ici il manque une quote fermante avant </td>.

La structure d'un html est :

<html>
<head>
</head>
<body>
</body>
</html>

2) Vérifie à ne pas doubler les balises (une seule fois <html>)

3) <style> Attention, une seule fois aussi, et ne pas oublier </style> pour fermer.

4) "inscrire en blanc en caractère gras sur fond rouge" : ça c'est à ta portée...

voir background-color par exemple ici :

Re oxydum,

Quand tu dis

ici il manque une quote fermante avant </td>

en parlant de :
<td class='" & MyBench41 & "</td>

La correction serait :

<td class='" & MyBench41 & "'</td>

J'ai fait attention au balise que tu cites, <html> au début, </hmtl> à la fin, <style> au début, </style> à la fin (si c'est valable pour les deux)

Pour le reste je ne maîtrise pas suffisamment, même pas du tout le langage hmtl, c'est des bouts de code copiés collés

Pour info, je n'ai toujours pas de contour de mes cellules (alors que j'en avais initialement), je n'ai pas non plus de contenu à mes cellules (alors que j'en avais initialement)

Un modèle serait le bienvenu !

Je reviens sur mes essais, avec ce code :

contenu = _
    "<html><head><meta http-equiv='Content-Type' content='text/html; charset=utf-8'>" & _
    "<style>.tdblack {font-family: times new roman,arial,sans-serif;font-size: 16px;border: 1px solid black;}" & _
    ".tdred {font-family: times new roman,arial,sans-serif;font-size: 16px;border: 1px solid red;}" & _
    "</style>" & _
    "<body><table>" & "<th>" & "Désignation" & "<th>" & "Nbre" & "<th>" & "Stock"
    If MyBench41 <= 5 Then Couleur3 = "tdred" Else Couleur3 = "tdblack"
    contenu = contenu & "<tr><td class='" & _
                        MyBench & "</td><td class='" & _
                        MyBench2 & "</td><td class='" & Couleur3 & ">" & _
                        MyBench41 & "</td></tr>" & _
                        "</table></body>"

PreparerOutlook oOutlook
Set oMailItem = oOutlook.CreateItem(0)

With oMailItem
.To = "xxx@xxx.com"
.Subject = "Nouvelle demande"
.HTMLBody = "<p>" & "Bonjour,<br><br>Une nouvelle demande :<br><br>" & contenu & "<p>" & "Merci.<br><br>Bien à vous,<br></html>"
'.Display
'.Save
.Send
End With

Ne figure dans le mail que les en-têtes (Désignation, Nbre et stock), en dessous mes cellules ont disparu, contour et contenu et bien sûr la MFC que je souhaite sur MyBench41

Je suis au bout de ce que je peux réaliser comme essai, il me faudrait un modèle si mes explications sont assez claires

Merci

Non tu n'es pas au bout, tu vas y arriver...

Il faut comprendre que Couleur3 est le nom de ton style, du coup corrige ici :

If MyBench41 <= 5 Then couleur41 = "tdred" Else couleur41 = "tdblack"
  contenu = contenu & "<tr><td class='" & couleur41 & "'>" & MyBench & "</td><td>" & MyBench2 & "</td><td>" & MyBench41 & "</td></tr>"

ensuite, construis bien ta chaîne pour .HTMLBody =...

par exemple en déclarant une chaine MonHtml As String

MonHTML = ""<html><head><meta http-equiv='Content-Type' content='text/html; charset=utf-8'>" & _

"<style>

.tdblack {font-family: times new roman,arial,sans-serif;font-size: 16px;border: 1px solid black;}

.tdred {font-family: times new roman,arial,sans-serif;font-size: 16px;border: 1px solid red;}

<style>" & _

"<body>"

que tu vires de contenu et que tu écris uste avant,

puis avant ton PreparerOutlook

tu lui dis :

MonHTML = MonHTML & contenu & "</body></html>"

et .HTMLBody = MonHTML

Merci pour cet exemple,

J'ai fait pareil et cela est déjà mieux mais ne correspond pas encore à ce que je souhaite, je m'explique

J'ai le contour de la cellule sous Désignation (MyBench) qui est rouge, je souhaite que seule soit concernée la cellule sous Stock (MyBench41)

Autre chose, je n'ai pas de contour même noir pour les cellules sous Nbre et Stock, je souhaite voir le contour de ces cellules (le contenu est présent par contre)

Merci de compléter si tu peux le code que tu m'as proposé

Avec ça :

contenu = _
    "<html><head><meta http-equiv='Content-Type' content='text/html; charset=utf-8'>" & _
    "<style>.tdblack {font-family: times new roman,arial,sans-serif;font-size: 16px;border: 1px solid black;}" & _
    ".tdred {font-family: times new roman,arial,sans-serif;font-size: 16px;border: 1px solid red;}" & _
    "</style>" & _
    "<body><table>" & "<th>" & "Désignation" & "<th>" & "Nbre" & "<th>" & "Stock"
    If MyBench41 <= 5 Then couleur41 = "tdred" Else couleur41 = "tdblack"
    contenu = contenu & "<tr><td class='" & couleur41 & "'>" & MyBench & "<td><td class='" & couleur41 & "'>" & MyBench2 & "<td><td class='" & couleur41 & "'>" & MyBench41 & "</td></tr>" & _
    "</table></body>"

Voici le mail :

oe86

Il y a un décalage après la cellule sous désignation que je ne m'explique pas, sinon c'est presque ça

vérifie les balises ouvrantes et fermantes sur <td> et </td>

Je ne suis pas en capacité de voir où est l'erreur (les balises que tu veux que je vérifies j'ai tenté de retirer des ' ou d'en ajouter sans l'effet escompté)

Ce que je souhaite c'est que les deux 0 visible ci-dessous soit sous Nbre et Stock (là ils sont décalés, il n'y a rien sous Nbre) et par la même occasion je ne comprends pas pourquoi Stock est coupé (retour à la ligne)

Pour la coloration rouge seul MyBench41 doit être concerné (le dernier 0 censé être sous Stock) pas le reste

2m81

Peux-tu me proposer une correction de ce code :

contenu = _
    "<html><head><meta http-equiv='Content-Type' content='text/html; charset=utf-8'>" & _
    "<style>.tdblack {font-family: times new roman,arial,sans-serif;font-size: 16px;border: 1px solid black;}" & _
    ".tdred {font-family: times new roman,arial,sans-serif;font-size: 16px;border: 1px solid red;}" & _
    "</style>" & _
    "<body><table>" & "<th>" & "Désignation" & "<th>" & "Nbre" & "<th>" & "Stock"
    If MyBench41 <= 5 Then couleur41 = "tdred" Else couleur41 = "tdblack"
    contenu = contenu & "<tr><td class='" & couleur41 & "'>" & MyBench & "<td><td class='" & couleur41 & "'>" & MyBench2 & "<td><td class='" & couleur41 & "'>" & MyBench41 & "</td></tr>" & _
    "</table></body>"

Tu dois fermer les balises ouvrantes exemple : <th> par une balise fermante : </th> avant d'en ouvrir une autre.

Par exemple ici aussi : <td class='" & couleur41 & "'>" & MyBench & "<td> doit être :

<td class='" & couleur41 & "'>" & MyBench & "</td>

Merci pour tes conseils oxydum

Je suis parvenu à mes fins avec ça :

contenu = _
    "<html><head><meta http-equiv='Content-Type' content='text/html; charset=utf-8'>" & _
    "<style>.tdblack {font-family: times new roman,arial,sans-serif;font-size: 16px;border: 1px solid black;}" & _
    ".tdred {font-family: times new roman,arial,sans-serif;font-size: 16px;border: 1px solid red;}" & _
    "</style>" & _
    "<body><table>" & "<th>" & "Désignation" & "<th>" & "Nbre" & "<th>" & "Stock" & "</th>"
    If MyBench41 <= 5 Then couleur41 = "tdred" Else couleur41 = "tdblack"
    contenu = contenu & "<tr><td class='" & couleur41 & "'>" & MyBench & "</td><td class='" & couleur41 & "'>" & MyBench2 & "</td><td class='" & couleur41 & "'>" & MyBench41 & "</td></tr>" & _
    "</table></body>"

Après j'ai travaillé un peu sur la forme du tableau en suivant les liens que tu m'avais donné

Merci encore et bonne soirée

Rechercher des sujets similaires à "coloration contenue tableau html valeur"