FAQ VBA

FAQ VBAConsultez toutes les FAQ
Nombre d'auteurs : 10, nombre de questions : 133, dernière mise à jour : 15 juin 2021
Sommaire→Word→Document→Tableau et signets- 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 WithUtiliser 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 cmptLa 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 wdTableFormatGrid8On 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 WithCe 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 IfOn utilise la décomposition du range en Start et End
ActiveDocument.Range(ActiveDocument..Bookmarks("sig1").Range.Start, ActiveDocument..Bookmarks("sig2").Range.End).Select


