VBA: Créer les listes en HTML


Si vous créez des sites internet, le code VBA suivant vous sera peut-être utile: il crée des listes en HTML (donc la structure "<ul><li>élément 1</li><li>…</li></ul>") automatiquement à partir des chaînes de caractères, à partir du contenu des cellules ou le mélange des deux.

Le code VBA ci-dessous est présenté sous forme des fonctions qui sont donc facilement utilisables directement dans Excel en tant que "UDF" (User Defined Function). Il suffit de les copier dans votre projet VBA et vous pouvez les utiliser comme toutes les autres fonctions dans Excel.

Il ne s'agit pas d'un code qui crée le code pour des éléments mais bien d'une fonction qui retourne comme résultat la liste HTML complète (débute par <ul> et se termine par </ul>) en une chaîne de caractères facile à copier/coller là où vous en avez besoin.

VBA: création des Listes HTML

VBA: création des Listes HTML


Une liste HTML à partir du texte contenant les différents éléments

Vous pouvez utiliser le code suivant si vous avez les différent éléments dans une chaîne de caractères et qu'ils sont séparés par un séparateur spécifique. Cette fonction peut être la plus appropriée si vous voulez écrire les éléments directement "à la main".

Les arguments de cette fonctions sont le texte qui contient les éléments et le type de séparateur.

Public Function ListeHTML(Contenu As String, Separateur As String)
'par Excel-Malin.com ( https://excel-malin.com/ )

'crée une liste HTML à partir d'une chaîne de caractères où les éléments sont séparés par un séparateur
'le nombre d'éléments de la liste peut varier (pas de nombre maximum d'éléments)

On Error GoTo FonctionErreur
ContenuDivise = Split(Contenu, Separateur)
MonResultat = "<ul>"

For Element = LBound(ContenuDivise) To UBound(ContenuDivise)
        MonResultat = MonResultat & "<li>" & ContenuDivise(Element) & "</li>"
Next Element

MonResultat = MonResultat & "</ul>"
ListeHTML = MonResultat
Exit Function

FonctionErreur:
    MaListeHTML = ""
End Function

Le résultat en Excel donne ceci:


Une liste HTML à partir d'une plage de cellules

Si vous souhaitez créer une liste HTML à partir d'une plage de cellules (par ex.: "A2:A15") contenant un élément par cellule, rien n'est plus simple. Le code de la fonction sera légèrement différent.

Comme argument de la fonction, il suffit d'indiquer la plage de cellules à utiliser et le tour est joué.

 

Public Function ContenuCellulesVersListeHTML(Plage As Range)
'par Excel-Malin.com ( https://excel-malin.com/ )

'crée une liste HTML à partir d'une plage de celluless où chaque cellule contient un élément
'le nombre d'éléments de la liste peut varier (pas de nombre maximum d'éléments)

On Error GoTo FonctionErreur

MonResultat = "<ul>"

For Each Element In Plage.Cells
        MonResultat = MonResultat & "<li>" & Element.Value & "</li>"
Next Element

MonResultat = MonResultat & "</ul>"
ContenuCellulesVersListeHTML = MonResultat
Exit Function

FonctionErreur:
    MaListeHTML = ""
End Function

 

Ce qui nous donne en Excel:

VBA: Liste HTML à partir du cntenu des cellules


Une liste HTML avancée – mélange de texte et contenu de cellules

Et finalement, pour les utilisateurs plus exigeants, voici le code qui vous permets de combiner les deux méthodes précédentes. Cette 3ème fonction (il s'agit en fait de deux fonctions pour plus de lisibilité) fait appel à ParamArray qui permet d'utiliser un nombre variable d'argument et qui peut également être utilisé pour "mélanger" les différents types de variables (ici String et Range).

C'est pourquoi cette fonction, la plus complète vous donne le maximum de flexibilité en ce qui concerne le type d'arguments et de leur nombre.

Pour illustrer l'utilisation de cette fonction, voici un exemple – qui vaut plus qu'une longue explication:

VBA: Liste HTML avancée

VBA: Liste HTML avancée (texte + cellules)

Et voici le code VBA…

Public Function MaListeHTML(ParamArray X())
'par Excel-Malin.com ( https://excel-malin.com/ )

'crée une liste HTML à partir d'un mélange des contenus de cellule et des chaînes de caractères
'le nombre d'éléments de la liste peut varier (pas de nombre maximum d'éléments)
On Error GoTo FonctionErreur
Dim I As Long
Dim MonResultat As String

MonResultat = "<ul>"
    For I = LBound(X) To UBound(X)
    
        Dim Rslt
        If TypeOf X(I) Is Range Then 'si l'élémént est une cellule/plage des cellules -> _
                                        gestion des plages de cellules
            ResultatCellules = GestionPlageCellules(X(I))
            MonResultat = MonResultat & ResultatCellules
        Else
        MonResultat = MonResultat & "<li>" & CStr(X(I)) & "</li>" 'si l'élément est une chaîne des caractères
            End If
        Next I
MonResultat = MonResultat & "</ul>"
MaListeHTML = MonResultat
Exit Function

FonctionErreur:
MaListeHTML = ""
End Function

Function GestionPlageCellules(X)
    Dim ResultatTemporaireCellules
    ResultatTemporaireCellules = ""
    Dim aCell As Range

    For Each aCell In X.Cells
        ResultatTemporaireCellules = ResultatTemporaireCellules & "<li>" & aCell.Value & "</li>"
    Next aCell

    GestionPlageCellules = ResultatTemporaireCellules

End Function

 

Avant de terminer…

Pour les utilisateurs plus avancés: en modifiant le code de la fonction, il est possible d'ajouter des formats aux différents tags HTML<UL> et <LI> en ajoutant par exemple style="color: #22AA22;" Attention cependant à l'utilisation des guillemets. Le code VBA rassemblerait donc à ceci:

MonResultat = MonResultat & "<li style=""color: #aa22aa;"">" & Element.Value & "</li>"

Et si, dans le résultat final, vous voulez avoir un élément par ligne – il suffit d'ajouter le code pour un retour à la ligne Chr(13) & Chr(10) aux endroits appropriés

    • MonResultat = "<ul>" –> MonResultat = "<ul>" & Chr(13) & Chr(10)
    • MonResultat = MonResultat & "<li>" & Element.Value & "</li>" –> MonResultat = MonResultat & "<li>" & Element.Value & "</li>" & Chr(13) & Chr(10)

 

10 0

Pourrait vous intéresser

Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée.