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
en parlant de :ici il manque une quote fermante avant </td>
<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 :
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
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