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
3 Réponses :
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
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.
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.
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
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.