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.