Si vous créez des sites internet, le code VBA suivant vous sera peut-être utile: il crée des listes 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.
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
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é.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Public Function ContenuCellulesVersListeHTML(Plage As Range) 'par Excel-Malin.com ( https://excel-malin.com/ ) 'crée une liste HTML à partir d'une plage de cellules 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:
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:
Et voici le code VBA…
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 |
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 en VBA. 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)
Pour aller plus loin en VBA…
Voici quelques autres articles qui pourraient vous intéresser et vous être utiles.
- Liste de toutes les fonctions VBA
- Télécharger un fichier à partir d'Internet
- VBA: vérifier si l'ordinateur est connecté à Internet
- Débloquer VBA dans les fichiers Excel venant d'internet
- Calculer la SOMME en VBA (plusieurs méthodes)
- Utiliser RECHERCHEV en VBA