FAQ VBA
FAQ VBAConsultez toutes les FAQ
Nombre d'auteurs : 10, nombre de questions : 133, dernière mise à jour : 15 juin 2021
- Pourquoi mon signet est il détruit lorsque je modifie son texte ?
- Comment insérer un signet qui ne contient pas de texte ?
- Comment créer et remplir un tableau ?
- Comment gère-t-on la mise en forme d'un tableau ?
- Comment scinder un tableau qui fait plus de 10 lignes en dupliquant les titres ?
- Comment atteindre une plage comprise entre deux signets ?
Il y a toujours destruction d'un signet portant sur une plage. Le signet fait partie de la plage.
Dim
objRange As
Range
Set
objRange =
ActiveDocument.Bookmarks.Item
(
"genre"
).Range
objRange.Text
=
"madame"
Le signet 'genre' est détruit dans cette opération. Il faut toujours recréer le signet après, du style
ActiveDocument.Bookmarks
(
"genre"
).Range.Select
Selection.Text
=
"Madame"
objRange.Bookmarks.Add
"genre"
Pour éviter cela, il vaut mieux utiliser des signets d'insertion (défini sur un point)
On appelle la méthode collapse de la sélection avant l'insertion
selection.Collapse
Direction:=
wdCollapseEnd
With
ActiveDocument.Bookmarks
.Add
Range:=
Selection.Range
, Name:=
"Nom"
.DefaultSorting
=
wdSortByName
.ShowHidden
=
True
End
With
Utiliser une variable objet Table.
Dim
objTable As
Table
Set
objTable =
objDoc.Tables.Add
(
Range:=
Selection.Range
, NumRows:=
5
, NumColumns:=
3
)
Dim
cmpt As
Long
For
cmpt =
1
To
objTable.Rows.Count
objTable.Cell
(
cmpt, 2
).Range.Text
=
"montext"
&
cmpt
Next
cmpt
La navigation dans les tableaux est assez similaire à celle d'Excel avec des objets Cells, Columns etc.... Néanmoins, pour accéder au contenu d'une cellule, vous devez passer par l'objet Range de l'objet Cell.
Deux possibilités. On applique un format prédéfini
objTable.AutoFormat
wdTableFormatGrid8
On gére soit même
objTable.AutoFitBehavior
(
wdAutoFitContent)
With
objTable
.Borders
(
wdBorderLeft).LineStyle
=
wdLineStyleSingle
.Borders
(
wdBorderRight).LineStyle
=
wdLineStyleSingle
.Borders
(
wdBorderTop).LineStyle
=
wdLineStyleSingle
.Borders
(
wdBorderBottom).LineStyle
=
wdLineStyleSingle
.Borders
(
wdBorderHorizontal).LineStyle
=
wdLineStyleDot
.Borders
(
wdBorderVertical).LineStyle
=
wdLineStyleDot
.Borders.Shadow
=
False
End
With
Ce code ajuste la largeur des colonnes à leur contenu, encadre le tableau avec une ligne continue et les cellules en pointillé.
La manipulation est un peu particulière. Si on travaille uniquement avec les collections exposées par le tableau, on n'accède pas à des méthodes comme Copy ou Paste. Par contre, l'objet Selection expose ces méthodes.
Set
objTable =
ThisDocument.Tables
(
1
)
If
objTable.Rows.Count
>
10
Then
objTable.Rows
(
1
).Select
Selection.Copy
objTable.Rows
(
11
).Select
Selection.Paste
objTable.Rows
(
11
).Select
Selection.SplitTable
End
If
On utilise la décomposition du range en Start et End
ActiveDocument.Range
(
ActiveDocument..Bookmarks
(
"sig1"
).Range.Start
, ActiveDocument..Bookmarks
(
"sig2"
).Range.End
).Select