FAQ Word
FAQ WordConsultez toutes les FAQ
Nombre d'auteurs : 20, nombre de questions : 289, dernière mise à jour : 15 juin 2021
- Comment obtenir dans un nouveau document la liste de tous les signets d'un document ?
- Comment récupérer le code et la valeur des champs de mon document ?
- Comment écrire/lire des données dans un champ personnalisé Word ?
- Comment insérer une table des matières ?
- Comment insérer un signet qui ne contient pas de texte ?
- Pourquoi mon signet est il détruit lorsque je modifie son texte ?
- Comment exporter des données Excel vers plusieurs signets d'un document Word ?
- Comment ajouter un lien hypertext à mon document ?
- Comment faire pour imprimer sur une nouvelle page, la liste de toutes les adresses hyperliens associées à leur affichage ?
La macro suivante va parcourir les signets (Bookmark) d'un document et les inscrire dans un nouveau document.
Public
Sub
listbookmark
(
)
Dim
stTableau As
String
Dim
bm As
Bookmark
For
Each
bm In
ActiveDocument.Bookmarks
stTableau =
stTableau &
amp; vbCrLf
&
amp; bm.Name
Debug.Print
stTableau
Next
bm
Application.Documents.Add
Selection.TypeText
stTableau
End
Sub
La macro ci-dessous vous permet de récupérer le code et la valeur des champs de votre document et de l'insérer dans un nouveau document
Public
Sub
listchamps
(
)
Dim
stTableau As
String
Dim
ch As
Field
For
Each
ch In
ActiveDocument.Fields
stTableau =
stTableau &
amp; vbCrLf
&
amp; ch.Code
&
amp; " - "
&
amp; ch.Result
Debug.Print
stTableau
Next
ch
Application.Documents.Add
Selection.TypeText
stTableau
End
Sub
On accède au texte d'un champ à l'aide de la propriété .Code et à son contenu avec la propriété .Result.
Lien : Les champs.
Nécessite d'activer la référence "Microsoft Word xx.x Object Library".
Ecrire un texte dans un champ personnalisé :
'Fields(1) : premier champ du document Word %%%
WordDoc.Fields
(
1
).Result.Text
=
"essai d'ecriture dans champ Word"
Lire le texte d'un champ personnalisé :
'Fields(1) : premier champ du document Word
MsgBox
WordDoc.Fields
(
1
).Result.Text
On utilise la méthode Add de la collection TableOfContents Set objDoc = Application.Documents.Open("D:\tuto.doc")
objDoc.TablesOfContents.Add
_
Range:=
objDoc.Range
(
objDoc.Paragraphs
(
2
).Range.Start
, objDoc.Paragraphs
(
2
).Range.Start
), _
UseHeadingStyles:=
True
, _
LowerHeadingLevel:=
4
, _
UpperHeadingLevel:=
1
Faite très attention à ne pas sélectionner de texte car celui-ci serait écrasé.
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
With
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)
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"
&
amp; 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
On utilise la méthode Add de la collection Hyperlinks
Dim
objDoc As
Document
Set
objDoc =
Application.Documents.Open
(
"D:\tuto.doc"
)
objDoc.Hyperlinks.Add
objDoc.Paragraphs
(
1
).Range.Words
(
objDoc.Paragraphs
(
1
).Range.Words.Count
), "d:\pilo.doc"
Le code qui suit vous permet d'afficher et d'imprimer la liste des hyperliens contenus dans un document avec leur adresse.
Public
Sub
listehyperliens
(
)
Dim
stTableau As
String
Dim
ch As
Field
For
Each
ch In
ActiveDocument.Fields
If
ch.Type
=
wdFieldHyperlink Then
stTableau =
stTableau &
amp; vbCrLf
&
amp; ch.Result
&
amp; " - "
&
amp; ch.Code
Debug.Print
stTableau
End
If
Next
ch
ActiveDocument.Content.InsertBreak
Type
:=
wdPageBreak
Selection.InsertParagraph
Selection.TypeText
stTableau
End
Sub