FAQ Word
FAQ WordConsultez toutes les FAQ
Nombre d'auteurs : 20, nombre de questions : 289, dernière mise à jour : 15 juin 2021
- Comment fusionner des cellules dans un document Word ?
- Comment copier une ligne précise d'un tableau Word et la coller dans Excel ?
- Comment exporter des données Excel dans des cellules précises d'un tableau Word ?
- Comment scinder un tableau qui fait plus de 10 lignes en dupliquant les titres ?
- Comment vérifier si la première cellule d'un tableau est "vide" ?
- Comment importer un tableau Word en intégrant les retours à la ligne ?
- Comment exporter un tableau Excel vers Word et l'adapter à la largeur de la page ?
- Comment récupérer la donnée d'un champ de fusion dans un document Word ouvert ?
- Comment insérer une image dans une cellule d'un tableau d'un document Word ?
- Comment ajouter une colonne dans un tableau d'un document Word ?
- Comment créer et remplir un tableau ?
- Comment gère-t-on la mise en forme d'un tableau ?
- Comment importer les données provenant de plusieurs tableaux Word ?
- Comment connaître le nombre de lignes et de colonnes de mon tableau ?
- Comment ajouter un espace au-dessus d'un tableau lorsque ce dernier est le premier objet du document ?
- Comment accéder à des tableaux imbriqués les uns dans les autres ?
- Comment connaître l'index d'un tableau contenant la sélection ?
- Comment déterminer si la sélection se trouve dans une table ?
- Comment connaître l'index d'une cellule contenant la sélection ?
Nécessite d'activer la référence "Microsoft Word xx.x Object Library" :
Dim
WordApp As
Word.Application
Dim
WordDoc As
Word.Document
Set
WordApp =
CreateObject
(
"word.application"
) 'Word Session
Set
WordDoc =
WordApp.Documents.Open
(
"monDocument.doc"
) 'Ouverture Document Word
WordApp.Visible
=
True
'fusionner les Cells(2,3) à Cells(3,5) dans le premier tableau du document Word
WordDoc.Tables
(
1
).Cell
(
Row:=
2
, Column:=
3
).Merge
_
mergeTo:=
wordDoc.Tables
(
1
).Cell
(
Row:=
3
, Column:=
5
)
Nécessite d'activer la référence "Microsoft Word xx.x Object Library" :
Dim
WordApp As
Word.Application
Dim
WordDoc As
Word.Document
Set
WordApp =
CreateObject
(
"word.application"
)
WordApp.Visible
=
False
'Word reste masqué pendant l'opération
Set
WordDoc =
WordApp.Documents.Open
(
"monDocument.doc"
) 'ouvre le document Word
'copies la 3eme ligne de la 1ere table Word
WordDoc.Tables
(
1
).Rows
(
3
).Range.Copy
'collage dans Excel
Range
(
"A1"
).PasteSpecial
xlPasteValues
WordDoc.Close
'fermeture document Word
WordApp.Quit
'fermeture session Word
Nécessite d'activer la référence "Microsoft Word xx.x Object Library" :
Dim
WordApp As
Word.Application
Dim
WordDoc As
Word.Document
Set
WordApp =
CreateObject
(
"word.application"
)
WordApp.Visible
=
True
'mettre False pour garder Word masqué
Set
WordDoc =
WordApp.Documents.Open
(
"monDocument.doc"
) 'ouvre le document Word
'Tables(2) correspond au 2eme tableu du document Word
'transfert la donnée de la cellule A1 dans la 3eme cellule de la 1ere colonne
WordDoc.Tables
(
2
).Columns
(
1
).Cells
(
3
).Range.Text
=
Range
(
"A1"
)
'transfert la donnée de la cellule A2 dans la 2eme cellule de la 3eme colonne
WordDoc.Tables
(
2
).Columns
(
3
).Cells
(
2
).Range.Text
=
Range
(
"A2"
)
'WordDoc.Close True 'ferme le document Word en enregistrant les modifications
'WordApp.Quit 'ferme l'application Word
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
Nécessite d'activer la référence "Microsoft Word xx.x Object Library".
'Chr(13) & Chr(7)sont des caractères qui apparaissent par défaut dans les cellules lors de la création du tableau
If
WordDoc.Tables
(
1
).Columns
(
1
).Cells
(
1
).Range.Text
=
Chr
(
13
) &
amp;a Chr
(
7
) Then
MsgBox
"Cellule vide"
Else
MsgBox
"Cellule non vide"
End
If
Vous pouvez aussi vous baser sur l'objet Range :
If
(
ActiveDocument.Tables
(
1
).Cell
(
1
, 1
).Range.End
-
ActiveDocument.Tables
(
1
).Cell
(
1
, 1
).Range.Start
>
1
) Then
MsgBox
"Non Vide"
Else
MsgBox
"Vide"
End
If
Nécessite d'activer la référence "Microsoft Word xx.x Object Library" :
Les retours à la ligne dans les cellules d'un tableau Word génèrent autant de cellules supplémentaires lors du collage dans Excel. Pour y remédier, cet exemple montre comment importer le premier tableau d'un document Word "C:\monFichier.doc" (déjà ouvert), en conservant le format des cellules :
Dim
WordDoc As
Object
Dim
i As
Integer
, j As
Integer
Dim
Cible As
Variant
Set
WordDoc =
GetObject
(
"C:\monFichier.doc"
)
For
i =
1
To
WordDoc.Tables
(
1
).Rows.Count
For
j =
1
To
WordDoc.Tables
(
1
).Columns.Count
Cible =
WordDoc.Tables
(
1
).Columns
(
j).Cells
(
i)
Sheets
(
1
).Cells
(
i, j) =
_
Application.WorksheetFunction.Substitute
(
Cible, vbCr
, vbLf
)
Sheets
(
1
).Cells
(
i, j) =
_
Left
(
Sheets
(
1
).Cells
(
i, j), Len
(
Sheets
(
1
).Cells
(
i, j)) -
1
)
Next
j
Next
i
Nécessite d'activer la référence "Microsoft Word xx.x Object Library"
Dim
WordApp As
Word.Application
Dim
WordDoc As
Word.Document
Set
WordApp =
New
Word.Application
WordApp.Visible
=
True
Set
WordDoc =
WordApp.Documents.Add
Range
(
"A1:H10"
).Copy
WordApp.Selection.Paste
WordDoc.Tables
(
1
).AutoFitBehavior
wdAutoFitWindow
Application.CutCopyMode
=
False
Nécessite d'activer la référence "Microsoft Word xx.x Object Library"
Le document Word doit être ouvert :
Dim
WordApp As
Word.Application
Dim
WordDoc As
Word.Document
On
Error
Resume
Next
Set
WordApp =
GetObject
(
, "Word.Application"
)
Set
WordDoc =
WordApp.Documents
(
"monDocument.doc"
)
If
WordDoc Is
Nothing
Then
MsgBox
"Le document est fermé"
Else
MsgBox
WordDoc.MailMerge.DataSource.DataFields
(
"Nom_Champ"
).Value
End
If
Nécessite d'activer la référence "Microsoft Word xx.x Object Library" :
L'exemple ci-dessous insère une image dans la 3e cellule de la 2e colonne du 1er tableau d'un document Word.
Dim
WordApp As
Word.Application
Dim
WordDoc As
Word.Document
Set
WordApp =
CreateObject
(
"word.application"
) 'ouvrir une session Word
Set
WordDoc =
WordApp.Documents.Open
(
"monDocument.doc"
) 'ouvrir un document
'insérer une image dans la 3eme Cellule de la 2eme colonne (dans le
'1er tableau d'un document Word )
WordDoc.Tables
(
1
).Columns
(
2
).Cells
(
3
).Range.InlineShapes.AddPicture
_
Filename:=
"C:\image1.wmf"
, linkToFile:=
False
, saveWithDocument:=
True
With
WordDoc.InlineShapes
(
WordDoc.InlineShapes.Count
)
.Height
=
150
'redimensionne hauteur image
.Width
=
150
'redimensionne largeur image
End
With
WordApp.Visible
=
True
'affichier le document Word
Nécessite d'activer la référence "Microsoft Word xx.x Object Library" :
L'exemple ci-dessous insère une nouvelle colonne en 3eme position dans le 2e tableau d'un document Word.
La première cellule de cette nouvelle colonne est coloriée en bleu et un texte y est inséré.
Dim
WordApp As
Word.Application
Dim
WordDoc As
Word.Document
'le document Word est supposé fermé avant le lancement de la macro
Set
WordApp =
CreateObject
(
"Word.Application"
) 'creation session Word
WordApp.Visible
=
False
'pour que word reste masqué pendant l'opération
Set
WordDoc =
WordApp.Documents.Open
(
"monDocument.doc"
) 'ouverture du fichier Word
'insertion d'une colonne en 3eme position dans le 2eme tableau du document Word
'colorie en bleu la 1ere cellule dans la colonne insérée
With
WordDoc.Tables
(
2
)
.Columns.Add
BeforeColumn:=
WordDoc.Tables
(
2
).Columns
(
3
)
.Columns
(
3
).Cells
(
1
).Shading.BackgroundPatternColorIndex
=
wdBlue 'fond de cellule en bleu
.Columns
(
3
).Cells
(
1
).Range.Text
=
"le forum dvp.com"
'texte dans la cellule
.AutoFitBehavior
wdAutoFitWindow ' adapte la dimension du tableau à la feuille
End
With
WordDoc.Close
True
'ferme le document Word en sauvegardant les modifications
WordApp.Quit
'ferme l'application Word
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"
&
amp;amp;amp;amp; 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.
Comment faire une table de multiplication.
Sub
TableMult
(
)
Dim
oTbl As
Table
Dim
iC As
Integer
Dim
iL As
Integer
Set
oTbl =
ActiveDocument.Tables.Add
(
Range:=
Selection.Range
, NumRows:=
10
, numcolumns:=
10
)
For
iC =
1
To
10
For
iL =
1
To
10
oTbl.Cell
(
iL, iC).Range.Text
=
iC *
iL
Next
iL
Next
iC
With
oTbl
.Borders.Enable
=
True
.Borders
(
wdBorderBottom).LineWidth
=
wdLineWidth050pt
.Borders
(
wdBorderLeft).LineWidth
=
wdLineWidth050pt
.Borders
(
wdBorderRight).LineWidth
=
wdLineWidth050pt
.Borders
(
wdBorderTop).LineWidth
=
wdLineWidth050pt
End
With
End
Sub
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é.
Nécessite d'activer la référence "Microsoft Word xx.x Object Library" :
Dim
WordApp As
Word.Application
Dim
WordDoc As
Word.Document
Dim
i As
Byte, j As
Byte
Set
WordApp =
CreateObject
(
"word.application"
)
wWrdApp.Visible
=
False
Set
WordDoc =
WordApp.Documents.Open
(
"monFichier.doc"
)
'dans 3 tables Word du document , importer 5 valeurs de la premiere colonne
'importer les données de chaque table dans une feuille différente
For
i =
1
To
3
For
j =
1
To
5
ActiveWorkbook.Sheets
(
i).Cells
(
j, 1
) =
WordDoc.Tables
(
i).Columns
(
1
).Cells
(
j)
Next
j
Next
i
WordDoc.Close
WordApp.Quit
ActiveDocument.Tables
(
1
).Columns.Count
Pour obtenir le nombre de colonnes d'un tableau
ActiveDocument.Tables
(
1
).Rows.Count
Pour obtenir le nombre de lignes
Le principe est assez simple, on selectionne la première ligne du tableau et on coupe la table en deux, ce qui produit une ligne de texte vide au dessus du tableau.
Sub
AjouterLigne
(
)
ActiveDocument.Tables
(
1
).Rows
(
1
).Range.Select
Selection.SplitTable
End
Sub
Word offre la possibilité d'imbriquer les tableaux les uns dans les autres. Pour atteindre un tableau imbriqué, il suffit de faire appel à la propriété Table d'une Table.
ActiveDocument.Tables
(
4
).Tables.Count
En Word, les tables sont acessibles par leur index. Malheuruesement, il n'est pas possible de connaître l'index d'une table où se trouve la sélection.
Il est cependant possible de ruser avec Word pour connaître l'index d'une table contenant la sélection. Il suffit d'étendre la sélection jusqu'au début du document et
de compter les tables qui s'y trouvent
Dim
intT As
Integer
Selection.HomeKey
Unit:=
wdStory, Extend:=
True
intT =
Selection.Tables.Count
Debug.Print
intT
intT contient le nombre de tables contenues dans la sélection, c'est notre index.
Vous pouvez déterminer si la sélection se trouve dans une table avec cette propriété :
Selection.Information
(
wdWithInTable)
Pour récupérer l'index d'une cellule contenant la sélection (position du curseur), vous devez passer par la propriété Information de l'objet Selection.
Pour récupérer l'index de la colonne :
Selection.Information
(
wdEndOfRangeColumnNumber)
Pour récupérer l'index de la ligne :
Selection.Information
(
wdEndOfRangeRowNumber)
La combinaison des deux vous donne les coordonnées de la cellule.
Lien : Comment déterminer si la sélection se trouve dans une table ?
Lien : Comment connaître l'index d'un tableau contenant la sélection ?