Introduction
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.
641718
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
Dans une cellule Excel, le retour à la ligne est représenté par Chr(10) ou la constante VBA vbLf. En HTML, le retour à la ligne est représenté par la balise
. Pour convertir les retours à la ligne en balises HTML, nous pouvons utiliser la fonction Replace comme suit :
Dim t As String
t = Replace(Range("TextPattern").Value, vbLf, "
")
Dans cet exemple, la variable t contiendra le texte suivant :
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 directionConversion du texte en gras en balises HTML
Pour convertir le texte en gras en balises HTML et , 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 :
With Worksheets("Feuil1").Range("A1")
.Value = "Bonjour"
.Characters(3, 1).Font.Bold = True
End WithPour parcourir tous les caractères d'un texte, nous utiliserons une boucle :
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, "", "")
t = t & Replace(B, "/", "") & .Characters(c, 1).Text & B
Next
End With
ReplaceBoldToHTML = Replace(t, vbLf, "
")
End Function
Si nous mettons dans la cellule A2 le texte "Bonjour Monsieur" et que nous invoquons la fonction ReplaceBoldToHTML, le résultat sera :
Bonjour MonsieurCela donne le même effet en HTML : "Monsieur" apparaîtra en gras.
Cependant, la répétition des balises 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, "", "")".
Le code adapté
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, "", "")
t = t & Replace(B, "/", "") & .Characters(c, 1).Text & B
' Supprime les balises inutiles
t = Replace(t, "", "")
Next
End With
ReplaceBoldToHTML = Replace(t, vbLf, "
")
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.
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 = """>"
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, "", "")
B = IIf(.Bold, "", "")
U = IIf(.Underline = 2, "", "")
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, "
Ce = ""
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, "", "")
t = Replace(t, "", "")
t = Replace(t, "", "")
If Len(Cs) Then t = Replace(t, "" & Cs, "")
Next
End With
' Remplace le caractère vbLf par
GetFormatTextToHTML = Replace(t, vbLf, "
")
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 !
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.