IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Guide pratique de VBA Excel : convertir le format d'un texte en balises HTML
Un billet blog de Philippe Tulliez

Le , par Philippe Tulliez

0PARTAGES

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 direction


Conversion 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 With


Pour 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 Monsieur
Cela 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, "", Ch)
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 !

Vous avez lu gratuitement 6 001 articles depuis plus d'un an.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.

Une erreur dans cette actualité ? Signalez-nous-la !