FAQ VBA
FAQ VBAConsultez toutes les FAQ
Nombre d'auteurs : 10, nombre de questions : 133, dernière mise à jour : 15 juin 2021
- Comment créer un nouveau document Word ?
- Comment ouvrir un document Word existant ?
- Comment piloter un document Word déjà ouvert ?
- Comment modifier les marges d'un document Word ?
- Comment modifier l'entête et/ou le pied de page d'un document Word ?
- Comment accéder aux paragraphes d'un document Word ?
- Comment vérifier si la premiere cellule d'un tableau est "vide" ?
- Comment fusionner des cellules dans un document Word ?
- Comment importer la totalité d'un document Word dans une feuille Excel ?
- Comment importer un tableau Word en intégrant les retours à la ligne ?
- Comment importer les données provenant de plusieurs tableaux Word ?
- Comment copier une ligne precise d'un tableau Word et la coller dans Excel ?
- Comment exporter un tableau Excel vers Word et l'adapter à la largeur de la page ?
- Comment exporter des donneés Excel dans des cellules précises d'un tableau Word ?
- Comment exporter des données Excel vers plusieurs signets d'un document Word ?
- Comment inserer la date du jour dans un signet Word ?
- Comment insérer, redimensionner et positionner une image dans un document Word existant ?
- Comment coller dans Word une selection de cellules au format image Bitmap ?
- Comment ajouter une colonne dans un tableau d'un document Word ?
- Comment insérer une image dans une cellule d'un tableau d'un document Word ?
- Comment récupérer la donnée d'un champ de fusion dans un document Word ouvert ?
- Comment éxecuter une macro d'un document Word ?
- Comment vérifier si la premiere cellule d'un tableau est "vide" ?
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"
) '-- ouvre une session Word
WordApp.Visible
=
True
Set
WordDoc =
WordApp.Documents.Add
'-- crée un nouveau document
WordDoc.SaveAs
"C:\monDocument.doc"
'-- enregistre le nouveau doc
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
Set
WordDoc =
WordApp.Documents.Open
(
"monDocument.doc"
, ReadOnly:=
True
)
Nécessite d'activer la référence "Microsoft Word xx.x Object Library".
Pour piloter un document Word déjà ouvert , utilisez la fonction getObject :
Dim
WordDoc As
Word.Document
Set
WordDoc =
GetObject
(
"monDocument.doc"
)
MsgBox
WordDoc.Paragraphs.Count
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"
)
Set
WordDoc =
WordApp.Documents.Add
WordApp.Visible
=
True
With
WordDoc.PageSetup
.LeftMargin
=
CentimetersToPoints
(
1
)
.RightMargin
=
CentimetersToPoints
(
1
)
.TopMargin
=
CentimetersToPoints
(
1
.5
)
.BottomMargin
=
CentimetersToPoints
(
2
)
End
With
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
Set
WordDoc =
WordApp.Documents.Open
(
"monDocument.doc"
) 'adapter le chemin
With
WordDoc.Sections
(
1
)
.Headers
(
wdHeaderFooterPrimary).Range.Text
=
"Le titre"
.Headers
(
wdHeaderFooterPrimary).Range.Paragraphs.Alignment
=
wdAlignParagraphCenter
.Footers
(
wdHeaderFooterPrimary).PageNumbers.Add
End
With
Nécessite d'activer la référence "Microsoft Word xx.x Object Library" :
L'exemple ci-dessous montre comment boucler sur les paragraphes d'un document Word et les supprimer s'ils débutent par le mot "Test"
Dim
WordApp As
Word.Application
Dim
WordDoc As
Word.Document
Dim
Cible As
Paragraph
Set
WordApp =
New
Word.Application
WordApp.Visible
=
True
Set
WordDoc =
WordApp.Documents.Open
(
ThisWorkbook.Path
&
"\Doc1.doc"
)
WordDoc.Bookmarks
(
"\StartOfDoc"
).Select
For
Each
Cible In
WordDoc.Paragraphs
Cible.Range.Select
If
Trim
(
Cible.Range.Words
(
1
)) =
"Test"
Then
Cible.Range.Delete
Next
Cible
Un autre exemple qui supprime les paragraphes de façon conditionnelle :
'boucle sur les 3 premiers paragraphes du document Word :
'si la cellule A1<>1 alors suppression du paragraphe 1
'si la cellule A2<>1 alors suppression du paragraphe 2
'si la cellule A3<>1 alors suppression du paragraphe 3
Dim
WordApp As
Word.Application
Dim
WordDoc As
Word.Document
Dim
i As
Integer
Set
WordApp =
CreateObject
(
"Word.Application"
)
WordApp.Visible
=
True
Set
WordDoc =
WordApp.Documents.Open
(
"C:\monDocument.doc"
)
For
i =
3
To
1
Step
-
1
If
Cells
(
i, 1
) <>
1
Then
_
WordDoc.Paragraphs.Item
(
i).Range.Delete
Next
i
Nécessite d'activer la référence "Microsoft Word xx.x Object Library".
'Chr(13) & Chr(7)sont des caracteres qui apparaissent par defaut dans les cellules lors de la creation du tableau
If
WordDoc.Tables
(
1
).Columns
(
1
).Cells
(
1
).Range.Text
=
Chr
(
13
) &
Chr
(
7
) Then
MsgBox
"Cellule vide"
Else
MsgBox
"Cellule non vide"
End
If
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
WordDoc As
Word.Document
Dim
WordApp As
Word.Application
Dim
Wb As
Workbook
Set
Wb =
Workbooks.Add
(
1
)
Set
WordApp =
New
Word.Application
WordApp.Visible
=
False
Set
WordDoc =
WordApp.Documents.Open
(
"monDocument.doc"
, ReadOnly:=
True
)
With
WordApp
.Selection.WholeStory
.Selection.Copy
End
With
Wb.ActiveSheet.Range
(
"A1"
).Select
Wb.ActiveSheet.Paste
WordApp.Application.Quit
Application.CutCopyMode
=
False
Wb.SaveAs
"C:\copieDocument.xls"
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éja 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
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
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éraion
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 =
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" :
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
Nécessite d'activer la référence "Microsoft Word xx.x Object Library" :
L'exemple ci-dessous permet d'exporter les valeurs des cellules A1 à A3 vers des signets d'un document Word nommé "monfichier.doc"
Les signets positionnés aux endroits de votre choix doivent être nommés "Signet1 , Signet2 et Signet3
Dim
WordApp As
Word.Application
Dim
WordDoc As
Word.Document
Dim
i As
Byte
Set
WordApp =
CreateObject
(
"word.application"
) 'ouvre une session Word
Set
WordDoc =
WordApp.Documents.Open
(
"monDocument.doc"
) 'ouvre le document Word
WordApp.Visible
=
False
'Word est masqué pendant l'opération
For
i =
1
To
3
'les signets du document Word sont nommés Signet1 , Signet2 , Signet3
WordDoc.Bookmarks
(
"Signet"
&
i).Range.Text
=
Cells
(
i, 1
)
Next
i
WordApp.Visible
=
True
'affiche le document Word
'WordDoc.PrintOut 'Pour imprimer le doc obtenu
'WordDoc.Close True 'ferme le document word en sauvegardant les données
'WordApp.Quit 'ferme la session Word
Nécessite d'activer la référence "Microsoft Word xx.x Object Library" :
Dans l'exemple ci-dessous le signet à renseigner doit être nommé "SignetDate"
Dim
WordApp As
Word.Application
Dim
WordDoc As
Word.document
Set
WordApp =
New
Word.Application
WordApp.Visible
=
True
Set
WordDoc =
WordApp.Documents.Open
(
"monDocument.doc"
)
WordDoc.Bookmarks
(
"SignetDate"
).Range.Text
=
Format
(
Now
, "dd/mm/yyyy"
)
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
Fichier As
String
On
Error
Resume
Next
Set
WordApp =
CreateObject
(
"Word.Application"
)
WordApp.Visible
=
True
Set
WordDoc =
WordApp.Documents.Open
(
"monDocument.doc"
) 'ouvrir le document Word
WordDoc.InlineShapes.AddPicture
Filename:=
_
"C:\Image1.JPG"
'adapter le chemin de l'image à insérer
On
Error
GoTo
0
With
WordDoc.InlineShapes
(
1
) 'adapter l'index si d'autres images existantes dans le document
.Height
=
190
.75
'changement dimension image insérée : hauteur
.Width
=
254
# 'largeur
.ConvertToShape
End
With
With
WordDoc.Shapes
(
1
)
.Top
=
200
'position verticale de l'image dans le document
.Left
=
150
'position horizontale de l'image dans le document
.ZOrder
msoBringInFrontOfText 'image au premier plan devant le texte
'.ZOrder msoSendBehindText 'option pour image en arriere plan derriere le texte
End
With
'WordDoc.Close 'fermer le document Word
'WordApp.Quit 'fermer l'application Word
Nécessite d'activer la référence "Microsoft Word xx.x Object Library" :
Dim
WordApp As
Word.Application
Selection.Copy
Set
WordApp =
CreateObject
(
"Word.Application"
)
On
Error
Resume
Next
WordApp.Documents.Add
WordApp.Visible
=
True
WordApp.Selection.PasteSpecial
DataType:=
wdPasteBitmap
Application.CutCopyMode
=
False
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 premiere 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
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"
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".
Dim
WordApp As
Word.Application
Set
WordApp =
CreateObject
(
"Word.Application"
)
WordApp.Visible
=
True
WordApp.Documents.Open
(
"C:\monDocument.dot"
)
WordApp.Run
"laMacro"