Fonction qui transforme une tableau Excel en tableau HTML?
Bonjour
J'ai besoin d'une fonction qui transforme un tableau Excel en tableaux HTML
Voici mon tableau Excel (le tableau peut contenir plusieurs colonnes)
Titre 1 Titre 2 Titre 3
A C E
B D F
format du tableau HTML
<table>
<tr>
<td>Titre 1</td>
<td>Titre 2</td>
<td>Titre 3</td>
</tr>
<tr>
<td>A </td>
<td>B</td>
<td>C</td>
</tr>
</table>
Donc le rôle de cette fonction est de transformer les en-têtes du tableau et uniquement une seule ligne ainsi que je souhaite qu'elle prenne en charge des plages de cellules non contiguës.
Remarque les balises <table>, <tr><td> peuvent avoir des attribues exemple <table width=100% border="1">...
J’attends avec patiences vos solutions
bonjour,
voici une solution pour une plage continue. avec paramètres optionel pour les tags table, tr et td
Function tabtohtml(r As Range, Optional tb = "<Table>", Optional tr = "<tr>", Optional td = "<td>")
h = tb
For i = 1 To r.Rows.Count
h = h & tr
For j = 1 To r.Columns.Count
h = h & td & r.Cells(i, j) & "</td>"
Next j
h = h & "</tr>"
Next i
tabtohtml = h & "</table>"
End Function
re-bonjour,
une solution avec des plages non-continues et des paramètres optionel pour les tags <table>,<tr> et <td>
exemple d'appel
=tabtohtml(A1:A4;C1:C4,"<table width=100%>","<td>")
Function tabtohtml(ParamArray v())
tb = "<table>"
tr = "<tr>"
td = "<td>"
Dim a()
ne = v(0).Rows.Count
ReDim a(100, ne)
For i = 1 To ne
c = 0
For k = LBound(v) To UBound(v)
If IsObject(v(k)) Then Set r = v(k) Else Set r = Range("A1"): t = v(k)
If r.Rows.Count > 1 Then
For j = 1 To r.Columns.Count
c = c + 1
a(c, i) = r.Cells(i, j)
Next j
Else
Select Case UCase(Left(t, 3))
Case "<TA"
tb = t
Case "<TD"
td = t
Case "<TR"
tr = t
End Select
End If
Next k
Next i
h = tb
For i = 1 To ne
h = h & tr
For j = 1 To c
h = h & td & a(j, i) & "</td>"
Next j
h = h & "</tr>"
Next i
tabtohtml = h & "</table>"
End Function
merci pour ta rapidité
mais si tu peux la modifier (2eme solution) je serai très connaissant
si possible que cette fonction traite uniquement l’entête du tableau et une seule ligne peut être cela diminue le nombre de ligne du code
ainsi que la première colonne du table HTML soit obligatoirement en gras pour cela au lieu de mettre <TD> il faut que chaque cellule de la première ligne du tableau EXCEL soit entre ces deux balise<TH></TH> dans notre exemple <th>Entête1</th>et <th>Entête2</th>
avec ça la premier colonne du table HTML est toute en gras
tableau Excel
Entête1 entête2
valeur1 valeur2
table HTML
<table>
<tr>
<th>Entête1</th>
<td>valeur1</td>
</tr>
<tr>
<th>Entête2 </th>
<td>valeur2</td>
</tr>
</table>
je te donne un lien en ligne pour voir le résultat du code
supprime les lignes qui se trouvent par défaut
Merci de nouveau pour ton aide
bonjour,
si j'ai bien compris
Function tabtohtml(ParamArray v())
tb = "<table>"
tr = "<tr>"
td = "<td>"
th = "<th>"
Dim a()
ne = v(0).Rows.Count
ReDim a(100, ne)
For i = 1 To ne
c = 0
For k = LBound(v) To UBound(v)
If IsObject(v(k)) Then Set r = v(k) Else Set r = Range("A1"): t = v(k)
If r.Rows.Count > 1 Then
For j = 1 To r.Columns.Count
c = c + 1
a(c, i) = r.Cells(i, j)
Next j
Else
Select Case UCase(Left(t, 3))
Case "<TA"
tb = t
Case "<TD"
td = t
Case "<TR"
tr = t
Case "<TH"
th = t
End Select
End If
Next k
Next i
h = tb & vbNewLine
For i = 1 To ne
h = h & tr & vbNewLine
For j = 1 To c
If j = 1 Then
h = h & th & a(j, i) & "</th>" & vbNewLine
Else
h = h & td & a(j, i) & "</td>" & vbNewLine
End If
Next j
h = h & "</tr>" & vbNewLine
Next i
tabtohtml = h & "</table>"
End Function
Je te remercie pour le temps que tu as consacré à répondre à nos questions
la structure du tableau est exacte mais il y a deux problèmes:
1. le résultat est entouré par des guillemets: "<tableau>...........</tableau>"
2. désole je n’étais pas précis dans ma demande, il faut que les entêtes du tableaux Excel soient dans la première colonnes du tableau HTML
//Dans EXCEL:
ENTETE1 ENTETE2
VALEUR1 VALEUR2
//Table dans HTML(sans les balises)
<th>ENTETE1</th> <td> Valeur1</td>
<th>ENTETE2</th> <td> Valeur2 </td>
j’espère que j'ai éclairé ma question.
bonjour
Function tabtohtml(ParamArray v())
tb = "<table>"
tr = "<tr>"
td = "<td>"
th = "<th>"
Dim a()
ne = v(0).Rows.Count
ReDim a(100, ne)
For i = 1 To ne
c = 0
For k = LBound(v) To UBound(v)
If IsObject(v(k)) Then Set r = v(k) Else Set r = Range("A1"): t = v(k)
If r.Rows.Count > 1 Then
For j = 1 To r.Columns.Count
c = c + 1
a(c, i) = r.Cells(i, j)
Next j
Else
Select Case UCase(Left(t, 3))
Case "<TA"
tb = t
Case "<TD"
td = t
Case "<TR"
tr = t
Case "<TH"
th = t
End Select
End If
Next k
Next i
h = tb & nl
For j = 1 To c
h = h & tr & nl
For i = 1 To ne
If i = 1 Then
h = h & th & a(j, i) & "</th>" & nl
Else
h = h & td & a(j, i) & "</td>" & nl
End If
Next i
h = h & "</tr>" & nl
Next j
tabtohtml = h & "</table>"
End Function
Bonjour
ça m'a échappé cette info
voici mon tableaux excel
entete1 entete2 entete3
ligne1valeur1 Ligne1valeu2 Ligne1valeu3 =fx(entête +ligne1)
ligne2valeur1 Ligne2valeu2 Ligne2valeu3 =fx(entête +ligne2)
ligne3valeur1 Ligne3valeu2 Ligne3valeu3 =fx(entête +ligne3)
pour chaque ligne de ce tableau je dois appeler cette fonction ,qui va traité les entêtes + cette ligne active ( sélection de cellules)
cordialement
bonjour,
voici une nouvelle version (qui fait l'hypothèse que la ligne titre est en ligne 1
Function tabtohtml(ParamArray v())
tb = "<table>"
tr = "<tr>"
td = "<td>"
th = "<th>"
Dim a()
ne = v(0).Rows.Count
ReDim a(100, ne)
For i = 1 To ne
c = 0
For k = LBound(v) To UBound(v)
If IsObject(v(k)) Then Set r = v(k): t = v(k) Else Set r = Range("A1"): t = v(k)
If r.Count > 1 Then
For j = 1 To r.Columns.Count
c = c + 1
a(c, i) = r.Cells(i, j)
col = Split(r.Cells(i, j).Address, "$")
a(c, 0) = Cells(1, col(1))
Next j
Else
If Left(t, 1) <> "<" Then
c = c + 1
a(c, i) = r.Value
col = Split(r.Address, "$")
a(c, 0) = Cells(1, col(1))
Else
Select Case UCase(Left(t, 3))
Case "<TA"
tb = t
Case "<TD"
td = t
Case "<TR"
tr = t
Case "<TH"
th = t
End Select
End If
End If
Next k
Next i
h = tb & nl
For j = 1 To c
h = h & tr & nl
For i = 0 To ne
If i = 0 Then
h = h & th & a(j, i) & "</th>" & nl
Else
h = h & td & a(j, i) & "</td>" & nl
End If
Next i
h = h & "</tr>" & nl
Next j
tabtohtml = h & "</table>"
End Function
j'ai le sentiment qu'une macro serait plus simple.
mets-nous un fichier avec ton tableau de départ et le tableau final que tu veux transformer en HTML.
Bonsoir
Je ne sais pas si tu l'a teste avec un éditeur HTML? le problème n'est pas résolu.
si je sélectionne les entêtes et des cellules de la première ligne , j'ai une doublon de la première colonne,
si je prends les entêtes(2celelules) et la 2eme ligne (2celelules), elle me donne 4 ligne avec des doublons
pour la macro je n'ai pas teste, je travaille qu'avec des concaténation
Cordialement
bonjour,
essaie en ne sélectionnant que les éléments de la ligne qui t'intéressent, la fonction ira chercher les entêtes en ligne 1.
donc par exemple
=tabtohtml(B2:C2;A2;G2:H2)
générera une table sur base de B1:C2,A1:A2 et G1:H2
=tabtohtml(B3:C3;A3;G3:H3)
générera une table sur base de B1,B3,C1,C3,A1,A3,G1,G3 et H1,H3