Bonjour,

Je me rend compte que Dreamweaver modifie le code html lors des copier coller en mode wisiwig. J'ai bien entendue tenter de jouer avec les différentes options que propose le logiciel à ce niveau mais le problème demeure.

Pour être moins abstrait, voici plus de détails :
J'intègre en html des tableaux d'horaires de bus. Ces tableaux doivent être accessibles et correctement codés.

J'ai donc tout d'abord fait un gabarit de tableau en incluant toutes les informations relatives à l'accessibilité (pour ce qui concerne le présent problème :th, id et headers).

Pour automatiser mon travail, je veux faire un copier coller depuis Ms Excel vers Dreamweaver . Mais du coup, toutes les informations sautent et je me retrouve avec un tableau rempli, mais pas accessible.

Je n'ai que deux alternatives, hélas trop chronophage : soit je remplis case par case tout les tableaux accessibles, soit je rend accessible des tableau remplis d'informations. Smiley decu

Je me tourne donc vers la communauté pour vous poser la question suivante :
Connaissez vous un éditeur html plus malin que dreamweaver qui permette de faire des copier coller en respectant exactement le code / formatage de la page de destination ?
Si tu es sous windows, tu peux copier coller le tableaux excel dans word et utiliser cette macro VBA maison :

Sub ConvertTableToHTMLTable()
    'conversion de tableaux word en "vrais" tableaux html
    Dim tableau As Table, styleTableau As String, ligne As Row, cellule As Cell
    Dim nombreColonnes As Long, nombreCellLigne As Long, nombreLignes As Long, nombreTableaux As Long, titre As Boolean
    Dim stylePara As String, justif As String, fusionCell As String, p As Paragraph, colonne As Column, maSelec As Range
    Dim summary As Boolean, summary_content As String, summary_done As Boolean
    
    nombreTableaux = ActiveDocument.Tables.count
    
    i = 0
    For Each tableau In ActiveDocument.Tables
        i = i + 1
        StatusBar = "Conversion tableaux : " & Trim(Str(i)) & "/" & Trim(Str(nombreTableaux)) & " effectué"

        'récolte des infos primordiales du tableau et annulation du positionnement/largeur
        With tableau
            nombreColonnes = .Columns.count
            nombreLignes = .Rows.count
            styleTableau = .Style
            .Rows.Alignment = wdAlignRowLeft
            .PreferredWidthType = wdPreferredWidthAuto
            .PreferredWidth = 0
            .Rows.WrapAroundText = False
        End With
        
        'on travaille chaque ligne et dans chaque ligne chaque cellules
        summary_done = False
        summary_content = ""
        For Each ligne In tableau.Rows
            nombreCellLigne = ligne.Cells.count
            'ligne.HeadingFormat = False
            ligne.Height = wdRowHeightAuto
            'ligne.Select
            For Each cellule In ligne.Cells
                'si il y a plus d'un paragraphe alors on crée les élements P
                If cellule.Range.Paragraphs.count > 1 Then
                    For Each p In cellule.Range.Paragraphs
                    
                        p.Range.InsertBefore "<p>"
                        p.Range.Text = Left(p.Range.Text, Len(p.Range.Text) - 1) + "</p>" + Chr(13)
                    Next
                End If
                'si la première ligne est fusionnée alors c'est le titre du tableau
                titre = (nombreCellLigne = 1 And ligne.IsFirst)
                summary = (titre = False And nombreCellLigne = 1 And ligne.Index = 2 And summary_done = False)
                If titre Then
                    cellule.Range.InsertBefore Chr(9) & "<caption>"
                    cellule.Range.Paragraphs(1).Style = ActiveDocument.Styles("HTML_done")
                    cellule.Range.InsertAfter "</caption>"
                    cellule.Range.Paragraphs(cellule.Range.Paragraphs.count).Style = ActiveDocument.Styles("HTML_done")
                ElseIf summary Then
                    summary_content = Left(cellule.Range.Text, Len(cellule.Range.Text) - 2)
                    ligne.Delete
                    summary_done = True
                Else
                    'insertion codes début et fin cellule
                    If ligne.HeadingFormat Then
                        cellule.Range.InsertBefore Chr(9) & Chr(9) & "<th>"
                        cellule.Range.Paragraphs(1).Style = ActiveDocument.Styles("HTML_done")
                        cellule.Range.InsertAfter "</th>"
                        cellule.Range.Paragraphs(cellule.Range.Paragraphs.count).Style = ActiveDocument.Styles("HTML_done")
                    Else
                        Select Case cellule.Range.ParagraphFormat.Alignment
                            Case wdAlignParagraphCenter
                                justif = " style=""text-align: center;"""
                            Case wdAlignParagraphJustify
                                justif = " style=""text-align: justify;"""
                            Case wdAlignParagraphLeft
                                justif = ""
                            Case wdAlignParagraphRight
                                justif = " style=""text-align: right;"""
                        End Select
                        cellule.Range.InsertBefore Chr(9) & Chr(9) & "<td" & justif & ">"
                        cellule.Range.Paragraphs(1).Style = ActiveDocument.Styles("HTML_done")
                        cellule.Range.InsertAfter "</td>"
                        cellule.Range.Paragraphs(cellule.Range.Paragraphs.count).Style = ActiveDocument.Styles("HTML_done")
                    End If
                End If
                'catégorie ou titre? (qui s'étend en une cellule sur la largeur du tableau)
            Next
            'insertion codes début et fin ligne
            If titre = False And summary = False Then
                ligne.Range.InsertBefore Chr(9) & "<tr>" & Chr(13)
                ligne.Range.Paragraphs(1).Style = ActiveDocument.Styles("HTML_done")
                ligne.Range.InsertAfter Chr(13) & Chr(9) & "</tr>"
                ligne.Range.Paragraphs(ligne.Range.Paragraphs.count).Style = ActiveDocument.Styles("HTML_done")
            End If
        Next
        'entête et corps du tableau
        
        'insertion codes début et fin tableau
        tableau.Range.InsertBefore "<table summary=" & Chr(34) & summary_content & Chr(34) & " border=""1"">" & Chr(13)
        tableau.Range.Paragraphs(1).Style = ActiveDocument.Styles("HTML_done")
        tableau.Range.InsertAfter Chr(13) & "</table>" & Chr(13)
        tableau.Select
        Selection.Rows.ConvertToText Separator:=wdSeparateByParagraphs, NestedTables:=True
    Next

End Sub


Mode d'emploi :

1. Si les cellules de la première ligne sont fusionnées sur la largeur, cette ligne sera considérée comme le titre du tableau.
2. Si à la 2e ligne les cellules sont fusionnées également ça sera le contenu de summary.
3. Les cellules (à part sur la première ligne et la 2e) ne doivent pas être fusionnées.
4. Tu peux, dans word, définir des cellules d'entêtes, elles seront traduites en <th>.
5. La macro ne génère pas <thead> et <tbody>
6. La macro considère que le texte est aligné par défaut à gauche, si l'alignement utilisé est différent, un style inline sera créé.
7. Si il y a plusieurs tableaux ils seront tous «transcodé»
8. Tout ceci est évidemment librement diffusable et utilisable.


;)
Modifié par Patidou (20 Apr 2009 - 13:08)
Heu... Ouais si il y a des gras, des italiques, etc, ce n'est pas géré non plus... Bref, c'est brut de chez brut... Smiley lol
Merci pour ta réponse Patidou.

Mais comment dire... n'étant pas forcement très copain avec word, je suis un peu paumé du coup Smiley cligne
Ok, bon voilà le fichier prêt à l'emploi, il y avait aussi un petit oubli dans le code qui est réparé.

C'est un modèle de document avec un bouton actionnant la macro et un tableau modèle que tu peux effacer. Donc tu efface le tableau présent, tu copie-colle ton tableaux excel et tu clique sur le bouton dans la palette. Et c'est tout. Smiley cligne
Merci encore de l'intérêt que tu portes mon problème Patidou... mais là encore je laisse tombé word car je n'arrive à rien.

Je retourne à mes copier-collers interminables de headers="....." sur chaque cellules des tableaux.