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

http://www.htmlinstant.com/

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

Rechercher des sujets similaires à "fonction qui transforme tableau html"