0
votes

Ajustement de la largeur des tableaux en fonction de la mise en page dans Word VBA

Je cherche à automatiser une partie fastidieuse de mon travail avec Visual Basic dans Word. Je travaille sur de longs documents et les tableaux doivent avoir certaines largeurs (6,5 pouces [ou 468 points] en orientation portrait et 9 pouces [ou 648 points] en paysage). Jusqu'à présent, j'ai

Sub TableResize()

Dim oTbl As Table

    For Each oTbl In ActiveDocument.Tables

        oTbl.AutoFitBehavior wdAutoFitFixed

        With ActiveDocument.PageSetup

            oTbl.PreferredWidthType = wdPreferredWidthPoints

            oTbl.PreferredWidth = 468

            oTbl.Rows.Alignment = wdAlignRowCenter
    
    End With
    
    Next oTbl

End Sub

Ce qui fonctionne très bien pour régler TOUTES les tables à 6,5 pouces et les aligner au centre, mais cela visse bien sûr les tableaux sur les pages orientées paysage. Quelqu'un peut-il m'aider à définir les largeurs de tableau en fonction de la mise en page?

Merci, Ben


0 commentaires

3 Réponses :


0
votes

Si vous remplacez votre .PreferredWidthType par wdPreferredWidthPercent, sa taille sera proportionnelle à la largeur de la page. Il vous suffit de modifier deux lignes de votre code:

  oTbl.PreferredWidthType = wdPreferredWidthPercent 
  oTbl.PreferredWidth = 50   ' Change with suitable value

Remplacer par ce qui suit:

  oTbl.PreferredWidthType = wdPreferredWidthPoints
  oTbl.PreferredWidth = 468

Cependant, au lieu de 50, vous devez déterminer et changer la valeur qui convient à vos besoins


0 commentaires

0
votes

Bien que vous puissiez tester la largeur de chaque page et définir le tableau en conséquence, c'est plus simple:

Sub TableResize()
    Dim oTbl As Table
    
    For Each oTbl In ActiveDocument.Tables
        With oTbl
            .AutoFitBehavior wdAutoFitFixed
            .PreferredWidthType = wdPreferredWidthPercent
            .PreferredWidth = 100
            .Rows.Alignment = wdAlignRowCenter
        End With
    Next oTbl
End Sub

J'ai aussi nettoyé un peu votre code.


2 commentaires

Merci pour la réponse. Le problème avec l'utilisation de wdPreferredWidthPercent est que lorsqu'il est converti de 100% en pouces dans les propriétés de la table, il finit par être de 6,49 "et 8,99", ce qui n'est pas susceptible de voler dans mon entreprise, car ils doivent être définis en points à 6,5. "et 9". Je pourrais peut-être leur montrer cela et leur demander de considérer à quel point c'est beaucoup plus rapide, mais je ne sais pas si cela fonctionnera.


Comme je l'ai mentionné, vous pouvez d'abord tester la largeur de chaque page, puis définir la largeur du tableau en points.



0
votes
Sub Demo()
Application.ScreenUpdating = False
Dim Tbl As Table
For Each Tbl In ActiveDocument.Tables
  With Tbl
    .AllowAutoFit = False
    .Rows.Alignment = wdAlignRowCenter
    .PreferredWidthType = wdPreferredWidthPoints
    If .Range.Sections.First.PageSetup.Orientation = wdOrientPortrait Then
      .PreferredWidth = InchesToPoints(6.5)
    Else
      .PreferredWidth = InchesToPoints(9)
    End If
  End With
Next
Application.ScreenUpdating = True
End Sub

2 commentaires

Toi beauté! Cela l'a fait. J'imagine que je peux utiliser un format similaire pour ajuster uniquement les tableaux non ordonnés à 6 pouces avec un retrait à gauche de 0,5 pouce?


Vous pourriez - avec seulement cinq lignes de code supplémentaires, bien que plus de lignes de code puissent être utilisées pour le rendre plus efficace.