FAQ Word

FAQ WordConsultez toutes les FAQ
Nombre d'auteurs : 20, nombre de questions : 289, dernière mise à jour : 15 juin 2021
Sommaire→Tableaux→Tableaux VBA- 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 WordNé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 WordLa 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 IfNé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) &a Chr(7) Then
MsgBox "Cellule vide"
Else
MsgBox "Cellule non vide"
End IfVous 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 IfNé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 iNé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 IfNé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 WordNé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 WordUtiliser 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.
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 SubDeux 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é.
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.QuitActiveDocument.Tables(1).Columns.CountPour obtenir le nombre de colonnes d'un tableau
ActiveDocument.Tables(1).Rows.CountPour 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 SubWord 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 intTintT 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 ?



