Transformer un texte en HTML

Bonjour à tous,

Je galère sur un petit sujet. J'essaie de transformer le contenu d'une cellule en une ligne de texte "au format pseudo HTML".

Le texte contenu dans une cellule peut être n'importe quoi, mais il faut identifier les lignes où il y a une puce (•) précédée d'autant d'espace qu'on veut et suivi d'autant d'espaces qu'on veut.

Les consignes sont les suivantes :

  • A chaque retour à la ligne, il faut mettre un <br> (sauf pour les retours à la ligne précédant une ligne contenant une puce)
  • Pour chaque bloc de liste à puces, il faut
    • Mettre un <ul> avant le bloc liste et un </ul> après (à la toute fin d'un bloc liste à puces)
    • Mettre un <li> au début de chaque ligne à puce et un </li> à la fin (en retirant la puce du texte et les espaces qui l'entourent)
  • tout le texte doit être sur une seule ligne (pas de retour chariot)
  • Le texte peut avoir une longueur supérieure à 255 caractères
  • utilisation de macro possible, l'idée est d'avoir en colonne C une formule du style (pour C2) =ExtractToHTML(A2)

J'ai mis en PJ un fichier contenant des exemples.

Merci pour votre aide et vos propositions.

14texte2html.xlsx (9.37 Ko)

Bonjour,

Voici un essai en utilisant du VBA:

85texte2html.xlsm (18.28 Ko)

Comment utiliser la fonction:

écrire dans une cellule =toHMTL(le texte que vous voulez convertir)

Le code:

Function toHTML(ByVal texte As String) As String
Dim puce As String, retourLigne As String
Dim listeDebutee As Boolean

Application.Volatile

listeDebutee = False
puce = "•"
retourLigne = Chr(10)
resultat = ""

'remplacements
texte = Replace(texte, "  ", " ")
texte = Replace(texte, " " & puce & " ", puce)
texte = Replace(texte, " " & puce, puce)
texte = Replace(texte, puce & " ", puce)

'gestion des listes
For i = 1 To Len(texte)
    lettre = Mid(texte, i, 1)

    If lettre = puce Then
        If Not listeDebutee Then
            resultat = resultat & "<ul><li>"
            listeDebutee = True
        Else
            resultat = resultat & "</li><li>"
        End If
    ElseIf lettre = retourLigne Then
        If listeDebutee And Not Mid(texte, i + 1, 1) = puce Then
            resultat = resultat & "</li></ul>"
            listeDebutee = False
        ElseIf i = Len(texte) Then
            resultat = resultat & "<br>"
        ElseIf Not Mid(texte, i + 1, 1) = puce Then
            resultat = resultat & "<br>"
        End If
    Else
        resultat = resultat & lettre
    End If
Next i

If listeDebutee Then
    resultat = resultat & "</li></ul>"
End If

toHTML = resultat
End Function

Rebonjour,

La macro proposée convient parfaitement.

Un grand merci pour votre aide et pour la réactivité !

Je teste d'avantage, mais ça devrait le faire.

Super, content que ça convienne.

Oui vous avez raison, on est pas à l'abri d'un bug, normalement j'ai pas mal testé mais sait-on jamais...

Merci d'avoir passé le sujet en résolu

oui j'ai déjà détecté une petite anomalie mineure : la puce peut être entourée d'un nombre quelconque d'espace. Dans le cas de 5 espaces avant, ça change le résultat, dans le cas de 0 espace après, ça change le résultat.

A voir si vous pouvez trouver une astuce, sinon ce n'est pas grave du tout.

Merci

En effet il y a une petite coquille, j'ai trouvé une petite astuce qui semble régler le problème:

61texte2html.xlsm (18.47 Ko)

Cette fois je tâche bien de supprimer tous les double espaces.

Cette fois ça me parait répondre au besoin.

Merci.

Petit commentaire :

texte = Replace(texte, " " & puce & " ", puce)
texte = Replace(texte, " " & puce, puce)
texte = Replace(texte, puce & " ", puce)

pourrait être remplacé par :

texte = Replace(texte, " " & puce, puce)
texte = Replace(texte, puce & " ", puce)

nécessaire et suffisant à mon sens.

En effet, j'ai voulu surfaire visiblement...

Rechercher des sujets similaires à "transformer texte html"