IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Word Discussion :

Tableaux WORD vers HTML


Sujet :

VBA Word

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2005
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 40
    Points : 15
    Points
    15
    Par défaut Tableaux WORD vers HTML
    Bonjour tout le monde...

    J'ai un problème (encore), je vous explique :

    J'utilise une macro pour convertir les tableaux WORD en HTML avec ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Private Sub Conv_Tableaux_Click()
        Dim t As Table ' T c'est mon tableau
        Dim r As Row
        Dim stTexte As String
     
       ' Dim c As Cell
       'A voir comment sélectionner le bon tableau...
        Set t = ActiveDocument.Tables(1) ' Je prend le 1° tableau du document
     
        stTexte = "<center><table width=100% border=1>"
        For Each r In t.Range.Rows
           stTexte = stTexte & "<TR>"
           For Each c In r.Range.Cells
             stTexte = stTexte & "<TD><div align=center>" & NetCellule(c.Range.Text) & "</div></TD>"
           Next
           stTexte = stTexte & "</TR>" & Chr(13)
        Next
         stTexte = stTexte & "</TABLE></center>"
     
              stTexte = stTexte & "</TABLE>"
         Debug.Print stTexte
         t.Select
         t.Delete
         Selection.TypeText Text:=stTexte
    End Sub
    Mais j'ai une conversion bizarre au niveau des cellules :

    Voici mon doc WORD : (il manque la cellule du titre du tableaux au dessus)


    Et j'obtient ceci :


    Auriez-vous des macros ou des corrections a celui-ci a me proposer ?

    Je vous remercie pour votre aide

  2. #2
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    salut luxem ... bon j'ai regardé ton probléme... , du moins pour les lignes de titres.. tu as des cellules fusionées.. il faudrai rajouter dans la définition de la celulle fusionée TD..., 4 étant le nombre de cellule fusionnée..., cependant sous Word , je n'arrive pas à déterminer le nombre de cellules fusionnée...


  3. #3
    Membre à l'essai
    Inscrit en
    Novembre 2005
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 40
    Points : 15
    Points
    15
    Par défaut
    Merci les gars...

    BBil, T toujours la toi... (non stop connected)

    C sympa, je vais essayer de voir ca....mais ca voudrait dire que je devrait faire en fonction de chaque tableau ?, exemple, si j'ai un tableau avec juste 3 cellule fusionné, mon script ne marchera pas alors...?

    byebye et encore merci BBil

  4. #4
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    tiens j'ai quelque chose mais c'est un peu long ...

    tous d'abords une fonction pour mémoriser l'emplacement des "bords" des colonnes... :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    42
    43
    44
    '
    ' Calcule emplacement des colonnes..
    '
    '
    Private Sub Mes_Tableaux(T, tMes() As Single)
        Dim r As Row
        Dim c As Cell
        Dim sLargeur As Single
        Dim bTrouve As Boolean
        Dim i As Integer
        Dim j As Integer
        ReDim Preserve tMes(0)
        tMes(0) = 0
        For Each r In T.Range.Rows
            sLargeur = 0
     
            For Each c In r.Range.Cells
             sLargeur = sLargeur + c.PreferredWidth
             i = 0
             bTrouve = False
             While i <= UBound(tMes) And Not bTrouve
                If tMes(i) < sLargeur Then
                 i = i + 1
                 Else
                  bTrouve = True
                End If
               Wend
               If Not bTrouve Then
                  If tMes(i - 1) < sLargeur - 0.01 Then
                    ReDim Preserve tMes(i)
                    tMes(i) = sLargeur
                  End If
               Else
                If tMes(i) - sLargeur > 0.1 Then
                   For j = UBound(tMes) To i + 1 Step -1
                     tMes(j) = tMes(j - 1)
                    Next
                     tMes(i) = sLargeur
                End If
               End If
            Next
        Next
     
    End Sub
    Puis une fonction qui à partir de la mémorisation précédente des "bords" des colonnes , et des "bords" d'une cellule , renvoi le nombre de cellules fusionnées...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    '
    ' Calcul NbColonnes
    '
    '
    Private Function iNbCol(c As Cell, sDepart As Single, tMes() As Single) As Integer
     Dim iDeb As Integer
     Dim iFin As Integer
     Dim i As Integer
     Dim bTrouver As Boolean
     iDeb = 0
     iFin = 0
     bTrouve = False
     While i <= UBound(tMes) And Not bTrouve
       If tMes(i) < sDepart + 0.01 Then iDeb = i
       iFin = i
       If tMes(i) >= c.PreferredWidth + sDepart Then bTrouve = True
     
       i = i + 1
      Wend
     iNbCol = iFin - iDeb
    End Function
    et maintenant l'utilisation dans ta fonction .. :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Private Sub Conv_Tableaux_Click()
        Dim T As Table ' T c'est mon tableau
        Dim r As Row
        Dim stTexte As String
        Dim sDepart As Single
        Dim stColSpan As String 'colonne fusionee
        Dim iCol As Integer
        Dim c As Cell
         Dim tMes() As Single 'Tableau emplacement des colonnes...
        Set T = ActiveDocument.Tables(1) ' Je prend le 1° tableau du document
        Mes_Tableaux T, tMes
        stTexte = "<center><table width=100% border=1>"
        For Each r In T.Range.Rows
           sDepart = 0
           stTexte = stTexte & "<TR>"
           For Each c In r.Range.Cells
             stColSpan = ""
             iCol = iNbCol(c, sDepart, tMes)
             If iCol > 1 Then stColSpan = " colspan=" & iCol & " "
     
             stTexte = stTexte & "<TD" & stColSpan & "><div align=center>" & NetCellule(c.Range.Text) & "</div></TD>"
             sDepart = sDepart + c.PreferredWidth
           Next
           stTexte = stTexte & "</TR>" & Chr(13)
        Next
         stTexte = stTexte & "</TABLE></center>"
     
              stTexte = stTexte & "</TABLE>"
         Debug.Print stTexte
         T.Select
         T.Delete
         Selection.TypeText Text:=stTexte
    End Sub
    bon courage....

  5. #5
    Membre à l'essai
    Inscrit en
    Novembre 2005
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 40
    Points : 15
    Points
    15
    Par défaut
    T un chef BBil, je vais tester ca....

  6. #6
    Membre à l'essai
    Inscrit en
    Novembre 2005
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 40
    Points : 15
    Points
    15
    Par défaut
    Wouaaaaou !!

    Franchement BBil, T trop fort....ce Script il tu :-)

    Ca marche superbement bien !! (chui trop content)

    Encore merci !!

  7. #7
    Membre expérimenté Avatar de Megaxel
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 187
    Points : 1 405
    Points
    1 405
    Par défaut
    C'est bizarre, mais quand je vois dans le dernier message d'un post:
    Ca marche superbement bien !! (chui trop content)

    Encore merci !!
    , je m'attend à voir le tag "Résolu"...
    Allez, hop, un petit click sur le bouton, en bas à gauche.

  8. #8
    Membre à l'essai
    Inscrit en
    Novembre 2005
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 40
    Points : 15
    Points
    15
    Par défaut
    Salut les Pro de la Prog...

    En fait j'ai passer une bonne partie de la journée a essayer de voir ce super truc (Merci BBil), mais y a un truc qui deconne, et je n'arrive pas a corriger.

    Il y a un probleme de cellules

    Je m'explique en images :

    Ca c'est l'original :


    Et en HTML, j'ai un probleme de cellule (j'avais pas vu...), la deuxieme ligne du tableau est mal analysée... :


    Ca me fait 5 + 5 + 2 au lieu de 4 + 4 + 4

    C'est bizarre non ?

    *** Sinon, je vais encore vraiment abuser, mais y a pas moyen d'avoir toutes les lignes un peu comme ca :


    Pour le *** dernier point, c'est pas grave si y a po moyen... , mais j'essaye, on ne sait jamais, car vous êtes tellement present et bons...que j'essaie quand même...!!

    PS : sinon, megaxel, c moi qui doit mettre resolu sur mes Topics ou C l'admin ?

  9. #9
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    La somme des largeurs de cellules données par word ne me donne pas toujours la même valeur ... il y as des petit décalage ... pour rattraper cela modifie la fonction iNbCol :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    ...
    bTrouve = False
     While i <= UBound(tMes) And Not bTrouve
       If tMes(i) < sDepart + 0.01 Then iDeb = i
       iFin = i
       If tMes(i) >= c.PreferredWidth + sDepart - 0.05 Then bTrouve = True
     
       i = i + 1
      Wend
    ...
    par le rajout du -0.05



    Pour ce qui est des cellules non encadrées ., c'est les cellules vides ...j'ai regardé la FAQ HTLM .. il est dit que pour éviter cela il faut mettre un espace dans le tableau <TD> <\TD> .. bon cela ne marche pas chez moi lors de lavisualisation sous Firefox par contre c'est ok si je rajoute un caractére Chr(160) ... donc pour cela modifie la fin de la fonction
    NetCellule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ...
      If Len(st2) = 0 Then st2 = Chr(160)
      NetCellule = st2
     
     End Function

  10. #10
    Membre à l'essai
    Inscrit en
    Novembre 2005
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 40
    Points : 15
    Points
    15
    Par défaut
    Ca marche au poil...

    bbil, je te décerne le prix du meilleurs "Helper" du net !!!

    Tu m'a guidé pas a pas (moi qui suis un newb en VBA)....Enfin tu me sauve encore la vie (en plus c'est super cool, car je présente la macro a mon superieur ce matin)... je pense qu'il va aimer... !

    Encore MERCI pour tout !!

    Cette fois on peu mettre [RESOLU]

  11. #11
    Membre expérimenté Avatar de Megaxel
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 187
    Points : 1 405
    Points
    1 405
    Par défaut
    Alors oui: c'est toi qui met le tag en cliquant sur le bouton en bas à gauche quand tu ouvres ton post.

  12. #12
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Pas certain que luxmen revienne voir son message...

    Alors, je le mets, le tag!

  13. #13
    Membre à l'essai
    Inscrit en
    Novembre 2005
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 40
    Points : 15
    Points
    15
    Par défaut
    Salut,

    Merci pour le [Resolu], ca y est je viens de voir ou c'etait ... je le saurais pour une autre fois...désolé !

  14. #14
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Points : 42 925
    Points
    42 925
    Par défaut
    Il semblerait que ce soit lié à ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ...
      If Len(st2) = 0 Then st2 = Chr(160)
      NetCellule = st2
     
     End Function
    Petit conseil, il n'est pas souhaitable de faire remonter un message taggé résolu datant de 2005 pour y poser une question.

  15. #15
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Sub ne marche pas pour les lignes fusionées d'une colone
    {Désolé pour répondre au message tagué résolu de 2005, mais j'aurais été hors-contexte si j'avais crée un nouveau sujet }
    Bonjour, j'ai un petit (gros) probleme qui m'empeche d'avancer :
    J'ai utilisé vos macros pour convertir mes tableaux, cela marche à merveille
    Cependant, quand on tombe sur un tableau à lignes fusionnées, ça plante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Private Sub Mes_Tableaux(t, tMes() As Single)
        Dim r As Row
        Dim c As Cell
        Dim sLargeur As Single
        Dim bTrouve As Boolean
        Dim i As Integer
        Dim j As Integer
        ReDim Preserve tMes(0)
        tMes(0) = 0
        For Each r In t.Range.Rows
            sLargeur = 0
            
            For Each c In r.Range.Cells
             sLargeur = sLargeur + c.PreferredWidth
             i = 0
             bTrouve = False
             While i <= UBound(tMes) And Not bTrouve
                If tMes(i) < sLargeur Then
                 i = i + 1
                 Else
                  bTrouve = True
                End If
               Wend
               If Not bTrouve Then
                  If tMes(i - 1) < sLargeur - 0.01 Then
                    ReDim Preserve tMes(i)
                    tMes(i) = sLargeur
                  End If
               Else
                If tMes(i) - sLargeur > 0.1 Then
                   For j = UBound(tMes) To i + 1 Step -1
                     tMes(j) = tMes(j - 1)
                    Next
                     tMes(i) = sLargeur
                End If
               End If
            Next
        Next
     
    End Sub
    Message d'erreur : Impossible d'acceder à des colonnes individuelles de cette collection car le tableau possede des cellules fusionées verticalement.

    Ligne d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each r In t.Range.Rows
    Can somebody PLEASE help me ?

  16. #16
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Points : 42 925
    Points
    42 925
    Par défaut
    Je ne vois pas pourquoi, il suffit de faire pointer un lien vers la question initiale.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Import tableaux WORD vers Excel en OLE
    Par diouki dans le forum C++Builder
    Réponses: 5
    Dernier message: 18/05/2013, 11h08
  2. Transformation document Word vers HTML
    Par LittleBean dans le forum Général Java
    Réponses: 0
    Dernier message: 04/11/2011, 18h34
  3. Tableaux Word ----> html
    Par luxmen dans le forum VBA Word
    Réponses: 9
    Dernier message: 01/12/2005, 23h27
  4. Conversion WORD vers HTML V4
    Par elitost dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 13/09/2005, 17h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo