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 :

Erreurs mise en page tableaux [WD-2003]


Sujet :

VBA Word

  1. #1
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2012
    Messages : 30
    Points : 21
    Points
    21
    Par défaut Erreurs mise en page tableaux
    Bonjour à tous,

    J'ai déjà posté une question sur ce sujet il y a quelques temps mais mon problème a un peu évolué alors je recommence.

    J'ai créé un fichier Excel comprenant tout plein d'infos sur chaque ligne. A partir de ce tableur, je crée un document Word qui reprend dans des tableaux les infos (un tableau par ligne).

    Tout marche nickel quand je teste sur une dizaine de lignes. Sauf que mon tableau est destiné à en avoir plus et lorsque je tente sur mon tableau normal de 300 lignes, ça plante. Mais ce que je ne comprend pas c'est que ça plante sur une ligne de code qui a déjà été passée une cinquantaine de fois et que la ligne du tableur n'a rien de différent des autres.

    Mon erreur arrive lorsque je veux fusionner des cellules de mon tableau. Est - il possible que Word se mélange les pinceaux et ne sache plus quel est le tableau que je lui demande de traiter (c'est le dernier créé alors c'est pas censé être compliqué!) ?

    Merci

  2. #2
    Membre expert

    Homme Profil pro
    Spécialiste progiciel
    Inscrit en
    Février 2010
    Messages
    1 747
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Spécialiste progiciel
    Secteur : Service public

    Informations forums :
    Inscription : Février 2010
    Messages : 1 747
    Points : 3 016
    Points
    3 016
    Par défaut
    Bonjour,

    Sans ni le code, ni le message d'erreur, c'est assez délicat à dire mais peut-être au moment d'un saut de page. Je ne pense pas qu'il ne sache plus quel est le bon tableau mais une fusion peut peut être entrainer le regroupement de deux tableaux en un seul.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2012
    Messages : 30
    Points : 21
    Points
    21
    Par défaut
    Ok, alors je vais essayer d'expliquer un peu :

    On part du principe que j'ai un fichier Excel avec des infos dans chaque ligne et que je renseigne mon fichier word avec chacune de ces lignes.

    Une fois le prétraitement du Excel fait :

    - je crée un fichier Word, associé à une variable fiches :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Set WordApp = CreateObject("Word.Application")
        WordApp.Documents.Add
        Set fiches = WordApp.ActiveDocument
        WordApp.ActiveDocument.SaveAs (chemin & "\fiches.doc")
        Set fiches = WordApp.Documents(chemin & "\fiches.doc")
    - pour chaque ligne,
    - je crée un tableau :
    Pour le premier tableau (après un bookmark qui me sert à traiter plusieurs section et à insérer ensuite des récapitulatifs au début de chaque partie) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        WordApp.Selection.Goto what:=wdGoToBookmark, Name:="bk_" & signet
        WordApp.Selection.MoveDown Unit:=wdLine
        WordApp.Selection.TypeParagraph
        WordApp.Selection.InsertBreak Type:=wdPageBreak
        fiches.Tables.Add Range:=fiches.Paragraphs(2).Range, NumRows:=30 + nb, NumColumns:=6
        WordApp.Selection.TypeParagraph
    Pour les autres tableaux de la partie, je me repère par rapport au dernier tableau créé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        fiches.Tables(fiches.Tables.Count).Rows(fiches.Tables(fiches.Tables.Count).Rows.Count).Select
        WordApp.Selection.MoveDown Unit:=wdParagraph, Count:=1
        'WordApp.Selection.TypeParagraph
        fiches.Tables.Add Range:=fiches.Paragraphs(fiches.Paragraphs.Count).Range, NumRows:=30 + nb, NumColumns:=6
        WordApp.Selection.InsertBreak Type:=wdPageBreak
    - je rempli mon tableau, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    With fiches.Tables(fiches.Tables.Count)
        .Cell(1, 1).Range.Text = "FICHE N°" & n
        .Cell(3, 1).Range.Text = "Nature"
        .Cell(3, 4).Range.Text = Worksheets("Excel").Cells(ligne, 7).Value
        .Cell(5, 1).Range.Text = "Blabla"
    End with
    - je mets en page mon tableau, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Set t = fiches.Tables(fiches.Tables.Count)
    With t
        .Rows(1).Cells.Merge
        .Rows(14).Cells.VerticalAlignment = wdCellAlignVerticalCenter
        .Cell(6, 2).Merge .Cell(6, 4)
        .Cell(6, 1).Range.Font.SmallCaps = True
        .Cell(4, 1).Range.Font.Size = 1
        .Cell(16, 1).Range.Bold = True
        .Cell(2, 1).Borders(wdBorderBottom).LineStyle = 1
        .Cell(15, 1).SetWidth ColumnWidth:=47, RulerStyle:=1
    End with
     
    Set t = Nothing
    - je sauvegarde mon fichier Word !

    Tout fonctionne sans problème.

    Sauf quand au départ je sélectionne plus de 100 lignes, étrangement il bloque au 57ème tableau, sur le centrage du texte (Rows(i).Cells.VerticalAlignment) alors qu'il vient de le faire 56 fois et que cette ligne n'a rien de différent. Plus étrange encore, quand je sélectionne que 58 lignes, la 57 ne provoque aucune erreur et le programme va bien jusqu'au bout.

    C'est totalement incompréhensible!

    J'avais réussi à contourner le problème un moment en créant tous mes tableaux puis en les mettant en forme ensuite. Cependant, ils n'ont plus à présent tous la même taille donc je dois les faire un à un, c'est plus simple.

    Voilà! Merci de m'éclairer, je suis totalement perdue là ...

    Info supplémentaire :
    Une fois mon programme planté, je peux tout de même récupérer mon fichier Word pas totalement mis en page. Quand je veux effectuer la manip à la main (ici, centrer verticalement mon texte) c'est impossible. J'ai beau appuyer sur le bouton, rien ne se passe.

  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Et si tu fais la mise en page à la fin du processus au lieu de le faire en cours de route.

    Je ne comprend pas pourquoi ça bloque "parfois".

    Au lieu de ne prendre qu'une table, tu peux boucler sur les tables.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Set t = fiches.Tables(fiches.Tables.Count)
    With t
        .Rows(1).Cells.Merge
        .Rows(14).Cells.VerticalAlignment = wdCellAlignVerticalCenter
        .Cell(6, 2).Merge .Cell(6, 4)
        .Cell(6, 1).Range.Font.SmallCaps = True
        .Cell(4, 1).Range.Font.Size = 1
        .Cell(16, 1).Range.Bold = True
        .Cell(2, 1).Borders(wdBorderBottom).LineStyle = 1
        .Cell(15, 1).SetWidth ColumnWidth:=47, RulerStyle:=1
    End with
     
    Set t = Nothing
    A la fin de ton processus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim oTbl As Table
     
    For Each oTbl in Fiches.Tables
    with oTbl
        .Rows(1).Cells.Merge
        .Rows(14).Cells.VerticalAlignment = wdCellAlignVerticalCenter
        .Cell(6, 2).Merge .Cell(6, 4)
        .Cell(6, 1).Range.Font.SmallCaps = True
        .Cell(4, 1).Range.Font.Size = 1
        .Cell(16, 1).Range.Bold = True
        .Cell(2, 1).Borders(wdBorderBottom).LineStyle = 1
        .Cell(15, 1).SetWidth ColumnWidth:=47, RulerStyle:=1
    End with
    Next oTbl

  5. #5
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2012
    Messages : 30
    Points : 21
    Points
    21
    Par défaut
    Alors je viens de faire un test. En farfouillant sur le forum et internet, j'ai vu un truc sur la pile d'annulation. Et en effet, quand j'ouvre mon fichier une fois qu'il est planté, le pauvre Word peut annuler plus de 10000 actions.

    Donc j'ai tenté en vidant le undo à chaque tableau et ça a l'air de fonctionner.

    Pensez vous que ça peut être la source de mon problème ?
    Si c'est le cas c'est vraiment fourbe quand même!

  6. #6
    Membre expert

    Homme Profil pro
    Spécialiste progiciel
    Inscrit en
    Février 2010
    Messages
    1 747
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Spécialiste progiciel
    Secteur : Service public

    Informations forums :
    Inscription : Février 2010
    Messages : 1 747
    Points : 3 016
    Points
    3 016
    Par défaut
    Bonjour,

    Oui cela l'est surement, je pense que tu peux accélérer le traitement.
    Personnellement, je faisais pour accélérer certains traitements des sauvedarges régulières lors de mes traitements qui ont notamment cet effet de vider le cache.

  7. #7
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2012
    Messages : 30
    Points : 21
    Points
    21
    Par défaut
    Bon c'était vraiment ça le problème. C'est résolu avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WordApp.ActiveDocument.UndoClear
    En plus, maintenant ça fonctionne plus rapidement

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

Discussions similaires

  1. [Vxi3] mise en page tableaux et sections
    Par gwena2b dans le forum Webi
    Réponses: 0
    Dernier message: 21/10/2013, 10h18
  2. Mise en page tableaux décalée entre Firefox et IE
    Par weis3r dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 25/07/2011, 19h50
  3. erreur mise en page excel
    Par moimemessssssssss dans le forum VBA Access
    Réponses: 2
    Dernier message: 07/04/2010, 21h56
  4. Réponses: 2
    Dernier message: 20/09/2005, 15h10
  5. [CSS][HTML] Mise en page : Avec ou sans tableaux ?
    Par arno2000 dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 09/08/2005, 02h34

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