FAQ WordConsultez toutes les FAQ

Nombre d'auteurs : 20, nombre de questions : 289, dernière mise à jour : 30 mars 2017 

 
OuvrirSommaireTableauxTableaux VBA

Nécessite d'activer la référence "Microsoft Word xx.x Object Library" :

vba
Sélectionnez

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)
Créé le 22 octobre 2006  par SilkyRoad

Nécessite d'activer la référence "Microsoft Word xx.x Object Library" :

vba
Sélectionnez

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
Créé le 22 octobre 2006  par SilkyRoad

Nécessite d'activer la référence "Microsoft Word xx.x Object Library" :

 
Sélectionnez

 
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
 
Créé le 22 octobre 2006  par SilkyRoad

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.

 
Sélectionnez

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
Créé le 5 février 2004  par bidou

Nécessite d'activer la référence "Microsoft Word xx.x Object Library".

 
Sélectionnez

    '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 If

Vous pouvez aussi vous baser sur l'objet Range :

 
Sélectionnez

    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
Mis à jour le 30 janvier 2008  par SilkyRoad, Sepia

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 :

vba
Sélectionnez

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
Créé le 22 octobre 2006  par SilkyRoad

Nécessite d'activer la référence "Microsoft Word xx.x Object Library"

 
Sélectionnez

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
Créé le 22 octobre 2006  par SilkyRoad

Nécessite d'activer la référence "Microsoft Word xx.x Object Library"
Le document Word doit être ouvert :

 
Sélectionnez

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
Créé le 22 octobre 2006  par SilkyRoad

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.

vba
Sélectionnez

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
Créé le 22 octobre 2006  par SilkyRoad

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é.

vba
Sélectionnez

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
Créé le 22 octobre 2006  par SilkyRoad

Utiliser une variable objet Table.

 
Sélectionnez
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.

Comment faire une table de multiplication.

 
Sélectionnez

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
Mis à jour le 20 janvier 2008  par bidou, Lebeau Olivier

Deux possibilités. On applique un format prédéfini

 
Sélectionnez
objTable.AutoFormat wdTableFormatGrid8

On gére soit même

 
Sélectionnez
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é.

Créé le 5 février 2004  par bidou

Nécessite d'activer la référence "Microsoft Word xx.x Object Library" :

vba
Sélectionnez

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
Créé le 22 octobre 2006  par SilkyRoad
 
Sélectionnez

ActiveDocument.Tables(1).Columns.Count

Pour obtenir le nombre de colonnes d'un tableau

 
Sélectionnez

ActiveDocument.Tables(1).Rows.Count

Pour obtenir le nombre de lignes

Créé le 1er août 2007  par Lebeau Olivier

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.

 
Sélectionnez

Sub AjouterLigne()
ActiveDocument.Tables(1).Rows(1).Range.Select
Selection.SplitTable
 
End Sub
Créé le 7 décembre 2007  par Sepia

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.

 
Sélectionnez

ActiveDocument.Tables(4).Tables.Count
Créé le 1er juin 2009  par Sepia

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

 
Sélectionnez

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.

Créé le 10 janvier 2010  par Lebeau Olivier

Vous pouvez déterminer si la sélection se trouve dans une table avec cette propriété :

 
Sélectionnez

Selection.Information(wdWithInTable)
Créé le 10 janvier 2010  par Sepia

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 :

 
Sélectionnez

Selection.Information(wdEndOfRangeColumnNumber)

Pour récupérer l'index de la ligne :

 
Sélectionnez

Selection.Information(wdEndOfRangeRowNumber)

La combinaison des deux vous donne les coordonnées de la cellule.

Créé le 12 février 2011  par Lebeau Olivier

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 ?

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2013 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.