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

Philippe Tulliez

[Actualité] Guide pratique de VBA Excel : Convertir le format d'un texte en balises HTML

Noter ce billet
par , 22/07/2023 à 15h51 (7538 Affichages)
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.

Nom : GetFormatToHTML_2.png
Affichages : 7868
Taille : 144,2 Ko

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 <br>. Pour convertir les retours à la ligne en balises HTML, nous pouvons utiliser la fonction Replace comme suit :
Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 Dim t As String
 t = Replace(Range("TextPattern").Value, vbLf, "<br>")
Dans cet exemple, la variable t contiendra le texte suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Conversion du texte en gras en balises HTML
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 - Visualiser dans une fenêtre à part
1
2
3
4
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 :
Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
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 - Visualiser dans une fenêtre à part
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>
Cela donne le même effet en HTML : "Monsieur" apparaîtra en gras.
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 - Visualiser dans une fenêtre à part
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 - Visualiser dans une fenêtre à part
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 !
Miniatures attachées Fichiers attachés

Envoyer le billet « Guide pratique de VBA Excel : Convertir le format d'un texte en balises HTML » dans le blog Viadeo Envoyer le billet « Guide pratique de VBA Excel : Convertir le format d'un texte en balises HTML » dans le blog Twitter Envoyer le billet « Guide pratique de VBA Excel : Convertir le format d'un texte en balises HTML » dans le blog Google Envoyer le billet « Guide pratique de VBA Excel : Convertir le format d'un texte en balises HTML » dans le blog Facebook Envoyer le billet « Guide pratique de VBA Excel : Convertir le format d'un texte en balises HTML » dans le blog Digg Envoyer le billet « Guide pratique de VBA Excel : Convertir le format d'un texte en balises HTML » dans le blog Delicious Envoyer le billet « Guide pratique de VBA Excel : Convertir le format d'un texte en balises HTML » dans le blog MySpace Envoyer le billet « Guide pratique de VBA Excel : Convertir le format d'un texte en balises HTML » dans le blog Yahoo

Mis à jour 18/08/2023 à 16h22 par Philippe Tulliez

Catégories
VBA Excel

Commentaires