Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Word > VBA Word
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 06/12/2005, 06h38   #1
Invité de passage
 
Inscription : novembre 2005
Messages : 40
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 40
Points : 3
Points : 3
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 :
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
luxmen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2005, 13h27   #2
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 532
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 532
Points : 16 388
Points : 16 388
Envoyer un message via Skype™ à bbil
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...

bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2005, 15h29   #3
Invité de passage
 
Inscription : novembre 2005
Messages : 40
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 40
Points : 3
Points : 3
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
luxmen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2005, 16h36   #4
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 532
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 532
Points : 16 388
Points : 16 388
Envoyer un message via Skype™ à bbil
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 :
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 :
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 :
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....
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2005, 20h22   #5
Invité de passage
 
Inscription : novembre 2005
Messages : 40
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 40
Points : 3
Points : 3
T un chef BBil, je vais tester ca....
luxmen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2005, 07h54   #6
Invité de passage
 
Inscription : novembre 2005
Messages : 40
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 40
Points : 3
Points : 3
Wouaaaaou !!

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

Ca marche superbement bien !! (chui trop content)

Encore merci !!
luxmen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2005, 10h41   #7
Membre Expert
 
Avatar de Megaxel
 
Inscription : mai 2003
Messages : 1 188
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 1 188
Points : 1 306
Points : 1 306
C'est bizarre, mais quand je vois dans le dernier message d'un post:
Citation:
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.
Megaxel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2005, 22h01   #8
Invité de passage
 
Inscription : novembre 2005
Messages : 40
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 40
Points : 3
Points : 3
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 ?
luxmen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2005, 22h39   #9
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 532
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 532
Points : 16 388
Points : 16 388
Envoyer un message via Skype™ à bbil
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 :
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 :
1
2
3
4
5
6
 
...
  If Len(st2) = 0 Then st2 = Chr(160)
  NetCellule = st2
 
 End Function
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2005, 08h23   #10
Invité de passage
 
Inscription : novembre 2005
Messages : 40
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 40
Points : 3
Points : 3
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]
luxmen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2005, 09h35   #11
Membre Expert
 
Avatar de Megaxel
 
Inscription : mai 2003
Messages : 1 188
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 1 188
Points : 1 306
Points : 1 306
Alors oui: c'est toi qui met le tag en cliquant sur le bouton en bas à gauche quand tu ouvres ton post.
Megaxel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2005, 09h45   #12
Modérateur
 
Avatar de AlainTech
 
Homme Alain Gerard
Consultant informatique
Inscription : mai 2005
Messages : 3 585
Détails du profil
Informations personnelles :
Nom : Homme Alain Gerard
Âge : 58
Localisation : Belgique

Informations professionnelles :
Activité : Consultant informatique
Secteur : Finance

Informations forums :
Inscription : mai 2005
Messages : 3 585
Points : 7 633
Points : 7 633
Pas certain que luxmen revienne voir son message...

Alors, je le mets, le tag!
__________________
N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
Pensez aussi à voter pour les réponses qui vous ont aidés.
------------
Je dois beaucoup de mes connaissances à mes erreurs!
AlainTech est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2005, 11h36   #13
Invité de passage
 
Inscription : novembre 2005
Messages : 40
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 40
Points : 3
Points : 3
Salut,

Merci pour le [Resolu], ca y est je viens de voir ou c'etait ... je le saurais pour une autre fois...désolé !
luxmen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2009, 11h26   #14
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 16 867
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

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

Informations forums :
Inscription : février 2006
Messages : 16 867
Points : 28 220
Points : 28 220
Il semblerait que ce soit lié à ça
Code :
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.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles

www.morgania.be

Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2009, 11h45   #15
Invité de passage
 
Inscription : janvier 2009
Messages : 2
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 2
Points : 1
Points : 1
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 :
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 :
For Each r In t.Range.Rows
Can somebody PLEASE help me ?

Dernière modification par elliotttt ; 02/02/2009 à 11h58. Motif: désolé !
elliotttt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2009, 12h01   #16
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 16 867
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

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

Informations forums :
Inscription : février 2006
Messages : 16 867
Points : 28 220
Points : 28 220
Je ne vois pas pourquoi, il suffit de faire pointer un lien vers la question initiale.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles

www.morgania.be

Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 05h10.


 
 
 
 
Partenaires

Hébergement Web