FAQ VBA
FAQ VBAConsultez toutes les FAQ
Nombre d'auteurs : 10, nombre de questions : 133, dernière mise à jour : 15 juin 2021
- Comment ouvrir un document ?
- Peut on récupérer les propriétés du document (auteur, titre) ?
- Peut-on générer les statistiques par le code ?
- Je ne trouve pas la propriété visible d'un document Word 97 ?
- Comment fonctionnent les protections Word ?
- Comment mettre en page le document ?
- Comment insérer une table des matières ?
- Comment créer et mettre en forme un en-tête ?
- Comment ajouter un lien hypertext à mon document ?
- Que représente la collection Sentences ?
- 4.2.1. Sélection et Range
(8)
- Comment sélectionne-t-on avec VBA Word
- Pourquoi ai-je toujours un texte selectionné ?
- Pourquoi je n'arrive pas à sélectionner le dernier mot de mon paragraphe ?
- Comment faire une recherche avec Range qui modifie le format du mot cherché ?
- Comment faire un remplacement de toutes les occurences d'un mot ?
- Pourquoi travailler avec l'objet Range et l'objet Selection ?
- Comment insérer et modifier une image ?
- Lorsque je change le texte de mon paragraphe la mise en page change ?
- 4.2.2. Tableau et signets
(6)
- Pourquoi mon signet est il détruit lorsque je modifie son texte ?
- Comment insérer un signet qui ne contient pas de texte ?
- Comment créer et remplir un tableau ?
- Comment gère-t-on la mise en forme d'un tableau ?
- Comment scinder un tableau qui fait plus de 10 lignes en dupliquant les titres ?
- Comment atteindre une plage comprise entre deux signets ?
Trois méthodes sont utilisables Ouvrir un document existant
Set
objDoc =
Application.Documents.Open
(
"c:\tutoriel\tuto.doc"
)
Ouvrir un nouveau document (basé sur le modèle normal)
Set
objDoc =
Application.Documents.Add
Ouvrir un document basé sur un autre modèle
Set
objDoc =
Application.Documents.Add
(
Template:=
"C:\Program Files\Microsoft Office\Templates\Memos\Professional Memo.dot"
)
On peut accéder aux propriétés par la collection BuiltInDocumentProperties de l'objet document
Dim
objDoc As
Word.Document
, msg As
String
Set
objDoc =
Application.Documents.Open
(
"d:\tuto.doc"
)
msg =
"Titre : "
&
objDoc.BuiltInDocumentProperties
(
wdPropertyTitle) &
vbCrLf
msg =
msg &
"Auteur : "
&
objDoc.BuiltInDocumentProperties
(
wdPropertyAuthor) &
vbCrLf
msg =
msg &
"Commentaire : "
&
objDoc.BuiltInDocumentProperties
(
wdPropertyComments) &
vbCrLf
MsgBox
msgDim objDoc As
Word.Document
, msg As
String
Set
objDoc =
Application.Documents.Open
(
"d:\tuto.doc"
)
msg =
"Titre : "
&
objDoc.BuiltInDocumentProperties
(
wdPropertyTitle) &
vbCrLf
msg =
msg &
"Auteur : "
&
objDoc.BuiltInDocumentProperties
(
wdPropertyAuthor) &
vbCrLf
msg =
msg &
"Commentaire : "
&
objDoc.BuiltInDocumentProperties
(
wdPropertyComments) &
vbCrLf
MsgBox
msg
Oui, il faut par contre demander le calcul pour une statistique
Dim
objDoc As
Word.Document
, msg As
String
Set
objDoc =
Application.Documents.Open
(
"d:\tuto.doc"
)
MsgBox
"Le documents contient "
&
objDoc.ComputeStatistics
(
wdStatisticPages) &
" pages et "
&
objDoc.ComputeStatistics
(
wdStatisticWords) &
" mots"
Vous pouvez obtenir les statistiques pour
- wdStatisticCharacters : nombre de caractères
- wdStatisticCharactersWithSpaces : nombre de caractères avec les espaces
- wdStatisticLines : nombre de lignes
- wdStatisticPages : nombre de pages
- wdStatisticParagraphs : nombre de paragraphes (retour chariot)
- wdStatisticWords : nombre de mots
C'est normal, elle n'existe pas. Pour gérer un document invisible dans word 97, on utilise :
Set
objDoc =
GetObject
(
"d:\user\tuto.doc"
)
Elles sont de plusieurs sortes. Mot de passe d'accès
objDoc.Password
=
"passe"
Ce code doit être passé dans la méthode open pour ouvrir le document par le code. Protection spécifique
ActiveDocument.Protect
Password:=
"monpasse"
, NoReset:=
False
, Type
:=
wdAllowOnlyComments
Dans ce cas, seuls les commentaires sont autorisés. Pour ôter la protection, utiliser le type wdNoProtection ou la méthode UnProtect
On utilise pour cela l'objet PageSetup de document. Par exemple
With
ActiveDocument.PageSetup
.Orientation
=
wdOrientLandscape
.FirstPageTray
=
wdPrinterDefaultBin
.OtherPagesTray
=
wdPrinterDefaultBin
.SectionStart
=
wdSectionNewPage
.OddAndEvenPagesHeaderFooter
=
True
.DifferentFirstPageHeaderFooter
=
True
.VerticalAlignment
=
wdAlignVerticalTop
.SuppressEndnotes
=
False
.MirrorMargins
=
True
End
With
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é.
Le code suivant crée l'en-tête, centre le texte et le met en gras
ActiveDocument.Sections
(
1
).Headers
(
wdHeaderFooterPrimary).Range.Text
=
"En-tête"
With
ActiveDocument.StoryRanges
(
wdPrimaryHeaderStory)
.Bold
=
True
.ParagraphFormat.Alignment
=
wdAlignParagraphCenter
End
With
On utlilise 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"
Sentences est une collection renvoyant les "phrases" de son conteneur (document, paragraphe ...). Par phrase on entend tout ce qui est compris entre des points et/ou des retours chariots.
Notez que c'est donc différent des lignes word
Dim
objDoc As
Document, Phrase As
Range
Set
objDoc =
Application.Documents.Open
(
"D:\tuto.doc"
)
MsgBox
objDoc.Sentences.Count
&
vbCrLf
&
objDoc.BuiltInDocumentProperties
(
wdPropertyLines)
For
Each
Phrase In
objDoc.Sentences
Phrase.Select
MsgBox
"suite"
Next