Il arrive souvent que nous ayons besoin d'envoyer un e-mail via Outlook. Pour cela, plusieurs options s'offrent à nous : utiliser un brouillon, un modèle ou un texte contenu dans une cellule Excel. Dans ce billet, nous allons explorer comment convertir le formatage (gras, italique et souligné) d'un texte Excel en balises HTML.
Le cadre
Imaginons que nous avons un groupe de cellules fusionnées que nous avons nommé TextPattern à l'aide du gestionnaire de noms.
Conversion des retours à la ligne en balises HTML
Commençons par un cas simple et très courant : l'insertion d'un texte sans formatage. Si ce texte doit s'étendre sur plusieurs lignes, nous utiliserons la combinaison de touches Alt + Enter pour créer un retour à la ligne.
Voici un exemple de texte (notez qu'il y a deux retours à la ligne entre l'adresse et la signature) :
Bonjour,
Vous devez vous présenter avant le 15 août à l'adresse ci-dessous pour renouveler votre licence.
Avenue du Gouvernement, 15 à Moulinsart
La direction
Vous devez vous présenter avant le 15 août à l'adresse ci-dessous pour renouveler votre licence.
Avenue du Gouvernement, 15 à Moulinsart
La direction
Code VBA : | Sélectionner tout |
1 2 | Dim t As String t = Replace(Range("TextPattern").Value, vbLf, "<br>") |
Code : | Sélectionner tout |
Bonjour,<br>Vous devez vous présenter avant le 15 août à l'adresse ci-dessous pour renouveler votre licence.<br>Avenue du Gouvernement, 15 à Moulinsart<br><br>La direction
Pour convertir le texte en gras en balises HTML <b> et </b>, nous devons identifier où se trouvent les éléments en gras dans le texte. Pour cela, nous allons utiliser la propriété Characters de l'objet Range, qui a deux arguments : Start et Len.
Par exemple, pour mettre en gras le troisième caractère du mot "Bonjour" dans la cellule A1 de la feuille "Feuil1", nous écrirons :
Code : | Sélectionner tout |
1 2 3 4 | With Worksheets("Feuil1").Range("A1") .Value = "Bonjour" .Characters(3, 1).Font.Bold = True End With |
Code VBA : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | Function ReplaceBoldToHTML(oRange As Range) As String ' Déclaration Dim B As String ' Balise Html ou vide Dim c As Integer ' Variable de boucle Dim t As String ' Texte reconstruit ' Parcourt tous les caractères du texte contenu dans oRange With oRange For c = 1 To Len(.Text) B = IIf(.Characters(c, 1).Font.Bold, "</b>", "") t = t & Replace(B, "/", "") & .Characters(c, 1).Text & B Next End With ReplaceBoldToHTML = Replace(t, vbLf, "<Br>") End Function |
Si nous mettons dans la cellule A2 le texte "Bonjour Monsieur" et que nous invoquons la fonction ReplaceBoldToHTML, le résultat sera :
Code : | Sélectionner tout |
Bonjour <b>M</b><b>o</b><b>n</b><b>s</b><b>i</b><b>e</b><b>u</b><b>r</b>
Cependant, la répétition des balises </b><b> n'est pas très élégante et alourdit inutilement la chaîne de caractères. Nous allons donc améliorer la fonction en supprimant les balises inutiles avec la ligne de code "t = Replace(t, "</b><b>", "")".
Le code adapté
Code VBA : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | Function ReplaceBoldToHTML(oRange As Range) As String ' Déclaration Dim B As String ' Balise Html ou vide Dim c As Integer ' Variable de boucle Dim t As String ' Texte reconstruit ' Parcourt tous les caractères du texte contenu dans oRange With oRange For c = 1 To Len(.Text) B = IIf(.Characters(c, 1).Font.Bold, "</b>", "") t = t & Replace(B, "/", "") & .Characters(c, 1).Text & B ' Supprime les balises inutiles t = Replace(t, "</b><b>", "") Next End With ReplaceBoldToHTML = Replace(t, vbLf, "<Br>") End Function |
Conversion du texte en gras, italique, souligné et les couleurs en balises HTML
Maintenant que nous avons vu comment convertir le texte en gras en balises HTML, passons à un niveau supérieur.
Voici le code qui permet de convertir le texte en gras, en italique, souligné et de n'importe quelle couleur (sauf le noir) en balises HTML.
Code VBA : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | Function GetFormatTextToHTML(oRange As Range) As String ' Renvoie une chaîne de caractères avec les balises Html ' avec la conversion des formats (Gras, Italique, Souligné et couleurs ' Author : Philippe Tulliez (https://magicoffice.be) ' Version : 1.1 ' Contrainte la couleur noire n'est pas traitée ' Remplace le format (Gras, Italique, Souligné, Couleur) par des balises Html ' Argument ' oRange cellule où se trouve le texte formaté ' ' Déclaration Const cc As String = "<span style=""color:<Hexa>"">" Dim B As String, I As String, U As String, Cs As String, Ce As String Dim c As Integer ' Variable de boucle Dim t As String ' Texte Dim r As Integer, g As Integer, Bl As Integer ' Red Green Blue Dim Ch As String ' Code couleur en Hexa ' Parcourt tous les caractères du texte contenu dans oRange With oRange For c = 1 To Len(.Text) With .Characters(c, 1).Font I = IIf(.Italic, "</i>", "") B = IIf(.Bold, "</b>", "") U = IIf(.Underline = 2, "</u>", "") If .Color Then ' Conversion du code couleur (RGB) en HEXA pour HTML r = .Color Mod 256: g = (Color \ 256) Mod 256: Bl = (Color \ 65536) Mod 256 Ch = "#" & Right("0" & Hex(r), 2) & Right("0" & Hex(g), 2) & Right("0" & Hex(Bl), 2) Cs = Replace(cc, "<Hexa>", Ch) Ce = "</span>" Else Cs = "": Ce = "" End If End With ' Insertion des balises t = t & Replace(I, "/", "") & Replace(B, "/", "") & Replace(U, "/", "") & Cs & .Characters(c, 1).Text & Ce & U & B & I ' Supprime les balises inutiles t = Replace(t, "</i><i>", "") t = Replace(t, "</b><b>", "") t = Replace(t, "</u><u>", "") If Len(Cs) Then t = Replace(t, "</span>" & Cs, "") Next End With ' Remplace le caractère vbLf par <br> GetFormatTextToHTML = Replace(t, vbLf, "<br>") End Function |
Conclusion
Et voilà ! Vous avez maintenant un outil puissant pour convertir le formatage de texte Excel en balises HTML, y compris le gras, l'italique, le souligné et la couleur. Cela peut être particulièrement utile pour la création de courriels formatés ou de pages web à partir de contenu Excel. N'oubliez pas que vous pouvez télécharger le classeur de démonstration pour voir comment cela fonctionne en pratique. Bon codage !