Aller plus loin avec Word

Olivier Lebeau

Word n'est pas qu'une machine à Ecrire. Comment aller plus loin avec votre éditeur de texte.

- Titre : Aller plus loin avec Word

- Auteur : Olivier Lebeau

- Parution : 1 décembre 2007

- Licence : Copyright ® 2007 Olivier Lebeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- 1. Introduction

- 1-A. Macro et Code

- 1-B. Comment accéder ou écire du code

- 2. L'objet Application

- 2-A. Évènements, Méthodes et Propriétés

- 2-A-1. Les Propriétés

- 2-A-1-a. ActiveDocument

- 2-A-1-b. ActivePrinter

- 2-A-1-c. ActiveWindow

- 2-A-1-d. AddIns

- 2-A-1-e. Assistant

- 2-A-1-f. Autocaptions

- 2-A-1-g. AutoCorrect

- 2-A-1-h. BrowseExtraFileTypes

- 2-A-1-i. Browser

- 2-A-1-j. Build

- 2-A-1-k. CapsLock

- 2-A-1-l. Caption

- 2-A-1-m. CommandBars

- 2-A-1-n. DefaultSaveFormat

- 2-A-1-o. Dialogs

- 2-A-1-p. DisplayAutoCompleteTips

- 2-A-1-q. Documents

- 2-A-1-r. FilesConverters

- 2-A-1-s. FileDialog

- 2-A-1-t. Options

- 2-A-1-u. PrintPreview

- 2-A-1-v. ScreenUpdating

- 2-A-1-w. Selection

- 2-A-1-x. System

- 2-A-1-y. Templates

- 2-A-2. Les Méthodes

- 2-A-2-a. ChangeFileOpenDirectory

- 2-A-2-b. CleanString

- 2-A-2-c. CompareDocuments

- 2-A-2-d. GoBack et GoForward

- 2-A-2-e. MergeDocuments

- 2-A-2-f. NewWindow

- 2-A-2-g. OnTime

- 2-A-2-h. Quit

- 2-A-2-i. Repeat

- 2-A-2-j. ResetIgnoreAll

- 2-A-2-k. ScreenRefresh

- 2-A-2-l. ShowClipboard

- 2-A-3. Les Évènements

- 2-A-3-a. DocumentBeforeClose

- 2-A-3-b. DocumentBeforePrint

- 2-A-3-c. DocumentBeforeSave

- 2-A-3-d. DocumentChange

- 2-A-3-e. DocumentOpen

- 2-A-3-f. DocumentSync

- 2-A-3-g. Serie d'évènement MailMerge

- 2-A-3-h. NewDocument

- 2-A-3-i. Quit

- 2-A-3-j. WindowActivate

- 2-A-3-k. WindowBeforeDoubleClick

- 2-A-3-l. WindowBeforeRightClick

- 3. La collection "Documents"

- 3-A. L'objet Document

- 3-A-1. Prorpiétés

- 3-A-1-a. AttachedTemplate

- 3-A-1-b. Background

- 3-A-1-c. Bibliography

- 3-A-1-d. BookMarks

- 3-A-1-e. BuiltInDocumentProperties

- 3-A-1-f. Characters

- 3-A-1-g. ChildNodeSuggestions

- 3-A-1-h. Comments

- 3-A-1-i. Compatibility

- 3-A-1-j. Content

- 3-A-1-k. ContentControls

- 3-A-1-l. DefaultTabStop

- 3-A-1-m. EndNotes

- 3-A-1-n. Fields

- 3-A-1-o. FootNotes

- 3-A-1-p. FormFields

- 3-A-1-q. FormsDesign

- 3-A-1-r. Frames

- 3-A-1-s. FullName

- 3-A-1-t. HasPassword

- 3-A-1-u. Indexes

- 3-A-1-v. InLineShapes et Shapes

- 3-A-1-w. LineNumbering

- 3-A-1-x. List

- 3-A-1-y. ListEntries

- 3-A-1-z. ListFormat

- 3-A-1-aa. ListGalleries

- 3-A-1-ab. ListLevel

- 3-A-1-ac. ListParagraphs

- 3-A-1-ad. MailMerge

- 3-A-1-ae. OMath

- 3-A-1-af. PageSetup

- 3-A-1-af-i. BookFoldPrinting

- 3-A-1-af-ii. CharsLine

- 3-A-1-af-iii. DifferentFirstPageHeaderFooter

- 3-A-1-af-iv. FirstPageTray

- 3-A-1-af-v. FooterDistance et HeaderDistance

- 3-A-1-af-vi. Orientation

- 3-A-1-af-vii. TextColumns

- 3-A-1-ag. Path

- 3-A-1-ah. PrintFormsData

- 3-A-1-ai. PrintRevisions

- 3-A-1-aj. ProtectionType

- 3-A-1-ak. RemoveDateAndTime et RemovePersonalInformation

- 3-A-1-al. Saved

- 3-A-1-am. SaveFormsData

- 3-A-1-an. Sections

- 3-A-1-ao. Sentences

- 3-A-1-ap. Styles

- 3-A-1-aq. TablesOfContents (TOC)

- 3-A-1-ar. Words

- 3-A-1-as. Variables

- 3-A-2. Méthodes

- 3-A-2-a. AcceptAllRevisions

- 3-A-2-b. Activate

- 3-A-2-c. ApplyDocumentTheme

- 3-A-2-d. ApplyQuickStyleSet

- 3-A-2-e. ApplyTheme

- 3-A-2-f. CheckGrammar et CheckSpelling

- 3-A-2-g. Close

- 3-A-2-h. Compare

- 3-A-2-i. Convert

- 3-A-2-j. ConvertNumbersToText

- 3-A-2-k. CopyStylesFromTemplate

- 3-A-2-l. DataForm

- 3-A-2-m. DowngradeDocument

- 3-A-2-n. ExportAsFixedFormat

- 3-A-2-o. FitToPages

- 3-A-2-p. GoTo

- 3-A-2-q. Post

- 3-A-2-r. PresentIt

- 3-A-2-s. PrintOut

- 3-A-2-t. PrintPreview

- 3-A-2-u. Protect

- 3-A-2-v. Range

- 3-A-2-w. RemoveDocumentInformation

- 3-A-2-x. ResetFormFields

- 3-A-2-y. RunLetterWizard

- 3-A-2-z. Save

- 3-A-2-aa. SaveAs

- 3-A-2-ab. Select

- 3-A-2-ac. SendMail

- 3-A-2-ad. Undo

- 3-A-2-ae. UndoClear

- 3-A-2-af. UnProtect

- 3-A-3. Évènements

- 3-A-3-a. Close

- 3-A-3-b. New

- 3-A-3-c. Open

- 3-B. Propriétés

- 3-C. Méthodes

- 3-C-1. Add

- 3-C-2. Close

- 3-C-3. Open

- 3-C-4. Save

- 4. La collection Paragraphs

- 4-A. Propiétés

- 4-A-1. Alignment

- 4-B. Méthodes

- 4-B-1. Add

- 4-C. L'objet Paragraph

- 4-D. Propriétés

- 4-E. Méthodes

- 5. MailMerge

- 6. Tableaux

- 7. En-têtes et Pieds de page

- 8. Les Images et autres objets

- 9. L'objet Sélection

- 10. L'objet Range

- 11. Quelques Fonctions

- 11-A. Fonctions "Texte"

- 11-A-1. ASC

- 11-A-2. Chr

- 11-B. Fonctions "Numérique"

- 11-C. Fonctions Mathématique

- 11-C-1. Atn

- 11-D. Fonctions Diverses

- 11-D-1. Beep

- 11-D-2. Choose

- 11-D-3. Fonctions de conversion

- 11-E. Fonctions System

- 11-E-1. ChDir

- 12. Mise en pratique

- 12-A. Un Facturier

- 12-B. Gestion des données par formulaire

- 12-C. UserForm

- 12-D. Travail en groupe sur le même modèle

- 12-E. Gestion de courrier

- 12-E-1. Description

- 12-E-3. Les Modéles

- 12-E-3-a. Le modèle Accueil

- 12-E-4. Les données

- 13. Gestion des Erreurs

- 14. Remerciements

1 - Introduction

J'ai tiré la majeure partie de ce document dans l'aide de Microsoft Word, non pas que je veuille le substituer à l'aide, mais pour en faire un guide avec les choses qui me semblent essentielles. J'espère qu'il sera plus facile et agréable à parcourir que l'aide.

Word étant constitué d'objets et de collections d'objets, c'est autour des objets que va s'articuler ce document. Le plus important est l'objet Application.
Cet objet existe par défaut dans Word, mais il peut être appelé par toutes les applications capable d'utiliser le VBA.

Ce sont les collections de cet objet qui vont nous permettre de gérer les document, imprimer, ....

Lors de l'utilisation d'un objet, nous allons faire appel à ses propriétés, méthodes. Nous allons si c'est possible gérer les évènements, combiner méthodes et propriétés entre elles pour enrichir le code.

Dans cet article, nous allons parcourir quelques propriétés, collections, méthodes et évènement pour mieux comprendre les quelques exemples qui seront abordés.

Les bases necéssaires à la compréhension de cet article se trouvent dans les ressources que les rédacteurs de DVP mettent à votre disposition.

1-A - Macro et Code

Les Macro et le code sont la même chose, seuls les noms diffèrents. Dans ce tutoriel, nous ne parlerons pas de macro, mais de code.
Le code est stocké dans un ou plusieurs modules qui peuvent appartenir à un modèle ou à un document.

Pour exécuter une procédure dans Word, il existe plusieurs moyens :

- Un bouton dans la barre d'outils

- Un racouricis clavier

- Un bouton de commande sur le document

- Un champ associé à un code

- Via l'onglet Développeur ou Outils -> Macro suivant les versions

- Automatiquement pour certaines procédures

1-B - Comment accéder ou écire du code

Dans l'onglet développeur.

Si l'onlget développeur n'est pas visible : Bouton Office -> Options Word -> Standard -> Afficher l'onglet développeur dans le Ruban.

1. Afficher le VBE

2. Choisir la macro à utiliser

3. Enregistrer une macro

4. Arrêter ou suspendre l'enregistrement de la macro

Pour activer l'onglet développeur :

2 - L'objet Application

Le premier objet que nous allons aborder est l'objet Application. Il est le plus important, sans lui, pas de logiciel.

L'objet Application est présent par défaut pour Word, il n'est pas utile de l'appeler.

Avec référence à l'objet application

01 Sub UtiliserActiveDoc()
02     Application.ActiveDocument.Range.Select
03 End Sub

Peut également s'écrire :

Sans la référence à l'objet application

01 Sub UtiliserActiveDoc()
02     ActiveDocument.Range.Select
03 End Sub

Par contre, lors de l'utilisation de l'objet Word dans une autre application, il est impératif d'y faire appel et de référencer sa bibliothèque dans votre projet. Si vous omettez de référencer la bibliothèque, vous lèverez une erreur : "Type défini par l'utilisateur non défini"

Dans une autre application

01 Sub TestWord()
02 Dim wApp as Word.Application
03 Set wApp = CreateObject("Word.Application")
04
05 End Sub

Ou encore dès la déclaration de l'objet :

Dès sa délaration

01 Sub TestWord()
02 Dim wApp as New Word.Application
03
04
05 End Sub

Mais encore :

Avec Get Objet

01 Sub TestWord()
02 Dim wApp as Object
03 Set wApp = GetObject(,"Word.Application")
04
05 End Sub

Dans ce dernier exemple, il n'est pas nécessaire de référencer la bibliothèque de Word.

L'objet ainsi crée n'est pas visible, pour le rendre visible, vous devez le spécifier. Si c'est pour le traitement de fichiers ou de données, il n'est parfois pas utile de le rendre visible.

Avec Word Visible

01 Sub TestWord()
02 Dim wApp as New Word.Application
03 wApp.Visible = True
04
05 End Sub

Dans les exemples que nous avons vus jusqu'à présent, l'objet apllication existe même s'il n'est pas visible, il se trouve en mémoire. Il est donc impératif, lorsque nous n'avons plus besoin de l'objet, de le fermer pour libérer les ressources qu'il utilise. Le plus radical est d'utiliser la méthode "Quit", mais avec l'inconvénient que Word sera complètement fermé.

Libération des Objets

01 Sub TestWord()
02 Dim wApp as New Word.Application
03
04 wApp.Quit
05 End Sub

La ligne 04 de notre code va simplement fermer l'application.

Une autre méthode

01 Sub TestWord()
02 Dim wApp as Word.Application
03 Set wApp = GetObject(,"Word.Application")
04
05 Set wApp = Nothing
06 End Sub

La méthode ci-dessus n'est utilisable que si Word est déjà ouvert, on ne crée pas de nouvelle instance de Word, mais on utilise l'instance existante. Si aucune instance de Word n'est ouverte, vous recevez un message "Un composant ActiveX ne peut créer d'objet" La ligne 05 va libérer les objets.

2-A - Évènements, Méthodes et Propriétés

L'objet application possède des Évènements, des Méthodes et des Propriétés.
Certains Évènements sont détectés et gérés par Word. Il est à noter que chaque application Office gère les évènements de façon différente. Un évènement détecté par Access ne l sera p s nécessairement par Word.
Word possède des Propriétés qui peuvent être en lecture seule ou modifiable.
Finalement Word possède des Méthodes.
Je ne ferai pas une liste exhaustives. J'aborderai les Évènements, Méthodes et Propriétés qui me semblent les plus importantes et utiles.

2-A-1 - Les Propriétés

Nous allons parcourir quelques propriétés, mais la liste n'est en rien exhaustive.

2-A-1-a - ActiveDocument

La première propriété que nous alons aborder est la propriété ActiveDocument, en plus d'être la première par ordre alphabétique, je pense que c'est la plus importante.
Cette propriété est en lecture seule et renvoie le document actif. Si aucun document n'est actif, une erreur est renvoyée '4248'.

ActiveDocument

01 Sub TestActiveDocument()
02 Debug.Print ActiveDocument.Name
03 ActiveDocument.Range.( _
Start:=ActiveDocument.Paragraphs(2).Range.Start, _
End:=ActiveDocument.Paragraphs(4).Range.End)Select
04 End Sub

La ligne 02 du code va simplement afficher le nom du document actif dans la fenêtre Exécution , et la ligne 03 va sélectionner le range situé entre le seconde et le quatrième paragraphe du document.

Fermer le document actif

01 ActiveDocument.Close

On peut également fermer le document actif, mais la condition ReadOnly empêche l'affectation d'un document à cette propriété.

2-A-1-b - ActivePrinter

Cette propriété renvoie le nom de l'imprimante active, il provient du système d'exploitation.
Cette propriété est modifiable, elle est intéressante lorsque pour un document précis ou une tâche particulière, on est tenu de changer l'imprimante active.
L'exemple le plus courrant est l'impression d'un document en PDF.

Imprimante Active

01 Sub ImprimerPDF()
02 Dim OldPrinter As String
03 OldPrinter = Application.ActivePrinter
04 ActivePrinter = "PDF Creator"
05 ActiveDocument.PrintOut
06 DoEvents
07 ActivePrinter = OldPrinter
08 End Sub

La ligne 02 déclare la variable Texte OldPrinter, qui va servir à "Stocker" le nom de l'imprimante active.
La ligne 03 va "remplir" la variable avec le nom de l'imprimante active, ce nom pourras être réutilisé.
La ligne 04 va définir une nouvelle imprimante.
Les lignes 05 et 06 vont servir à imprimer et attendre la fin de l'impression.
La ligne 07 va utiliser la variable OldPrinter pour remettre Word dans l'état où il se trouvait. Sans cette ligne, PDF Creator resterait l'imprimante par defaut.

On pourrait envisager l'utilisation de cette méthode pour l'impression de listings sur une imprimante réseau particulière.

2-A-1-c - ActiveWindow

Cette propriété en lecture seule va renvoyer la fenêtre active, dans l'exemple, son index.
C'est intéressant lorsque les documents n'ont pas encore été suvegardés.

ActiveWindow

01 Debug.Print ActiveWindow.Index

2-A-1-d - AddIns

Addins représente la collections des compléments disponibles. Cette propriété est en lecture seule.

Addins

01 Sub TestApplication()
02 Dim oadd As AddIn
03 Debug.Print AddIns.Count
04 For Each oadd In AddIns
05     Debug.Print oadd.Name
06 Next oadd
07 End Sub

La ligne 03 va compter le nombre de compléments installés La boucle de 04 à 06 va renvoyer dans la fenêtre Exécution le nom des différents compléments intallés.

2-A-1-e - Assistant

Ce bon vieil assistant qui manque à très peu de gens. Introduit avec Office 97, cet assistant n'est plus affiché actuellement.
Personnellement, il ne me manque pas.

2-A-1-f - Autocaptions

En fançais, on traduit cette propriété par légendes automatiques.
Ce sont les légendes qui sont insérées par Word de façon automatique pour les différents objets graphiques d'un document.
Le code ci-dessous va lister les différents types de légendes diponibles dans Word.

AutoCaptions

01 Sub TestApplication()
02 Dim au As AutoCaption
03 For Each au In AutoCaptions
04     Debug.Print au.Name
05 Next au
06 End Sub

2-A-1-g - AutoCorrect

L'objet AutoCorrect contient les corrections automatiques. Cette propriété est modifiable.

AutoCorrect Count

01 Sub TestApplication()
02 Debug.Print AutoCorrect.Entries.Count
03 End Sub

Après l'exécution de ce code, j'ai été surpris du nombre de corrections automatiques contenues dans Word.
Je vous conseille de faire le test même si compter les entrées est sans grand intérêt.

Le code qui suit vous permet d'ajouter de nouvelles entrées à la liste.

AutoCorrect Ajout

Sub TestApplication()
AutoCorrect.Entries.Add Name:= "ho" , Value:= "Heureux-oli"
End Sub

Image à l'appui, la nouvelle entrée est bien présente dans la liste.

2-A-1-h - BrowseExtraFileTypes

Affectez la valeur « text/html » à cette propriété pour pouvoir ouvrir des fichiers HTML contenant des liens hypertexte dans Microsoft Word (et non dans l'explorateur Internet par défaut).
Type de données texte en lecture-écriture.

BrowseExtraFileTypes

01 Sub TestBrowseExtra()
02 Application.BrowseExtraFileTypes = "text/html"
03 End Sub

Le rendu n'est pas exceptionnel, pour ne pas dire médiocre. Mais peut avoir une certaine utilité.

2-A-1-i - Browser

Rien à voir avec un quelconque browser internet.
Cette propriété va indiquer à Word la méthode qui sera utilisée pour les déplacemens dans le document.

Cette propriété possède une propriété importante : Traget
La propriété target va indiquer le type de cible pour la navigation dans le document.

Voici la liste des cibles que l'ont peut atteindre.

- wdBrowseComment

- wdBrowseEdit

- wdBrowseEndnote

- wdBrowseField

- wdBrowseFind

- wdBrowseFootnote

- wdBrowseGoTo

- wdBrowseGraphic

- wdBrowseHeading

- wdBrowsePage

- wdBrowseSection

- wdBrowseTable

La navigatiion peut être définie à suivant (Next) ou précédent (Previous). Une fois atteinte, la cible est sélectionnée.

Browse ou navigation

01 Sub Navigation()
02 With Application.Browser
03     .Target = wdBrowseSection
04     .Next
05 End With
06 End Sub

Le code ci-dessus va déplacer la sélection de section en section.

L'utilisation de ce code provoque la même action que le bouton situé au bas de l'ascenseur vertical.

2-A-1-j - Build

Cette propriété en lecture seule permet de récupérer le Build (numéro de version et de compilation ) de la version de Word utilisée.
Très intéressant si vous distribuez vos documents contenant des fonctionnalités propres à certaines versions du logiciel.

Version

01 Sub TestVersion()
02     MsgBox Prompt:=Application.Build, Title:="Microsoft Word Version"
03 End Sub

Pour info, la version renvoyée par Word 2007 que j'utilise est "12.0.6015".

2-A-1-k - CapsLock

Propriété en lecture seule, permet de savoir si les majuscules sont verouillées.
Si vous tenter de modifier cette propriété, Word vous signale que vous ne pouvez pas !

En Majuscule ?

01 Sub TestMajuscule()
02     If Application.CapsLock Then MsgBox "Les majuscules sont verouillées !"
03 End Sub

Propriété intéressante si l'on désire contrôler la frappe de l'utilisateur.

2-A-1-l - Caption

Propriété en lecture écriture qui permet de lire le titre de l'application, ou de le modifier.

Mon titre

01 Sub TitreApplication()
02 Application.Caption = "Mon Word à Moi"
03 End Sub

Simple, la ligne 02 va modifier le titre de l'application.

2-A-1-m - CommandBars

Prorpiété qui représente la collection de toutes les barres d'outils de Word. Je ne vais pas vous donner la liste, elle est longue, le code ci-dessous va afficher les 176 barres d'outils qui se trouvent dans Word, du moins sur mon PC. C'est cette collection qui contient également vos barres d'outils.

Barres d'outils

01 Sub ListeBarreDOutils()
02 Dim cmd As CommandBar
03 For Each cmd In Application.CommandBars
04     Debug.Print cmd.Name
05 Next cmd
06 End Sub

2-A-1-n - DefaultSaveFormat

Propriété qui renvoie le format de sauvegarde par défaut du document.
La modification de cette propriété va change le type de fichier dans la boîte de dialogue "Enregister Sous".

01 Sub TestApplication()
02 Application.DefaultSaveFormat = "rtf"
03 End Sub

Avec l'extension RTF

Si vous désirez changer l'extension par défaut, prévoyez de la restaurer pour éviter toute surprise.

2-A-1-o - Dialogs

Propriété qui permet de choisir la boîte de dialogue, dans la collection, qui sera affichée.

Boîte de dialogue

01 Sub TestApplication()
02 Application.Dialogs(wdDialogCSSLinks).Show
03 End Sub

En fonction de la boîte de dialogue choisie, il est possible de lui passer certains paramètres par le code.

2-A-1-p - DisplayAutoCompleteTips

Propriété intéressante si on peut la désactiver. En effet, le but la fonctionalité liée à cette proprité est de vous proposer un complétion automatique de certains mots. C'est le cas des dates. Quel bonheur de pourvoir désactiver temporairement cette fonction.

AutoComplétion

01 Sub AutoCompletion()
02 Application.DisplayAutoCompleteTips = True
03 End Sub

2-A-1-q - Documents

Certainement la collection la plus importante de l'application Word. Cette collection représente les documents ouverts dans l'application. C'est à cette collection que nous allons ajouter un document.

Collection Documents

01 Sub AjoutDocument()
02 Application.Documents.Add
03 End Sub

Cette collection a droit à un chapitre entier dans ce tutoriel.

2-A-1-r - FilesConverters

Pourquoi je ne parviens pas à ouvrir un document sauvegardé dans une version antérieure de Word.
Probablement que le convertisseur adéquat n'est pas installé sur votre machine.

Le code suivant va vous donner la liste des convertisseurs installés et le type de fichier qu'il sont capable de convertir.

Convertisseur de fichiers

01 Sub Convertisseurs()
02 Dim flC As FileConverter
03
04 For Each flC In Application.FileConverters
05     Debug.Print flC.Name; "; "; flC.Path; "; "; flC.FormatName
06 Next flC
07
08 End Sub

La ligne 05 va vous donner le nom du convertisseur, son chemin sur le pc ainsi que sa fonction.

2-A-1-s - FileDialog

Représente la boîte de dialogue liée aux fichiers.

01 Sub ShowSaveAsDialog()
02     Dim dlgSaveAs As FileDialog
03     Set dlgSaveAs = Application.FileDialog( FileDialogType:=msoFileDialogSaveAs)
04     dlgSaveAs.InitialFileName = "Moi"
05     dlgSaveAs.Show
06 End Sub

Avec pour la ligne 03 "Filedialogtype les valeurs suivantes :

Nom

Valeur

Description

msoFileDialogFilePicker

3

Boîte de dialogue de sélection de fichier

msoFileDialogFolderPicker

4

Boîte de dialogue de sélection de dossier

msoFileDialogOpen

1

Boîte de dialogue Ouvrir

msoFileDialogSaveAs

2

Boîte de dialogue Enregistrer sous

La ligne 05 permet de suggérer un nom pour le fichier qui sera dans ce cas sauvegardé.

2-A-1-t - Options

La propriété Options permet d'utiliser les options disponibles pour l'application.
Quelques Exemples :

Autoriser les majuscules accentuées

Application.Options.AllowAccentedUppercase = True

Autoriser le glisser déposer

Application.Options.AllowDragAndDrop = True

Supprimer les sons

Application.Options.EnableSound = False

On peut accéder à toutes les options de Word.

2-A-1-u - PrintPreview

Permet de passer en mode "Apperçu Avant Impression".

Apperçu avant impression

01 Sub AppercuAvantImpression()
02 Application.PrintPreview = True
03 End Sub

Son utilisation va basculer le mode d'affichage.

2-A-1-v - ScreenUpdating

Il n'est pas toujours très agréable de voir les modifications d'un texte à l'écran. La propriété ScreenUpdating va inhiber l'affichage et figer ce dernier.
Ne pas oublier de remettre l'affichage normal après l'avoir désactivé.

Inhibition de la mise à jour de l'écran

Application.ScreenUpdating = False

Sera toujours suivie de la ligne ci-après.

Retour en mode normal de l'affichage

Application.ScreenUpdating = True

2-A-1-w - Selection

Propriété important en soi. C'est sur les selection que nous allons pourvoir agir pour modifier notre document.
La propriété selection s'applique à bon nombre d'objets.
Nous aurons de meilleures occasions dans ce document pour utiliser la propriété sélection.

2-A-1-x - System

La propriété System permet de renvoyer différentes information sur le Système, comme l'espace disque restant, ....

Information Sytème

01 Sub InformationSysteme()
02 With Application.System
03 Debug.Print .CountryRegion
04 Debug.Print .FreeDiskSpace
05 Debug.Print .HorizontalResolution
06 Debug.Print .VerticalResolution
07 End With
08 End Sub

La ligne 03 va renvoyer le code pays, 33 pour la France.
La ligne 04 va renvoyer l'espace disque disponible.
La ligne 05 va renvoyer la résolution horizontale de votre affichage.
La ligne 06 va renvoyer la résolution verticale de votre affichage.

2-A-1-y - Templates

Propriété qui renvoie la collection des templates pour les documents ouverts.

Liste des modèles ouverts

Sub ListeModele()
Dim model As Template
Debug.Print Application.Templates.Count

For Each model In Application.Templates
Debug.Print model.Path
Next model
End Sub

2-A-2 - Les Méthodes

En VBA word, les méthodes possèdent une particularité par rapport aux méthodes Access. En Access, lors de l'utilisation de paramètres dans les méthodes, il est importnat de repérer la position du paramètre et d'insérer le nombre se séparateurs exacts pour que les paramètres soient correctement passés. En VBA Word, on peut nommer les paramètres lors de leur utilisation.
On obtient par exemple :

String:=Selection.Texte
'****************************
Alignment:=wdAlignTabCenter

2-A-2-a - ChangeFileOpenDirectory

Change le répertoire d'ouverture des documents, mais contrairement à "DefaultFilePath", cette modification n'est effective que pour la session en cours de Word. Lors de la fermeture de l'application, cette donnée est éliminée.

ChangeFileOpenDirectory

01 Sub testOpen()
02 ChangeFileOpenDirectory "D:\temp"
03 Dialogs(wdDialogFileOpen).Show
04 End Sub

Effet immédiat, la boîte de dialogue s'ouvre sur le répertoire spécifié à la ligne 02.

2-A-2-b - CleanString

Méthode intéressante, elle permet de nettoyer une chaîne de certains caractères non-imprimables qu'elle contient. On peut de cette façon éliminer les retours à la ligne et ils seront remplacés par des espaces.
Les espaces insécables seront convertis en espaces. L'aide donne la liste des caractères affectés et le résultat obtenu.

Nettoyage

01 Sub testClean()
02 Dim myText As String
03 myText = Application.CleanString(Selection)
04 Documents.Add
05 Selection.TypeText myText
06 End Sub

La ligne 02 sert à déclarer ma variable.
La ligne 03 à affecter à ma variable la selection à nettoyer
La ligne 04 à ajouter un nouveau document pour vérifier le résultat.
La ligne 05 à insérer notre texte nettoyé dan sle nouveau document.

2-A-2-c - CompareDocuments

Cette méthode permet de comparer deux documents. Il existe une multitude d'options facultatives pour les résultats désirés. Le résultat sera intégré dans un document.

01 Sub testComparaison()
02 Dim OriDocument As Document
03 Dim RevDocument As Document
04 Dim finalDoc As Document
05
06 Set OriDocument = CreateObject("c:\temp\Doc4.docm")
07 Set RevDocument = CreateObject("c:\temp\doc5.docm")
08 Set finalDoc = Application.CompareDocuments(OriDocument, RevDocument)
09
10End Sub

02 -> 04 Déclaration des variables qui doivent être des documents
06 -> 07 Affectation des objets documents aux variables 08 Nouveau document contenant les marques de révision suite à la comparaison.

2-A-2-d - GoBack et GoForward

Surprenant !
Ces fonctions ne sont plus disponibles si vous utilisez le format de fichier Office Open XLM.
Lorsque Word utilise le format propriétaire *.doc, ces actions sont disponibles, elles permettent deplacer le curseur aux trois derniers endroits d'édition avant sauvegarde du document.
Si vous n'avez pas fermé le document, ces onctions sont opérationnelles.
La combinaison de touches Shift + F5 produit le même résultat.

2-A-2-e - MergeDocuments

Cette méthode est identique à la méthode CompareDocuments mis à part quelques options.
L'utilisation se fait de la même manière.

2-A-2-f - NewWindow

Permet d'ouvrir une nouvelle fenêtre Word avec le document en cours. Une fois ouverte, la seconde fenêtre peut être combinées aux autres avec un arrangement horizontal ou vertical.

Sub TestWindows()
MsgBox Windows.Count & " fenêtre(s) ouverte(s)"
Windows(1).NewWindow
MsgBox Windows.Count & " fenêtres ouvertes"
End Sub

2-A-2-g - OnTime

Cette méthode permet l'exécution d'une action à une heure définie.

Application.OnTime When:="15:55:00", Name:="Macro1"

On peut aussi faire référence à un temp donné et ajouter une période.

Application.OnTime When:=Now + TimeValue("00:00:15"), _
Name:="Macro1"

Si vous voulez que le code soit éxécuté, il est préférable de le mettre sur un évènement de l'application

2-A-2-h - Quit

Méthode qui permet de quitter l'application.

Application.Quit SaveChanges:=True, OriginalFormat:=wdWordDocument

Cette méthode requiert trois paramètres qui sont facultatifs. SaveChanges -> Enregistrer les changements OriginalFormat -> Format d'enregistrement RouteDocument -> N'est pris en compte que lorsque le document à subit ou va subir un routage.

2-A-2-i - Repeat

Méthode qui permet de répéter une action ou serie d'action un certain nombre de fois. Attention, seule la dernière action est répétée.

Répéter

01 Sub TestRepeat()
02 Selection.TypeText "Première ligne" & vbCrLf
03 Selection.TypeText "Seconde ligne" & vbCrLf
04 Application.Repeat
05
06 With Selection
07     .TypeText "Texte 1"
08     .TypeParagraph
09     .TypeText "Texte 2"
10 End With
11 Repeat
12
13
14 End Sub

Seules les lignes 03 et 09 sont répétées, même les actions dans le With sont séparées, et l'action de répétition ne s'effectue que sur la dernière ligne.

2-A-2-j - ResetIgnoreAll

Méthode simple, elle effece le contenu de la liste des mots précédemment ignorés lors d'une correction orthographique du document.
Associée à une bouton on peu tfaire des merveille.

01 Sub ResetMots()
02 Application.ResetIgnoreAll
03 ActiveDocument.SpellingChecked = False
04 ActiveDocument.CheckSpelling
05 End Sub

On va effacer le contenu de la liste des mots ignorés 02, signifier que la correction n'a pas eu lieu 03 et finalement recommencer la vérification 04.

2-A-2-k - ScreenRefresh

Associée à la propriété ScreenUpdating cette méthode permet de faire une mise à jour de l'affichage et ce même avant de remettre la propriété ScrenUpdating à True.

01 Sub OuvrirEtFermer()
02 Application.ScreenUpdating = False
03 Application.Documents.Add
04 Selection.TypeText "Bonjour"
05 Application.ScreenRefresh
06 ActiveDocument.SaveAs FileName:="MonDoc.docx"
07 ActiveDocument.Close
08 Application.ScreenUpdating = True
09 End Sub

On fige l'écran 02, on ajoute un document 03, on y place le texte Bonjour 04, on raffraîchit l'écran 05, on sauve le document et on le ferme 06 et 07 pour réactiver l'affichage 08.

2-A-2-l - ShowClipboard

Permet d'afficher le volet presse papier.

Afficher le volet presse papier

Application.ShowClipboard

2-A-3 - Les Évènements

Word ne détecte pas beaucoup dévènements comparé aux autres applications de la suite Office. La méthode pour permettre à Word de détecter certains évènement est la suivante :

Il faut insérer un module de classe.

Insérer un module de classe

Renomer le module en EventClassModule

Renomer le module

La première déclaration dans le module doit être la suivante :

Public WithEvents appWord As Word.Application

Cette ligne de code sert à déclarer un objet Application et dans notre cas, une objet Application Word. L'objet est immédiatement disponible pour utilisation. Dans la liste déroulante permettant de choisir un objet, vous avez maintenant l'objet appWord qui est disponible.

Les Objets

La liste déroulante procédure permet de choisir la procédure qui sera ajoutée dans le module de classe.

Liste Procédures

Ensuite, dans n'importe quel module de votre choix, vous devez déclarer la ligne suivante :

Dim X As New EventClassModule

Avec cette ligne de code, vous allez pouvoir initialiser un objet application et le faire réagir aux évènement du module de classe. Il ne reste plus qu'à initialiser l'objet.

Sub Register_Event_Handler()
Set X.appWord = Word.Application
End Sub

Vous pouvez faire appel à cette procédure dans votre procédure et Word réagira aux évènements.

2-A-3-a - DocumentBeforeClose

Évènement qui se produit avant la fermeture d'un document.

DocumentBeforeClose

Private Sub appWord_DocumentBeforeClose (ByVal Doc As Document, Cancel As Boolean)

Dim intReponse As Integer

intReponse = MsgBox("Voulez-vous " _
& "fermer le document?", _
vbYesNo)

If intReponse = vbNo Then Cancel = True
End Sub

La déclaration WithEvents est important si l'on veut détecter certains évènement. Le code ci-dessus est tiré de l'aide de Word.

2-A-3-b - DocumentBeforePrint

Se produit avant impression.

Private Sub appWord_DocumentBeforePrint(ByVal Doc As Document, Cancel As Boolean)
Dim intResponse As Integer
Dim stPrinter As String

stPrinter = Application.ActivePrinter
intResponse = MsgBox("Vos allez imprimer sur " & stPrinter, vbYesNo)

If intResponse = vbNo Then Cancel = True
End Sub

2-A-3-c - DocumentBeforeSave

Évènement qui se produit juste avant la sauvegarde du document.

Private Sub appWord_DocumentBeforeSave(ByVal Doc As Document, SaveAsUI As Boolean, Cancel As Boolean)
Dim intResponse As Integer
Dim stDefault As String

stDefault = Application.DefaultSaveFormat

intResponse = MsgBox("Voulez vous sauver votre document en '" & stDefault & "'", vbYesNo)

If intResponse = vbNo Then Cancel = True
End Sub

2-A-3-d - DocumentChange

Se produit lors de la création d'un nouveau document, de l'ouverture d'un document existant ou de la sélection d'un autre document comme document actif.

Private Sub appWord_DocumentChange()
MsgBox "Le document a changé !"

End Sub

2-A-3-e - DocumentOpen

Se produit à l'ouverture d'un document.

Private Sub appWord_DocumentOpen(ByVal Doc As Document)
MsgBox "Un document vient d'être ouvert !"
MsgBox Application.ActiveDocument.Name

End Sub

2-A-3-f - DocumentSync

Se produit lorsque la copie locale d'un document faisant partie d'un espace de travail de document est synchronisée avec la copie sur le serveur.

Private Sub app_DocumentSync(ByVal Doc As Document, ByVal SyncEventType As Office.MsoSyncEventType)

End Sub

Je n'ai pu tester cet évènement, n'aynat pas d'espace de travail.

2-A-3-g - Serie d'évènement MailMerge

Pour la fusion et le publipostage, il existe plusieurs évènements :

Évènement

Quand

MailMergeAfterMerge

Se produit après que tous les enregistrements d'une fusion ont été correctement fusionnés.

MailMergeAfterRecordMerge

Se produit après la fusion des différents enregistrements de la source de données dans une opération de publipostage.

MailMergeBeforeMerge

Se produit lorsqu'une fusion est exécutée avant qu'un enregistrement quelconque ait été fusionné.

MailMergeBeforeRecordMerge

Se produit lorsque la fusion d'un enregistrement particulier du publipostage est exécutée.

MailMergeDataSourceLoad

Se produit lorsque la source de données est chargée en vue d'une opération de publipostage.

MailMergeDataSourceValidate

Se produit lorsqu'un utilisateur valide des destinataires de publipostage en cliquant sur Valider dans la boîte de dialogue Destinataires du publipostage.

MailMergeDataSourceValidate2

Survient lorsqu'un utilisateur valide les destinataires du publipostage en cliquant sur le bouton de lien Valider les adresses dans la boîte de dialogue Destinataires du publipostage.

MailMergeWizardSendToCustom

Se produit lorsque vous cliquez sur le bouton personnalisé à l'étape six de l'Assistant Fusion et publipostage.

MailMergeWizardStateChange

Se produit lorsqu'un utilisateur passe d'une étape spécifiée de l'Assistant Fusion et publipostage à une autre.

2-A-3-h - NewDocument

Se produit lors de la création d'un document.

Private Sub appWord_NewDocument(ByVal Doc As Document)
MsgBox "Avec ce document, vous avez : " & Application.Documents.Count & " ouverts !"
End Sub

2-A-3-i - Quit

Se produit lorsque l'utilisateur quitte Microsoft Office Word.
Je pense qu'il n'est pas utile d'en dire plus.

2-A-3-j - WindowActivate

Se produit lors de l'activation d'une fenêtre de document.

Private Sub appWord_WindowActivate _
(ByVal Wn As Word.Window)
Wn.WindowState = wdWindowStateMaximize
End Sub

2-A-3-k - WindowBeforeDoubleClick

Se produit lorsqu'un utilisateur double-clique dans la zone d'édition d'une fenêtre de document avant le double-clic par défaut.

Private Sub appWord_WindowBeforeDoubleClick(ByVal Sel As Selection, Cancel As Boolean)

End Sub

2-A-3-l - WindowBeforeRightClick

Se produit lorsqu'un utilisateur clique avec le bouton droit dans la zone d'édition d'une fenêtre de document avant le clic droit par défaut.

Private Sub appWord_WindowBeforeRightClick(ByVal Sel As Selection, Cancel As Boolean)
Dim intResponse As Integer

intResponse = MsgBox("Sélection = " & Sel & vbLf & vbLf _
& "Continuer avec cette sélection ?", _
vbYesNo)
If intResponse = vbNo Then Cancel = True
End Sub

3 - La collection "Documents"

L'importance de cette collection est aussi grande que l'objet Application. C'est cette collections qui contient les documents et c'est à cette collection que l'on ajoute les nouveaux documents.

Les collections Documents possède des Propriétés et des Méthodes.

Propriété

Description

Documents.Application

Renvoie un objet application

Documents.Count

Renvoie le nombre de documents qui composent la collection

Documents.Parent

Renvoie le parent de la collection, ici un objet application

Méthodes

Description

Documents.Add

Permet d'ajouter un document à la collection existante.

Documents.AddBlogDocument(IDFournisseur, URLPost, NomBlog, IDPost)

Ajoute un nouveau document de Blog

Documents.Close("MonDoc.docx")

Ferme un document de la collection, ce document peut-être réprésenté par son nom ou par son index.

Documents.Item(1)

Renvoie le document qui possède l'index 1

Documents.Open( "c:\temp\MonDoc.docx")

Ouvre un document pour l'ajouter à la collection

Documents.Save

Sauvegarde les documents d'une collection.

Ajouter un document

Sub NewDocu()
Documents.Add Template:="u:\templates\Lettre.dotm"
End Sub

Le code ci-dessus va ajouter un nouveau document basé sur un modèle(template) de document. Si on ne précise pas de nom de modèle, par défaut, ce sera un document basé sur le Normal.dotx.

Sauvegarde

Sub SaveDocu()
Documents.Save Noprompt:=True, SaveFormat:=WdOriginalFormat
End Sub

Le code qui précède va simplement sauvegarder le document, sans rien demander dans le format de sauvegarde par défaut.

3-A - L'objet Document

Objet principal de la collection Documents.
Il est le second objet qui possède des Évènements en plus des propriétés et méthodes.
Une fois de plus, je ne vais pas faire une liste exhaustive des propriétés, méthodes et évènements de l'objet document, je vais me contenter d'une partie.

3-A-1 - Prorpiétés

3-A-1-a - AttachedTemplate

Propriété qui renvoie le modèle de document qui à servi à la création du document.

Sub TestActiveTemplate()
Debug.Print ActiveDocument.AttachedTemplate
End Sub

Pour un document vide, on reçoit : Normal.dotm

3-A-1-b - Background

Propriété qui renvoie un objet Shape (objet de la couche de dessin). Les arrières plans peuvent être constitués d'images mais aussi d'un simple remplissage coloré.

Les arrière-plans sont uniquement visibles en mode Web.

Remplissage coloré

ActiveDocument.ActiveWindow.View.Type = wdWebView
With ActiveDocument.Background.Fill
.Visible = True
.ForeColor.RGB = RGB(192, 192, 192)
.BackColor.RGB = RGB(100, 100, 0)
.TwoColorGradient msoGradientHorizontal, 1

End With

Il est même possible de combiner des couleurs pour un effet visuel surprenant.

Remplissage Image

ActiveDocument.ActiveWindow.View.Type = wdWebView
ActiveDocument.Background.Fill.UserPicture _
PictureFile:="C:\Windows\Bulles de savon.bmp"

Les fichiers jpeg conviennent aussi, l'image est en mosaïque (Tile).

3-A-1-c - Bibliography

Renvoie un objet Bibliography qui représente les références bibliographiques contenues dans un document.

On obtient des objets Bibliography lorsque l'on insère une citation.

Sub GetBibliography()
Dim strXml As String
Dim objSource As Source

Set objSource = Application.Bibliography.Sources( _
Application.Bibliography.Sources.Count)

Debug.Print objSource.XML
End Sub

<b:Source xmlns:b="http://schemas.openxmlformats.org/officeDocument/2006/bibliography">
<b:Tag>Heu07</b:Tag>
<b:SourceType>Book</b:SourceType>
<b:Guid>{C69DB561-5066-46E8-9D85-449C42672324}</b:Guid>
<b:LCID>0</b:LCID>
<b:Author><b:Author>
<b:NameList><b:Person>
<b:Last>Heureux-oli</b:Last>
</b:Person>
</b:NameList>
</b:Author></b:Author>
<b:Title>Word VBA</b:Title>
<b:Year>2007</b:Year>
</b:Source>

Cette propriété a été ajoutée à partir de la version 2007.

3-A-1-d - BookMarks

Renvoie une collection Bookmarks qui représente tous les signets d'un document.

Les BookMarks sont des objets relativements importants dans un document. Ils permettent de réaliser du publipostage, de se rendre à un endroit précis dans un document, de marquer du texte, de définir une plage de texte qui poura être utilisée.

BookMarks

01 Sub TestRangeBM()
02 Dim oDoc As Document
03 Dim myRange As Range
04 Set oDoc = ActiveDocument
05 Set myRange = oDoc.Range(oDoc.Bookmarks("S1").Range.Start, oDoc.Bookmarks("S2").Range.End)
06 myRange.Font.Italic = True
07 End Sub

Les lignes 02 et 03 servent à déclarer les variables. La ligne 04 va affecter le document actif à la variable document oDoc, le ligne 05 va affecter à la variable range la portion de texte comprise entre les signets "S1" et "S2". La ligne 06 va mettre le texte seléctionné en italique.

On peut aussi ajouter des signets sur un mot recherché !

Ajout de signets

01 Dim myRange As Range
02
03 Set myRange = ActiveDocument.Content
04 myRange.Find.Execute FindText:="bonjour", Forward:=True
05     If myRange.Find.Found = True Then Selection.Bookmarks.Add ("Signet01")
06    Debug.Print "2"; myRange

Le ligne sert a déclarer la variable, la ligne 03 va affecter le contenu du document à la variable. La ligne 05 va rechercher le mot "Bonjour" et la ligne 06 va ajouter un signet "Signet01" si le mot est trouvé.

On peut aussi ajouter du texte avec un signet.

Insérer du texte

01 Sub TestRangeBM()
02 ActiveDocument.Bookmarks("S_ici").Select
03 Selection.InsertAfter " Mon Texte à insérer"
04 End Sub

3-A-1-e - BuiltInDocumentProperties

Renvoie une collection DocumentProperties qui représente l'ensemble des propriétés de document prédéfinies pour le document spécifié.

Liste des propriétés du document

Sub ListProperties()
Dim rngDoc As Range
Dim proDoc As DocumentProperty

Set rngDoc = ActiveDocument.Content

rngDoc.Collapse Direction:=wdCollapseEnd

For Each proDoc In ActiveDocument.BuiltInDocumentProperties
With rngDoc
.InsertParagraphAfter
.InsertAfter proDoc.Name & "= "
On Error Resume Next
.InsertAfter proDoc.Value
End With
Next
End Sub

On peut aussi modifier les BuiltInProperties.

Modification d'un propriété

Sub changeProperties()
ActiveDocument.BuiltInDocumentProperties(wdPropertySubject) = "Le sujet à traiter"
End Sub

3-A-1-f - Characters

Renvoie une collection Characters qui représente les caractères contenus dans un document. En lecture seule.
Comme pour toute collection, on peut compter les caractères.

ActiveDocument.Characters.Count

3-A-1-g - ChildNodeSuggestions

Renvoie une collection XMLChildNodeSuggestions qui représente la liste des éléments autorisés pour le document.

XMLChildNodeSuggestion

Sub GetChildNodeSuggestions()
Dim objSuggestion As XMLChildNodeSuggestion
Dim objNode As XMLNode

Set objNode = Selection.XMLParentNode

For Each objSuggestion In objNode.ChildNodeSuggestions
objSuggestion.Insert
Selection.MoveRight
Next
End Sub

Ce code peret pour une sélection parent d'insérer les nodes enfants autorisé. Une image sera plus parlante. J'ai repris les fichiers qui ont servi dans l'article traitant du XML dans Office.

Ce que nous possédons.
Ajout d'un Node Parent.

Après Ajout.

On exécute la procédure

On a bien les nodes enfants qui ont été ajoutés.

3-A-1-h - Comments

Renvoie une collection Comments qui représente tous les commentaires contenus dans le document spécifié. La collection est en lecture seule.
Les commentaires sont ajoutés par les utilisateurs dans le cas d'un travail collaboratif. On peut obtenir des commentaires les propriétés suivantes :

- Auteur

- Date

- Index

- Range (Contenu)

Il est possible de modifier un commentaire par l'usage de la méthode "Edit".

Edition d'un commentaire

Public Sub testComment()
Dim com As Comment
Set com = ActiveDocument.Comments(1)
With com
.Edit
.Range.Text = "Mon nouveau texte"
End With
End Sub

La méthode Add permet d'ajouter un Commentaire.

Sub Comment3rd()
Dim myRange As Range

Set myRange = ActiveDocument.Paragraphs(3).Range
ActiveDocument.Comments.Add Range:=myRange, _
Text:="Troisième paragraphe"
End Sub

Les arguments à passer sont "Range" et "Text"

3-A-1-i - Compatibility

Propriété qui permet de modifier certains paramètres de compatibilité. On retrouve ces paramètres dans les options de Word, Otpions Avancées.

3-A-1-j - Content

Renvoie un objet Range qui représente l'article (article : zone d'un document qui contient une plage de texte distinct des autres zones de texte dans un document. Par exemple, si un document inclut un corps de texte, des notes de bas de page et des en-têtes, il contient un article principal, un article de notes de bas de page et un article d'en-tête.) principal d'un document. En lecture seule.

Contenu du document

Dim hs As Range
Set hs = ActiveDocument.StoryRanges(wdPrimaryFooterStory)
Debug.Print hs.Text

Ne va renvoyer que le texte contenu dans le premier pied de page.

Contenu principal du document

Debug.Print ActiveDocument.Content.Text

3-A-1-k - ContentControls

Cette propriété a été ajoutée avec la version 2007.
Les contrôles de contenu sont des listes de choix contenant plusieurs entrées.
Il est parfois intéressant d'avoir des listes contenant des choix, soit pour imposer l'élément d'une liste, soit pour faciliter la saisie de données ou de texte.

Insertion d'un Contrôle de contenu

Public Sub ContentControlAdd()
Dim objCC As ContentControl
ActiveDocument.Paragraphs(3).Range.Select

Set objCC = ActiveDocument.ContentControls.Add(wdContentControlDropdownList)
objCC.Title = "Mon moyen de transport préféré"

'List entries
objCC.DropdownListEntries.Add "Pieds"
objCC.DropdownListEntries.Add "Vélo"
objCC.DropdownListEntries.Add "Cheval"
objCC.DropdownListEntries.Add "Voiture"
objCC.DropdownListEntries.Add "Bus"
objCC.DropdownListEntries.Add "Train"
End Sub

3-A-1-l - DefaultTabStop

Renvoie ou définit l'intervalle, exprimé en points, qui sépare les tabulations par défaut du document spécifié. Type de données Single en lecture-écriture.

Intervale de tabulation

Sub ArretTabulation()
ActiveDocument.DefaultTabStop = CentimetersToPoints(1)
End Sub

3-A-1-m - EndNotes

Renvoie une collection Endnotes qui représente toutes les notes de fin contenues dans un document. En lecture seule.
La seule méthode disponible pour les notes de fin, est "Delete".

Note de fin

Sub NoteDeFin()
With ActiveDocument.Endnotes(1).Range
.Text = "Nouveau texte de la première note de fin"
.Font.AllCaps = True
.Bold
End With
End Sub

Ce code va simplement remplaver la note de fin existante par le texte de la procédure et modifier les attributs du texte.

3-A-1-n - Fields

Renvoie une collection Fields qui représente tous les champs contenus dans le document.

Mise à jour des champs

ActiveDocument.Fields.Update

Les fields peuvent avoir deux états.
Le premier, afficher leur code et non pas les données.
Le second, afficheer les données.

Liste et valeur des champs

Sub ListeChamps()

Dim fld As Field
Dim stTemp As String

For Each fld In ActiveDocument.Fields
stTemp = stTemp & "Code : " & fld.Code.Text & vbCrLf
stTemp = stTemp & "Valeur : " & fld.Result & vbCrLf

Next fld
Selection.EndKey Unit:=wdStory
Selection.InsertBreak Type:=wdSectionBreakNextPage

Selection.TypeText stTemp

End Sub

Ajout d'un champ

ActiveDocument.Fields.Add Range:=Selection.Range, Type:=wdFieldAuthor

Comment parcourir la collection de champs d'un document et si ce champs est un champ image, fixer une taille unique.

Public Sub TestShape()
Dim fld As Field
For Each fld In ActiveDocument.Fields
If fld.Type = wdFieldIncludePicture Then fld.InlineShape.Width = CentimetersToPoints(6)
Next fld
End Sub

Il est assez facile de trouver le nom du champ que vous chercher. Au travers de l'interface utilisateur de Word, il vous suffit d'afficher la boîte de dialogue d'insertion de champs et d'afficher les codes, l'ajout de wdFields devant le nom du champ vous donnes le type du champ.

3-A-1-o - FootNotes

Pendant de la propriété EndNotes, la propriété FootNotes renvoie une collection Footnotes qui représente toutes les notes de bas de page contenues dans un document.

Insertion de note bas de page

Sub FootNoteInsert()
ActiveDocument.Paragraphs(3).Range.Select
Selection.Footnotes.Add Range:=Selection.Range, Text:="Ma note de bas de page du 3ième Paragraphe"

End Sub

3-A-1-p - FormFields

Renvoie une collection FormFields qui représente tous les champs de formulaire contenus dans le document.
A ne pas confondre avec les contrôles des UserForms.
Ils sont au nombre de trois : la case à cocher, la liste déroulante et le TextBox.

Ils sont accessibles par signets. Lors de leur création, Word leur attribue un signet.
Les signets sont TexteX, CaseACocherX et ListeDéroulanteX.

Ajout d'un contrôle Formulaire

ActiveDocument.FormFields.Add Range:=Selection.Range, Type:=wdFieldFormCheckBox

Cocher une Case à Cocher

ActiveDocument.FormFields("CaseACocher1").CheckBox.Value = True

Dans le cas d'un contrôle formulaire liste déroulante, on peut ajouter en plus du contrôle, les éléments qu'elle va contenir.

3-A-1-q - FormsDesign

Cette proriété renvoie True si le document est en mode modification.
Si c'est le cas, on ne peut intervenir sur les contrôles, il est préférable de faire le test avant de vous lancer dans la modification des contrôles formulaires.

En mode création

If ActiveDocument.FormsDesign then Exit Sub

3-A-1-r - Frames

Renvoie une collection Frames qui représente tous les cadres contenus dans un document.

Un cadre

Ajout d'un Frame

Sub FrameAdd()
Dim myFrame As Frame
If ActiveDocument.Frames.Count < 4 Then
Set myFrame = ActiveDocument.Frames.Add(Range:=Selection.Range)
End If
End Sub

3-A-1-s - FullName

Renvoie une valeur de type String qui représente le nom du document accompagné du chemin d'accès.

Sub FullNameTest()
MsgBox ActiveDocument.FullName
End Sub

3-A-1-t - HasPassword

Cette propriété a la valeur True si un mot depasse est nécessaire pour ouvrir le document.
Il ne fonctionne que pour un document ouvert. En effet, le document doit être ouvert pour que lapropriété puisse être testée. Si le document est protégé, il devient difficile de l'ouvrir sans le mot de passe.

Sub HasPWDTest()
If ActiveDocument.HasPassword Then MsgBox "Le document est protégé"
End Sub

3-A-1-u - Indexes

Renvoie une collection Indexes qui représente l'ensemble des index contenus dans le document spécifié.

Pour ajouter des entrées d'index, vous pouvez parcourir le document à la recherhe des mots qui vous intéressent.

Insérer un index

Sub indexInsert()
Dim inText As String
Dim myRange As Range
inText = InputBox("Entrez le mot à indexer !", "Mot pour l'index")
Set myRange = ActiveDocument.Content
myRange.Find.Execute FindText:=inText, Forward:=True
If myRange.Find.Found = True Then ActiveDocument.Indexes.MarkEntry Range:=Selection.Range, Entry:=Selection.Range.Text
End Sub

Mais vous pouvez également créer des entrées d'index au départ d'un second fichier contenant une liste de mots.

Avec Fichier de concordances

Sub concordances()
Dim che As String
Dim nom As String

che = ActiveDocument.Path & "\listemot.docm"
nom = ActiveDocument.Name
Debug.Print che

ActiveDocument.Indexes.AutoMarkEntries ConcordanceFileName:=che

End Sub

On peut également marquer toutes les entrées d'un document.

Toutes les entrées d'un mot

Sub index2()
Dim inText As String
Dim myRange As Range

inText = InputBox("Entrez le mot à indexer !", "Mot pour l'index")
Set myRange = ActiveDocument.Content
myRange.Find.Execute FindText:=inText, Forward:=True
ActiveDocument.Indexes.MarkAllEntries Range:=myRange, Entry:=inText
End Sub

Si en plus on désire ajouter un index en fin de document. Comme une erreur est levée si le document ne possède pas d'index, j'utilise cette erreur pour créer mon index.

Sub index2()
On Error GoTo om
Dim inText As String
Dim myRange As Range

inText = InputBox("Entrez le mot à indexer !", "Mot pour l'index")
Set myRange = ActiveDocument.Content
myRange.Find.Execute FindText:=inText, Forward:=True
ActiveDocument.Indexes.MarkAllEntries Range:=myRange, Entry:=inText

If Not IsNull(ActiveDocument.Indexes(1).Range) Then

ActiveDocument.Indexes(1).Update
Else
om:

Set myRange = ActiveDocument.Content
myRange.Collapse Direction:=wdCollapseEnd
ActiveDocument.Indexes.Add Range:=myRange, Type:=wdIndexRunin
End If
ActiveDocument.Indexes(1).Update
End Sub

3-A-1-v - InLineShapes et Shapes

Renvoie une collection InlineShapes ou Shapes qui représente tous les objets InlineShape ou Shapes dans un document. Je vais traiter ces deux types d'objet en même temps à cause de leurs similitudes.

On en arrive à se poser la question quelle est la différence entre un objet Shapes et un objet InLineShapes.

Objet Shape

Objet InLineShape

L'objet InLineShape se trouve dans le texte de la même manière qu'un caractère, alors qu'un Objet Shape est indépendant du texte. Si vous modifiez les propriétés de l'objet, vous allez le transformer en Shapes.

Objet Shapes qui devient InLineShape

Avec un boîte de sélection

Sub AddShape()
Dim myFile As Variant
Dim myDialog As FileDialog

Set myDialog = Application.FileDialog(msoFileDialogFilePicker)
With myDialog
.AllowMultiSelect = False

.Filters.Add "Images", "*.gif; *.jpg; *.jpeg", 1
.Show
End With

myFile = myDialog.SelectedItems(1)

ActiveDocument.Shapes.AddPicture myFile, True, False

End Sub

Argument

Description

AddChart

Insère un graphique, tel qu'il a été spécifié, comme une forme insérée dans le document actif. En outre, cette méthode ouvre Microsoft Office Excel avec une feuille qui contient les données par défaut utilisées par Microsoft Office Word pour créer le graphique.

AddHorizontalLine

Ajoute une ligne horizontale créée à partir d'un fichier image au document actif.

AddHorizontalLineStandard

Ajoute une ligne horizontale au document actif.

AddOLEControl

Crée un contrôle ActiveX (anciennement contrôle OLE). Renvoie l'objet InlineShape qui représente le nouveau contrôle ActiveX.

AddOLEObject

Crée un objet OLE. Renvoie l'objet InlineShape qui représente le nouvel objet OLE.

AddPicture

Ajoute une image à un document. Renvoie un objet Shape qui représente l'image.

AddPictureBullet

Ajoute une puce image provenant d'un fichier image dans le document actif. Renvoie un objet InlineShape.

Il est possible de convertir un Objet InLineShape en Shape.

Dans un sens

ActiveDocument.Shapes(1).ConvertToInlineShape

Ou dans l'autre

ActiveDocument.InlineShapes(1).ConvertToShape

On peut aussi ajouter un objet Shape.

Sub AddShape()
Dim myDoc As Document

Set myDoc = Documents.Add
myDoc.Shapes.AddShape msoShapeRectangle, 5, 25, 100, 50

End Sub

3-A-1-w - LineNumbering

Coolection qui contient la numérotation des lignes d'un document. Cette numérotation se situe dans la marge.

Numérotation des lignes

Sub NumberingLines()
With ActiveDocument.Sections(1).PageSetup.LineNumbering
.Active = True
.CountBy = 5
.RestartMode = wdRestartPage ' wdRestartContinuous; wdRestartSection
End With
End Sub

Pour certains documents officiel, il est intéressant de pouvoir utiliser cette numérotation.

3-A-1-x - List

Représente un format de liste donné qui a été appliqué aux paragraphes spécifiés d'un document.

Liste

Sub NbreListe()
Dim lst As List
For Each lst In ActiveDocument.Lists
Debug.Print lst.CountNumberedItems
lst.ConvertNumbersToText
Next lst
End Sub

Méthode intéressante, la conversion des numéro de liste en texte.

3-A-1-y - ListEntries

Collection d'objets ListEntry qui représentent les éléments contenus dans un champ de formulaire de type liste déroulante.
Dans le cadre d'utilisation de formulaires, on peut remplir les listes déroulantes par VBA.

Ajout d'éléments à une liste

Sub AddListDeroul()

Dim myRange As Range
Set myRange = ActiveDocument.Paragraphs(1).Range
ActiveDocument.FormFields.Add Range:=myRange, Type:=wdFieldFormDropDown
With ActiveDocument.FormFields(1).DropDown.ListEntries
.Add Name:="Element 2"
.Add Name:="Element 1"
.Add Name:="Element 3"
End With

End Sub

3-A-1-z - ListFormat

Représente les attributs de mise en forme de liste qui peuvent être appliqués aux paragraphes d'une plage.
Cette propriété est en relation directe avec la propriété "LineNumbering" (3-A-1-x).

Si l'on désire appliquer une liste à puce pour les paragraphes 2 à 4, on pourras utiliser le code suivant :

Sub NumberingListe()
Dim myRange As Range
Set myRange = ActiveDocument.Range(ActiveDocument.Paragraphs(2).Range.Start, ActiveDocument.Paragraphs(4).Range.End)
myRange.ListFormat.ApplyBulletDefault

End Sub

ActiveDocument.Paragraphs(2).Range.Start represente le second paragraphe pris dès le début, si nous avions placé End à la place de start, ce paragraphe n'aurait pas été pris en compte pour la liste à puce.
Set myRange = ActiveDocument.Range(ActiveDocument.Paragraphs(2).Range.Start, ActiveDocument.Paragraphs(4).Range.End) permet de défir une plage de données avec un début et une fin.

3-A-1-aa - ListGalleries

Collection d'objets ListGallery qui représentent les trois onglets de la boîte de dialogue Puces et numéros.

Sub NumberingListe()
Dim myRange As Range
Dim temp3

Set temp3 = ListGalleries(wdNumberGallery).ListTemplates(2)

Set myRange = ActiveDocument.Range(ActiveDocument.Paragraphs(2).Range.Start, ActiveDocument.Paragraphs(4).Range.End)
myRange.ListFormat.ApplyListTemplate ListTemplate:=temp3

End Sub

Paramètre

ListGalleries()

wdBulletGallery

Liste à puce

wdNumberGallery

Liste numérotée

wdOutlineNumberGallery

Liste numérotée hiérachique

Pour la "ListTemplate", j evous laisse faire quelques essais, en fonction de l'index choisi, on se retrouve avec des puces ou numéros différents.

3-A-1-ab - ListLevel

Représente un niveau de liste donné, qui correspond soit au seul niveau disponible dans le cas d'une liste à puces ou numérotée, soit à l'un des neuf niveaux dans le cas d'une liste numérotée de type plan.

Sub NumberingListe()
Dim myRange As Range
Dim temp3
Set temp3 = ListGalleries(wdNumberGallery).ListTemplates(1)
Set myRange = ActiveDocument.Range(ActiveDocument.Paragraphs(2).Range.Start, ActiveDocument.Paragraphs(4).Range.End)
myRange.ListFormat.ApplyListTemplate ListTemplate:=temp3
ActiveDocument.ListTemplates(1).ListLevels(1).StartAt = 4
End Sub

Le code ci-dessus a été modifié et il commence maintenant à 4.

3-A-1-ac - ListParagraphs

Represente la collection des paragraphes qui sont impacté par une liste.

si on exécute les lignes suivantes à la suites des lignes de la propriété précédente, on colore en truquoise les paragaphes numérotés.

Sub ParaColorChange()
Dim para As Paragraph
For Each para In ActiveDocument.ListParagraphs
para.Range.HighlightColorIndex = wdTurquoise
Next para

3-A-1-ad - MailMerge

Représente la fonction de publipostage de Word.
Une section entrière va être réservée à la fonction MailMerge.

3-A-1-ae - OMath

Représente une équation. Les objets OMath sont membres de la collection OMaths.

Sub equat()
Dim objRange As Range
Dim objEq As OMath

Set objRange = Selection.Range
objRange.Text = "Celsius = (5/9)(Fahrenheit  32)"
Set objRange = Selection.OMaths.Add(objRange)
Set objEq = objRange.OMaths(1)
objEq.BuildUp
End Sub

Avec : objRange.Text = "Cercle = ((Beta.l)/(Beta.Pi))" on obtient ceci :

3-A-1-af - PageSetup

Renvoie un objet PageSetup associé au document spécifié.

Une fonction très importante est "CentimetersToPoints". Convertit en points une mesure exprimée en centimètres (1 centimètre = 28,35 points). Renvoie le résultat en tant que donnée de type Single.

Sub MiseEnPage()
With ActiveDocument.PageSetup
.LeftMargin = CentimetersToPoints(2)
.RightMargin = CentimetersToPoints(2)
.TopMargin = CentimetersToPoints(2.5)
.BottomMargin = CentimetersToPoints(2.5)
End With
End Sub

Mais la définition des marges n'est pas la seule option disponible pour la mise en page.

3-A-1-af-i - BookFoldPrinting

Mise à vrai "True" cette propriété permet d'imprimer en livret.

Impression en livret

.BookFoldPrinting = True

3-A-1-af-ii - CharsLine

Limite le nombre de caractères par ligne. Si vous mettez la valeur à 2, nous n'aurez plus que 2 caractères par ligne.

Nombre de caractères par ligne

.CharsLine = 20

3-A-1-af-iii - DifferentFirstPageHeaderFooter

Cette propriété permet de générer une première page différente.

Première page différente

Sub premierepage()
Dim sec As Section
For Each sec In ActiveDocument.Sections
With sec.PageSetup
.DifferentFirstPageHeaderFooter = True
With sec.Headers(wdHeaderFooterPrimary)
.LinkToPrevious = False
End With

End With
Next sec
End Sub

Le code ci-dessus va insérer une première page différente pour chaque section du document et va briser le lien avec la section précédente.

3-A-1-af-iv - FirstPageTray

Beaucoup d'entreprises possèdent un papier à entête qui est généralement utilisé pour les pages de garde des documents. Aujouté au fait que la plupart des imprimantes possèdent plusieurs bacs d'alimentation, il est prévu d'alimenter en parpier différent la première page des documents.

ActiveDocument.PageSetup.FirstPageTray = wdPrinterManualFeed

Vous erez amené avec ce code à mettre une feuille dans le bac d'alimentation manuel de l'imprimante. Plus sérieusement, il est possible d'utiliser le wbPrinterLowerBin, wdPrinterUpperBin, wdPrinterMiddleBin, ...

3-A-1-af-v - FooterDistance et HeaderDistance

Permet de définir la distance qui va séparer le peid ou l'entête de page du bord de la page.

ActiveDocument.PageSetup.FooterDistance = CentimetersToPoints(15)

3-A-1-af-vi - Orientation

Prorpiété qui définit l'orientation à donner au document. Il n'y a que deux choix, Portrait ou Paysage.

ActiveDocument.PageSetup.Orientation = wdOrientLandscape 'wdOrientPortrait

3-A-1-af-vii - TextColumns

Propriété qui permet lors de la mise en page d'avoir le texte en colonne. ar défaut, le texte comporte au moins une colonne.

Sub Colo()
With ActiveDocument.PageSetup.TextColumns
.SetCount NumColumns:=2
End With
End Sub

3-A-1-ag - Path

Renvoie une donnée de type texte contenant le chemin du document. Si le document n'a pas encore été sauvegardé, la chaîne de caractère est vide.

ActviDocument.Path

En complément, on peut citer la propriété Name qui retourne le nom du document et aussi la propriété FullName qui renvoie le chemin du document et le nom de fichier.

ActiveDocument.Name
ActiveDocument.FullName

3-A-1-ah - PrintFormsData

Cette prorpiété lorsqu'elle est sur True, permet d'imprimer les données d'un formulaire.

ActiveDocument.PrintFormsData = True
ActiveDocument.PrintOut

3-A-1-ai - PrintRevisions

Cette prorpiété lorsqu'elle est à True imprime les marques de révision d'un document.

ActiveDocument.PrintRevisions = False

3-A-1-aj - ProtectionType

Renvoie le type de protection pour le document spécifié. Il peut s'agir d'une des constantes WdProtectionType suivantes : wdAllowOnlyComments, wdAllowOnlyFormFields, wdAllowOnlyReading, wdAllowOnlyRevisions ou wdNoProtection.

La protection s'obtient par le code suivant :

Protection de Formulaire

Sub ProtectFormu()
ActiveDocument.Protect Type:=wdAllowOnlyFormFields
End Sub

La syntaxe est ActiveDocument.Protect Type:=wdAllowOnlyReading, Noreset:= ,Password:="Password"

Supprimer la protection

Sub DeverrFormu()
ActiveDocument.Protect Type:=wdNoProtection

End Sub

Ou encore

ActiveDocument.Unprotect

On obtient le type de protection :

If ActiveDocument.ProtectionType = wdNoProtection Then
MsgBox "Le document n'est pas protégé !"
End If

3-A-1-ak - RemoveDateAndTime et RemovePersonalInformation

Ces deux propriétés vont si elles sont mise à True supprimer les informations concernant la date et les informations personnelles du document. Dans le cas de distribution de fichiers par exemple.

Suppression d'informations

ActiveDocument.RemovePersonalInformation = True
ActiveDocument.RemoveDateAndTime = True

3-A-1-al - Saved

Propriété qui renvoie l'état de sauvegarde du document. Si cette prorpiété est à False, Word affichera une boîte de dialogue vous proposant la sauvegarde du document. On peut forcer la valeur de cette propriété.

ActiveDocument.Saved = True

Ce code fera "croire" à Word que le document a été sauvegardé.

3-A-1-am - SaveFormsData

Propriété qui détermine si seule les données du formulaire doivent être sauvegardées. Lorsque cette propriété est Vraie, le document est sauvegardé au format texte avec des données séparées par des ";". Il devient alors plus facile de les utiliser dans une base de données.

ActiveDocument.SaveFormsData = True

3-A-1-an - Sections

Renvoie une collection Section qui représente les sections du document spécifié. On adresse la section par son Index.

Sub SectionMiseEnPage()
With ActiveDocument.Sections(2).PageSetup
.Orientation = wdOrientLandscape
.CharsLine = 10
With .LineNumbering
.Active = True
.CountBy = 2
End With
End With
End Sub

Ce code va changer l'orientation des pages de la seconde section du document, limiter le nombre de caractères par ligne à 10, activer la numérotation des lignes par 2.

3-A-1-ao - Sentences

Renvoie une collection Sentences qui représente toutes les phrases du document. Sentences ou Phrase représente la portion de texte qui compose une phrase, cette protion de texte s'arrête aux points.

Sub Phrase()
Dim stTemp As String

stTemp = ActiveDocument.Sentences(1)
stTemp = stTemp & ".docx"
ActiveDocument.SaveAs stTemp

End Sub

Avec ce code, on va lors de la sauvegarde du document lui donner un nom qui sera le texte de la première phrase du document.

Sub LettreMajuscule()
Dim r As Range
Dim i As Integer

Debug.Print ActiveDocument.Sentences.Count
For i = 1 To ActiveDocument.Sentences.Count
Debug.Print ActiveDocument.Sentences(i).Text
ActiveDocument.Sentences(i).Select
Selection.Text = UCase(Left(Selection.Text, 1)) & Right(Selection.Text, (Len(Selection.Text) - 1))
Next i

End Sub

Ce code va mettre en majuscule la première lettre de chaque phrase du document.

3-A-1-ap - Styles

Représente la collection de styles du document spécifié.
Il existe deux types de style, les styles prédéfinis dans l'applicaton et les styles définis par l'utilisateur.
On peut adresser les styles de deux manières différentes : la première par l'index du style (peu pratique), la seconde par le nom du style, si c'est un BuiltInStyle, son nom commencera par wd : wdStyleHeading1 pour le titre 1; on peut aussi l'adresser par le nom qui est affiché dans l'interface graphique "Titre 1".
La première notation est à préférer à la seconde par son universalité, si votre document est distribué et utilisé par des utilisateurs ayant une autre version linguistique de Word, wdStyleHeading1 sera reconnu, alors que Titre 1 ne le sera pas.

Sub AjoutTitre1()
Dim para As Paragraph
For Each para In ActiveDocument.Paragraphs
If Trim(para.Range.Words(1).Text) = "Chapitre" Then
para.Style = ActiveDocument.Styles(wdStyleHeading1) 'l'utilisation de ("Titre 1") aurait eu le même effet.
End If
Next para
End Sub

Il est possible de modifier les attributs d'un style lors de son utilisation.

ActiveDocument.Styles(wdStyleHeading1).Font.Bold = False

Il est également possible de créer un nouveau style en VBA, et pour l'interface graphique, il faut définir un style qui servira de base.

Sub NewStyleOli()
Dim docNew As Document
Dim styleNew As Style

Set docNew = Documents.Add
Set styleNew = docNew.Styles.Add("Olivier01")
With styleNew
.BaseStyle = docNew.Styles(wdStyleHeading1)
.ParagraphFormat.LeftIndent = 72
.Font.Animation = wdAnimationBlinkingBackground
End With
End Sub

Le résultat :

Le nouveau Style est disponible

3-A-1-aq - TablesOfContents (TOC)

Renvoie une collection TablesOfContents qui représente les tables des matières contenues dans le document spécifié.

Sub TOCAjout()
Dim myRange As Range
Dim myToc As TableOfContents

Set myRange = ActiveDocument.Range(Start:=0, End:=0)
If ActiveDocument.TablesOfContents.Count <> 0 Then
For Each myToc In ActiveDocument.TablesOfContents
myToc.Update
Next myToc
Else
ActiveDocument.TablesOfContents.Add myRange, UseHeadingStyles:=True, UpperHeadingLevel:=1, LowerHeadingLevel:=3

End If

End Sub

Avec ce code, on va vérifier la présence d'au moins une table des matières sur le document, si la table existe, on va la mettre à jour et si elle n'existe pas, on va la créer.
Ne sachan pas combien de tables peuvent exister dans le document, je fais une boucle sur la collection.

3-A-1-ar - Words

Words représente la collection des mots d'un objet Range. Seulement, contrairement aux autre collections, Il n'y a pas de Word, puisque Word est l'objet Application. Et curieusement, un mot, appartenant à la collection Words est une Range.

Sub TestWords()
Dim aWd As Range
For Each aWd In ActiveDocument.Words
Debug.Print Len(aWd)
Next aWd

End Sub

3-A-1-as - Variables

Renvoie une collection Variables qui représente les variables stockées dans le document spécifié.
On peut utiliser ces variables pour stocker certaines informations qui devront être réutilisées ultérieurment, comme une numérotation, une série de date, un historique,...

Le principe est assez simple, on affecte au document une variable. On peut adresser une variable par son nom ou par son index.

ActiveDocument.Variables.Add Name:="maVariable"

Lorsque la variable est ajoutée au document, on peut lui affecter une valeur.

ActiveDocument.Variables("maVariable").Value:="La Valeur"

On peut le faire en une seule opération :

ActiveDocument.Variables.Add Name:="maVariable", Value:="Ma Valeur"

Si la variable existe déjà, on reçoit un message d'erreur '5903'. Il est donc préférable avant d'ajouter une variable à un document, vérifier qu'elle n'existe pas !
On peut aussi gérer l'erreur et si on lève l'erreur '5903', on passe directement à l'affectation de la valeur.

Sub AddVar()
On Error GoTo monErr
ActiveDocument.Variables.Add Name:="maVariable"
monErr:
ActiveDocument.Variables("maVariable").Value = "Ma Valeur"
End Sub

Pour vérifier que la variable n'existe pas, il faut obtenir son index.

Sub AddVar()
Dim aVar As Variable
Dim num as Integer
For Each aVar In ActiveDocument.Variables
If aVar.Name = "maVariable" Then num = aVar.Index
Next aVar
If num = 0 Then
ActiveDocument.Variables.Add Name:="maVariable", Value:=6
Else
ActiveDocument.Variables(num).Value = 6
End If
End Sub

3-A-2 - Méthodes

3-A-2-a - AcceptAllRevisions

Methode qui permet d'accepter toutes les modifictions du document spécifié.

ActiveDocument.AcceptAllRevisions

On peut associer cette méthode à la suivante qui accepte les modifications affichées.

ActiveDocument.AcceptAllRevisionsShown

3-A-2-b - Activate

Méthode qui va activer un document à condition qu'il soit ouvert, si le document n'est pas ouvert, il faut l'ouvrir. Elle ne s'applique pas à ActiveDocument.
Pour activer un document, on peut passer par le nom du document ou par son index. La première solution et de loin la plus facile à condition que les documents aient été précédemment sauvegardés.

Activer un document

Sub ActiverDoc()
Documents("ListeNum.docm").Activate

End Sub

Tenter d'activer un document avec un nom erroné, ou un document qui n'est pas ouvert lève une erreur '4160'.

3-A-2-c - ApplyDocumentTheme

Disponible deuis la version 2007, cette méthode permet d'appliquer à un document un thème.
Une thème est une association de mise en forme du document.
Aspect intéressant des thèmes, ils sont disponibles pour toutes les applications office.

Thèmes de document

ActiveDocument.ApplyDocumentTheme "f:\Program Files\Microsoft Office\Document Themes 12\Aspect.thmx"

3-A-2-d - ApplyQuickStyleSet

Modifie le jeu de Style rapide appliqué au document.
Ce jeu de style peut être modifié et vous pouvez ajouter vos propres styles rapides.

Appliquer un jeu de style rapide

ActiveDocument.ApplyQuickStyleSet ("Moderne")

3-A-2-e - ApplyTheme

Applique un thème (ensemble d'éléments de conception unifiés qui donnent un aspect cohérent à votre document en utilisant des couleurs, des polices et des graphismes) à un document ouvert.
Vous trouverez la liste des thèmes disponible dans le répertoire suivant : F:\Program Files\Fichiers communs\Microsoft Shared\THEMESXX
XX

ActiveDocument.ApplyTheme "Compass 111"

ActiveDocument.ApplyTheme "Compass 110"

Le paramètre passé à la méthode se compose de deux éléments.
Le premier est le nom du répertoire qui contient les Thèmes.
Le second composé de 3 booléens avec la premiére posistion qui répresent les couleurs vives pour la police, la seconde position, l'activation d'images animées et le troisième l'image de fond du document.

Les répertoires contenant les thèmes

3-A-2-f - CheckGrammar et CheckSpelling

CheckGrammar lance la vérification de l'orthographe et de la grammaire dans la plage ou le document spécifié, alors que CheckSpelling lance la correction orthographique du document.

ActiveDocument.CheckGrammar 'CheckSpelling

3-A-2-g - Close

La méthode Close permet de fermer un document, ce document peut être le document actif, ou un autre document de la collection Documents.
Pour le document ouvert, on appliquera la méthode à l'ActiveDocument, si le document n'est pas le document actif, on adressera le document par son nom ou par son index.
La méthode close est appliquée avec certains paramètres.

Paramètres

Valeurs

Résultats

SaveChanges

wdDoNotSaveChanges

Ne pas sauvegarder les changements

wdPromptToSaveChanges

Demander à l'utilisateur

wdSaveChanges

Sauvegarder les changement

OriginalFormat

wdOriginalDocumentFormat

Savegarde dans le format original du document

wdPromptUser

Demander à l'utilisateur

wdWordDocument

Document Word

RouteDocument

Facultatif True

ActiveDocument.Close SaveChanges:=wdPromptToSaveChanges, OriginalFormat:=wdWordDocument

3-A-2-h - Compare

Affiche des marques de révision qui indiquent en quoi le document spécifié diffère d'un autre document.
Nous allons comparer le document actif avec un autre document sauvegardé.

Comparaison de documents

Sub TestComparer()
Dim rev As Revision
Dim res As Byte

ActiveDocument.Compare "Les Lumières.docm"
For Each rev In ActiveDocument.Revisions
res = MsgBox(rev.Range.Text, vbOKCancel)
If res = 1 Then rev.Accept
Next rev

End Sub

La possibilité de détecter les changements de format existe. Le code ci-dessous a été modifié pour prendre ne compte les changements de format.

ActiveDocument.Compare Name:="Les Lumières sont ce qui fait sortir l.docm", DetectFormatChanges:=True

3-A-2-i - Convert

Fonctionnalité ajoutée à la version 2007. Cette méthode convertit le document dans le format de fichier le plus récent. En gros, si vous avez un .doc et que vous souhaitez le convertir en .docx, c'est la méthode à utiliser.

Documents("monDoc.doc").Convert

3-A-2-j - ConvertNumbersToText

Convertit en texte les numéros de liste et les champs LISTNUM dans le document spécifié. Propriété intéressante si vous désirez utiliser le contenu de votre document dans une autre application.

Une fois utilisée, la numérotation automatique est interrompue, n'utilisez cette méthode que lorsque votre document est terminé.

Conversion de la numérotation de paragraphe en texte.

ActiveDocument.ConvertNumbersToText

3-A-2-k - CopyStylesFromTemplate

Méthode qui permet de copier les styles d'un modèle vers un document ou un autre modèle.

Documents("Les lumières.docx").CopyStylesFromTemplate Template:="F:\Program Files\Microsoft Office\Templates\1036\MedianLetter.Dotx"

3-A-2-l - DataForm

Affiche la boîte de dialogue Formulaire de données, qui vous permet d'ajouter, de supprimer ou de modifier des enregistrements.

Un DataForm

ActiveDocument.DataForm

Si il n'exite pas de table dans le document, une erreur est levée. Il est donc préférable de vérifier la présence d'une table avant d'utiliser cette méthode et éventuellement en créer une table.
Si le document contient plusieurs tables, seule la table contenant la sélection est prise en compte. En plus de vérifier la présence d'une table, il sera important de tenir aussi compte du nombre de tables.

Ouverture d'un Dataform

Sub OuvrirDataForm()
'Déclaration des variables
Dim aDoc As Document
Dim tbl As Table
Dim nbTbl As Integer
Dim chxTbl As Integer

'Nombre de tableaux présents dans le document
nbTbl = ActiveDocument.Tables.Count

'Structure décisionnelle afin de déterminer quel tableau sera utilisé
Select Case nbTbl
Case 0 'Aucun tableau dans le document
Set aDoc = Documents.Add
With aDoc
.Tables.Add Range:=aDoc.Content, NumRows:=2, NumColumns:=2
.Tables(1).Cell(1, 1).Range.Text = "Name"
.Tables(1).Cell(1, 2).Range.Text = "Age"
.DataForm
End With
Case 1    'Une seule table
ActiveDocument.DataForm
Case Else    'Plusieurs tables
chxTbl = InputBox("Entrez un index de table entre 1 et " & nbTbl & " !", "Choix d'un tableau", 1)
If chxTbl > nbTbl Then
MsgBox ("Ce tableau n'existe pas !!")
Exit Sub
End If
ActiveDocument.Tables(chxTbl).Range.Select
ActiveDocument.DataForm
End Select
End Sub

Dans le code ci dessusn nous allons avant d'ouvrir le DataForm vérifier le nombre de tables présentes dans le document. Si il n'y a pas de table, nous allons en créer une, si il n'y a qu'une seule table, nous allons l'utiliser, si le document, comporte plusieurs tables, nous allons proposer à l'utilisateur de choisir une table. Si l'index de la table n'existe pas, nous allons avertir l'utilisateur et terminer la procédure.

3-A-2-m - DowngradeDocument

Alors que Convert permet de convertir des documents .doc en .docx, DowngradeDocument pemret de faire l'opération dans l'autre sens. Je vous déconsille de convertir les documents pour les versions antérieures, il existe un pack de compatibilité qui permet d'utiliser des documents OfficeOpenXML avec les versions antérieures de Word.
La raison est assez simple, les document OfficeOpenXML sont plus robustes que les documents propriétaires.
Je vous propose un petit test, changez l'extension de votre document de .docx en .zip, ouvrez le fichier obtenu et vous allez pouvoir explorer le contenu du document. Ce document va contenir des fichier .xml qui sont éditable avec n'importel quel éditeur de texte classique,

Conversion d'un document pour une version antérieure de Word

ActiveDocument.DowngradeDocument

3-A-2-n - ExportAsFixedFormat

Méthode ajoutée avec la version 2007, cette méthode permet l'export d'un document vers le format XPS ou PDF. Utilistaire de conversion PDF et XPS

Si l'utilitaire de conversion n'est pas installé sur votre PC, vous devez l'installer pour utiliser cette méthode.

L'authenticité de votre installation sera vérifiée.

ActiveDocument.ExportAsFixedFormat "Mon Test.pdf", wdExportFormatPDF, True, _
wdExportOptimizeForPrint, wdExportAllDocument, , , wdExportDocumentContent, _
True, True, wdExportCreateHeadingBookmarks, True, True

Paramètres

Valeurs

OutputFileName

Nom du ficher

wdExportFormat

wdExportFormatPDF
wdExportFormatXPS

OpenAfterExport

True
False

WdExportOptimizeFor

wdExportOptimizeForOnScreen
wdExportOptimizeForPrint

WdExportRange

wdExportAllDocument
wdExportCurrentPage
wdExportFromTo
wdExportSelection

From To

A utiliser aver wdExportFromTo

WdExportItem

wdExportDocumentContent
wdExportDocumentWithMarkup

IncludeDocProps

True False

KeepIRM

True False

WdExportCreateBookmarks

wdExportCreateHeadingBookmarks
wdExportCreateNoBookmarks
wdExportCreateWordBookmarks

BitMapMissingFonts

True False

3-A-2-o - FitToPages

Diminue la taille des caractères du texte de sorte que le document puisse occuper une page de moins.

ActiveDocument.FitToPages

3-A-2-p - GoTo

Renvoie un objet Range qui représente la position de début de l'élément spécifié comme une page, un signet ou un champ.

Activedocument.GoTo What:= , Which:= , Count:= , Name:=

Paramètres

Valeurs

What

wdGoToBookmark
wdGoToComment
wdGoToEndnote
wdGoToEquation
wdGoToField
wdGoToFootnote
wdGoToGrammaticalError
wdGoToGraphic
wdGoToHeading
wdGoToLine
wdGoToObject
wdGoToPage
wdGoToPercent
wdGoToProofreadingError
wdGoToSection
wdGoToSpellingError
wdGoToTable

which

wdGoToAbsolute
wdGoToFirst
wdGoToLast
wdGoToNext
wdGoToPrevious
wdGoToRelative

Count

Name

3-A-2-q - Post

Publie le document spécifié dans un dossier public de Microsoft Exchange

ActiveDocument.Post

Ce code ouvre une boîte de dialogue vous demandant de spécifier le dossier de publication. il est nécessaire d'avoir les droits en écriture sur ce dossier pour que la manipulation réussisse.

Dossier Exchange

3-A-2-r - PresentIt

Ouvre une présentation avec le contenu du document.

ActiveDocument.PresentIt

Pour obtenir une présentation convenable vous devez avoir un document avec une structure hiérachique.

3-A-2-s - PrintOut

Imprime le document en tout ou en partie en fonction des paramètres passé à la fonction.

ActiveDocument.PrintOut Background:= , Append:=, Range:=,OutputFileName:=,From:=,To:=,Item:=,Copie:=,Page:=,PageType:=,PrintToFile:=, _
Collate:=, ActivePrinterMacGX:=,ManualDuplexPrint:=,PrintZoomColumn:=,PrintZoomRow:=,PrintZoomPaperWidth:=,PrintZoomPaperHeight:=

Paramètres

Valeurs

Résultats

BackGround

True or False

L'exécution de la macro continue pendant l'impression du document.

Append

True or False

True : pour ajouter le document spécifié au nom de fichier indiqué par l'argument NomFichierSortie, False : pour remplacer le nom de fichier spécifié par l'argument NomFichierSortie.

Range

wdPrintRangeOfPages

Étendue de pages.

OutpuFileName

NomDeFichier

Uniquement si PrintToFile est True

From

Nombre

Page de début

To

Nombre

Page de fin

Item

wdPrintDocumentContent

Copie

Nombre

Nombre de pages à imprimer

Page

Nombre

Numéro de page à imprimer, Range et Item sont à renseigner.

PageType

WdPrintOutPages

PrintToFile

True or False

Impression dans un fichier

Collate

True or False

True : Imprime les documents un à la fois, False, les pages unes à unes

ActivePrinterMacGX

option pour MAC

ManualDuplexPrint

True or False

Permet d'imprimer en recto verso si l'imprimante ne le permet pas.

3-A-2-t - PrintPreview

Affiche le document en apperçu avant impression.

ActiveDocument.PrintPreview

3-A-2-u - Protect

Methode qui permet d'active la protection d'un document. Lors de l'activation de la protection, la méthode de protection sera définie.

ActiveDocument.Protect WdProtectionType:=wdAllowOnlyFormFields, Password:="MotDePasse"

WdProtectionType

- wdAllowOnlyComments

- wdAllowOnlyFormFields

- wdAllowOnlyReading

- wdAllowOnlyRevisions

- wdNoProtection

3-A-2-v - Range

Renvoie un objet Range en utilisant les positions spécifiées des caractères de début et de fin.

Sub testRange()
ActiveDocument.Range(Start:=0, End:=10).Select
With Selection
.Font.Bold = True
.Font.Size = 20
End With
End Sub

Le code ci-dessus va définir un objet range qui va commencer devant le premier caractère du texte et finir dérrière le dixième caractère pour ensuite les mettre en gras et avec ue taille de 20 points.

3-A-2-w - RemoveDocumentInformation

Ajoutée avec la version 2007, cette méthode permet d'enlever du document toutes les informations.

ActiveDocument.RemoveDocumentInformation (wdRDIAll)

Prarmètres

- wdRDIAll

- wdRDIComments

- wdRDIContentType

- wdRDIDocumentManagementPolicy

- wdRDIDocumentProperties

- wdRDIDocumentServerProperties

- wdRDIDocumentWorkSpace

3-A-2-x - ResetFormFields

Efface le contenu de tous les champs de formulaire d'un document afin que vous puissiez remplir le formulaire de nouveau.

Sub ClearFormFields()
If ActiveDocument.ProtectionType <> wdAllowOnlyFormFields Then ActiveDocument.Protect Type:=wdAllowOnlyFormFields
ActiveDocument.Unprotect
ActiveDocument.ResetFormFields
ActiveDocument.Protect Type:=wdAllowOnlyFormFields
End Sub

3-A-2-y - RunLetterWizard

Démarre l'Assistant Courrier pour le document spécifié.

Public Sub LettreAssistant()
Dim myContent As LetterContent
Set myContent = New LetterContent
With myContent
.Subject = "Sujet de ma lettre"
.Salutation = "Hello"
.SalutationType = wdSalutationOther
.SenderName = Application.UserName
.SenderInitials = Application.UserInitials
End With
Documents.Add.RunLetterWizard LetterContent:=myContent, WizardMode:=True
End Sub

Voici le résultat, l'ouverture de l'assistant.

3-A-2-z - Save

Enregistre les documents de la collection document.

Enregistrement du document en cours

ActiveDocument.Save NoPrompt:=True, OriginalFormat:=wdOriginalDocumentFormat

Enregistrement de tous les documents ouverts

Documents.Save NoPrompt:=True, OriginalFormat:=wdOriginalDocumentFormat

Ce code va aussi fonctionner.

Avec une invite

Documents.Save Noprompt:=True, OriginalFormat:=wdPromptUser

WdOriginalFormat

- wdOriginalDocumentFormat

- wdPromptUser

- wdWordDocument

On peut aussi faire un test afin de déterminer l'état de sauvegarde du document. On va faire appel à la propriété Saved si elle est à True, le document n'a pas besoin d'être sauvegardé.

If Not ActiveDocument.Saved Then Documents.Save Noprompt:=False, OriginalFormat:=wdOriginalDocumentFormat

3-A-2-aa - SaveAs

Enregistre le document spécifié sous un nouveau nom ou format. Certains arguments utilisés pour cette méthode correspondent aux options de la boîte de dialogue

ActiveDocument.SaveAs FileName:=, FileFormat:=, LockComments:=,Password:=, AddToRecentFiles:=,WritePassword:=,ReadOnlyRecommended, _
EmbedTrueTypeFonts:=,SaveNativePictureFormat:=,SaveFormsData:=,SaveAsOCELetter:=, Encoding:=,InsertLineBreaks:=,AllowSubstitutions:=, _
LineEnding:=, AddBiDiMarks:=

Arguments

Valeurs

Résultat

FileName

Nom de fichier, peut aussi contenir le chemin

FileFormat

WdSaveFormat

wdFormatDocumentDefault -> .docx wdFormatDocument -> .doc wdFormatRTF -> .rft wdFormatXML -> .xml

LockComments

True ou False

Verrouille les commentaires

Password

Chaîne de caractères

Microsoft déconseille l'utilisation des mots de passe sur vos documents.

AddToRecentFiles

True ou False

Ajout du fichier dans la liste des documents récents

WritePassword

Cahîne de caractères

Microsoft déconseille l'utilisation des mots de passe sur vos documents.

ReadOnlyRecommended

True ou False

EmbedTrueTypeFonts

True ou EmbedTrueTypeFonts

Permet d'enregistrer les polices de caractères avec le document. Nécessaire si vous distrbuez votre document

SaveNativePictureFormat

True ou False

True permet de convertir les fichiers en format compatibles Windows

SaveFormsData

True ou False

Permet l'enregistrement des données de Formulaire comme un enregistrement.

SaveAsOCELetter

Valable si l document possède un bordereau de routage.

Encoding

MSOEncoding

msoEncodingUTF8 D'autre encodeage sont disponibles.

InsertLineBreaks

True ou False

Ajoute un saut de ligne si votre document est enregistré au format texte.

AllowSubstitutions

True ou False

Autorise la substitution de certains caractères par des équivalents lorsque le document est sauvegardé en format texte.

LineEnding

wdCRLF ou wdCROnly

Indique la manière dont Word marque les sauts de ligne et de paragraphe dans les documents enregistrés sous forme de fichiers texte

AddBiDiMarks

True

Il est nécessaire d'avoir une certaine cohésion, il est déconseillé de donner une extension au fichier .rtf et de mettre comme format de sauvegarde wdFormatDocument. On se retrouve avec une incompatibilité.

Sub SaveAsRTF()
ActiveDocument.SaveAs FileName:="Text.rtf", _
FileFormat:=wdFormatRTF
End Sub

3-A-2-ab - Select

Sélectionne le contenu du document spécifié.

ActiveDocument.Select

Ou encore :

Documents(1).Select

La méthode Select peut s'appliquer à beaucoup de collections et objets. On manipule l'objet renvoyé par Select avec la Selection.

ActiveDocument.Sentences(2).Select

représentera la seconde phrase du document.

With Selection
.Font.Size = 20
.Font.Bold = True
End With

appliquera les modifiction à la selection, donc la seconde phrase de notre document.

3-A-2-ac - SendMail

Permet l'envoi de votre document en tant que pièce jointe d'un message.
Avec l'option SendMailAttach, il est toutefois possible de spécifier le mode d'envoi du document, soit en pièce jointe, soit en corps de message.

Options.SendMailAttach = True
ActiveDocument.SendMAil

3-A-2-ad - Undo

Annule la dernière action ou une séquence d'actions affichées dans la liste Annuler. Cette méthode renvoie la valeur True si les actions ont été annulées avec succès. Cette méthode a le même effet que Ctrl + Z.

ActiveDocument.Undo 10

Ce code va annuler les dix dernières actions, et ci-dessous aficher dans la barre des tâches si l'opération a été un succès.

If ActiveDocument.Undo = False Then _
StatusBar = "Annulation réussie"

3-A-2-ae - UndoClear

Méthode qui va effacer la liste des annulations dans la liste. Si vous désirez empêcher l'utilisateur de supprimer les actions effectuées par votre code, cette méthode devient intéressante.

ActiveDocument.UndoClear

3-A-2-af - UnProtect

Nous avons vu plus tôt dans ce document comment mettre une protection, cette méthode fait le contraire, elle va supprimer la protection de votre document.

Le principe est identique :

ActiveDocument.Protect "MotDePasse"

3-A-3 - Évènements

3-A-3-a - Close

Évènement qui se produit lors de la fermeture d'un document.

Private Sub Document_Close()
ActiveDocument.Save
End Sub

3-A-3-b - New

Évènement qui se produit lors de la création d'un nouveau document. Cette procédure peut être stockée dans un modèle ou dans un document déjà ouvert.

Private Sub Document_New()

End Sub

3-A-3-c - Open

Procédure qui est éxécutée lors de l'ouverture d'un document. Cette procédure peut être stockée dans le document à ouvrir ou dans un document déjà ouvert.

Private Sub Document_Open()

End Sub

3-B - Propriétés

Dans les propriétés, on retrouve Count, Parent, Application et Creator. Nous n'allons pas les explorer.

3-C - Méthodes

Les méthodes sont plus intéressantes, c'est graces aux méthodes que nous allons pouvoir Ouvrir, Ajouter,...

3-C-1 - Add

De toutes les méthodes, je trouve qu'elle est la plus intéressante et la plus importante. C'est une question d'opinion.
Renvoie un objet Document qui représente un nouveau document vide ajouté à la collection des documents ouverts.

Documents.Add Template:= , NewTemplate:= ,DocumentType:= , Visible:=

- Template:=

- NewTemplate:=

- DocumentType:=

- Visible:=

Paramètre

Valeur

Résultat

Template:=

chemin à utiliser pour le modèle

Par défaut, c'est le normal qui est utilisé

NewTemplate:=

True or False

Création d'un nouveau modèle, par défaut la valeur est False

DocumentType:=

WdNewDocumentType

La constante par défaut est wdNewBlankDocument

Visible:=

True ou False

Affiche ou cache le document. Ce n'est pas le document qui est caché, mais la fénêtre qui le contient.

Public Sub AjoutNouveauDoc()
Dim i As Integer
i = Documents.Count
Select Case i
Case 0
'Pas de document ouvert, on va en créer un
Documents.Add Template:="F:\Documents and Settings\Olivier\Application Data\Microsoft\Templates\Olivier.Dotm", _
NewTemplate:=False, DocumentType:=wdNewBlankDocument, Visible:=True
Case Else
MsgBox "Vous avez au moins un document ouvert"
End Select
End Sub

3-C-2 - Close

Ferme les documents spécifiés. Si rien n'est spécifié, tous les documents sont fermés.

3-C-3 - Open

La méthode Open permet d'ouvrir un document existant et l'ajoute à la Collection Documents.

Documents.Open (FileName:="" , ConfirmConversions:= , ReadOnly:= , AddToRecentFiles:= ,PasswordDocument:= ,PasswordTemplate:= ,revert:=, _
WritePassworddocument:= ,WritePasswordTemplate:= ,Format:= ,Encoding:=, Visible:=, OpenAndRepair:= ,DocumentDirection:=, _
NoEncodingDialog:= ,XmlTransform:= )

Voilà tous les arguments que la méthode supporte. Un argument qui me semble intéressant est "OpenAndRepair", cet argument s'il est spécifié permet de réparer un document endomagé.

Sub OpenDocu()
Documents.Open FileName:="F:\Documents and Settings\Olivier\Mes documents\Word\TutoVBA\doc1.docm"
End Sub

L'argument FileName coontient le nom du fichier, mais aussi son chemin.

3-C-4 - Save

Cette méthode va sauvegarder en une opération tous les documents Ouverts.

Documents.Save Noprompt:=, OriginalFormat:=

Si la valeur de l'argument NoPrompt est à True, la sauvegarde se passera sans afficher de boîte de dialogue. Si dans la collection un document ne possède pas de nom, l'utilisateur sera quand même invité à lui donner un nom.

wdOriginalFormat

- wdOriginalDocumentFormat => Garde le format d'origine du document

- wdPromptUser => pose la question à l'utilisateur Si vous utilisez True pour l'argument NoPrompt, l'invitation ne fonctionne pas.

- wdWordDocument => Format Word par défaut.

4 - La collection Paragraphs

Collection peuplée par les objets Paragraph. Cette collection possède des propriétés et des méthodes.

4-A - Propiétés

4-A-1 - Alignment

Renvoie ou définit l'alignement des paragraphes spécifiés. Word utilise pour cela une constante WdParagraphAlignment

WdParagraphAlignment

- wdAlignParagraphCenter -> Aligné au centre.

- wdAlignParagraphDistribute -> Les caractères du paragraphe sont distribués équitablement pour remplir toute la largeur du paragraphe.

- wdAlignParagraphJustify -> Totalement justifié.

- wdAlignParagraphJustifyHi -> Justifié avec un rapport élévé de compression de caractères.

- wdAlignParagraphJustifyLow -> Justifié avec un faible rapport de compression de caractères.

- wdAlignParagraphJustifyMed -> Justifié avec un rapport moyen de compression de caractères.

- wdAlignParagraphLeft -> Aligné à gauche.

- wdAlignParagraphRight -> Aligné à droite.

Le code permet un alignement plus riche que l'interface graphique, par l'iterface graphique , nou sn'avon saccès qu'à un seul alignement justifié, alors que via la propriété alignement du VBA, nous avons quatre possibilités.

Sub CheckAlignement()
If ActiveDocument.Paragraphs(1).Alignment = wdAlignParagraphLeft Then
ActiveDocument.Paragraphs(2).Alignment = wdAlignParagraphCenter
Else
ActiveDocument.Paragraphs(3).Alignment = wdAlignParagraphJustify
End If
End Sub

4-B - Méthodes

4-B-1 - Add

4-C - L'objet Paragraph

4-D - Propriétés

4-E - Méthodes

5 - MailMerge

6 - Tableaux

7 - En-têtes et Pieds de page

8 - Les Images et autres objets

9 - L'objet Sélection

10 - L'objet Range

11 - Quelques Fonctions

11-A - Fonctions "Texte"

11-A-1 - ASC

Renvoie une donnée de type Integer représentant le code de caractère correspondant à la première lettre d'une chaîne.

ASCII Code

MsgBox ASC("A")

On pourra lire 65 dans la boîte de message. En clair, on obtient la valeur ASCII pour la première lettre de l'expression évaluée.

11-A-2 - Chr

Renvoie une valeur de type String contenant le caractère associé au code de caractère indiqué

MsgBox Chr(65)

On obtiendra l'affichage de A

11-B - Fonctions "Numérique"

11-C - Fonctions Mathématique

11-C-1 - Atn

Renvoie une valeur de type Double indiquant l'arctangente d'un nombre.

Valeur de PI

Dim pi
pi = 4 * Atn(1)    ' Calcule la valeur de pi.

11-D - Fonctions Diverses

11-D-1 - Beep

Fonction qui emmet un signal sonnore.

11-D-2 - Choose

Sélectionne et renvoie une valeur à partir d'une liste d'arguments

Sub FnChoose()
Dim i As Integer
i = InputBox("Entrez un nombre compris entre 1 et 3 !")
MsgBox Choose(i, "Un", "Deux", "Trois")
End Sub

En fonction de la valeur de i, on aura l'affichage de Un, Deux ou Trois.

11-D-3 - Fonctions de conversion

Fonction qui permettent de passer d'un type de données à un autre.

Fonction

Vers

CBool(expression)

Booléen

CByte(expression)

Byte

CCur(expression)

Monétaire

CDate(expression)

Date

CDbl(expression)

Double

CDec(expression)

Decimal 12 10^6

CInt(expression)

Entier

CLng(expression)

Entier long

CSng(expression)

Simple

CStr(expression)

Texte

CVar(expression

Variant

11-E - Fonctions System

11-E-1 - ChDir

Pour les nostalgique du DOS, cette fonction correspond à la commande CD.

ChDir "C:\Temp"

Change le répertoire par défaut par C:\Temp en DOS, CD C:\Temp.

ChDir ".."

Remonte d'un répertoire dans l'arborescence du disque. En DOS : CD ..

12 - Mise en pratique

12-A - Un Facturier

12-B - Gestion des données par formulaire

12-C - UserForm

12-D - Travail en groupe sur le même modèle

12-E - Gestion de courrier

12-E-1 - Description

Dans cet exemple, nous allons créer un système pour la gestion du courrier. Ce système comprendra un suivi des références pour le courrier sortant, une liste de destinataires, au moins deux modèles et d'autres fioritures.
Pour les modèles, nous utiliserons un modèle de lettre et un modèle de Fax.
Nous aurons également besoin de deux tableaux, un tableau pour les adresses et un tableau pour le suivi de courrier.

12-E-3 - Les Modéles

Dans le paragraphe précédent, je mentionne l'utilisation de deux modèles, mais en fait, c'est de trois modèles qu'il est question. Les deux premiers seront les modèles qui serviront aux documents, alors que le troisième servira simplement à recevoir les macros, les UserForms. Nous aurons besoin d'un document supplémentaire pour stocker les données. Les modèles seront appelés Fax, Lettre et Accueil.

Nous allons commencer par le modèle Accueil, le document ne contiendra rien d'autre que des procédures et des UserForms. Les procédures seront initialisées lors de l'ouerture du document.

12-E-3-a - Le modèle Accueil

On va utiliser un document vierge et lui donner comme nom Accueil.dotm, le petit m est très important, parce qu'il autorise l'exécution des macro, contrairement au dotx. Vous devez suvegarder votre modèle dans un emplecment pour modèles approuvés.

Dans ce modèle, nous allons insérer un UserForm.

Pour que votre UserForm soit inséré au bone nedroit, vous devez être sur le projet Accueil et This Document.

Après insertion, voilà ce que vous devriez avoir comme résultat.

1. Votre UserForm

2. La boîte à outils

3. L'endroit où se trouve votre UserFom

4. Les propriétés de votre UserForm et son nom UserForm1

Nous allons modifier quelques propriétés.

Propriété

Valeur

Name

UF_Accueil

Caption

Accueil

Les éléments dont nous allons avoir besoin sur notre UserForm sont :

- La date (modifiable)

- La référence du document à générer

- Une liste contenant le type de document qui sera généré

- Une liste modifiable des destinataires

- Le correspondant ou rédateur du doucment.

- Un bouton de validation

Les boutons 1 et 2 vous permettent de basculer entre le formulaire et son code.

Lors de la réalistation je vais travailler avec des zones de textes qui sont selon moi beaucoup plus faciles à manipuler que des étiquettes que ne sont pas vraiment faites pour ça.

12-E-4 - Les données

Pour fonctionner correctement, nous avons besoin d'un docuent qui contient les données. Par données, j'entend le nom des utilisateurs et leurs données respectives, numéros de téléphone, Fax, département....
Le nom des destinataires les plus courants et surtout les références des documents.
Finalement les documents disponibles aisni que leu chemin d'accès.
Pour stocker ces données, nous allons utiliser des tableaux, avec un tableau, il est plus facile d'utiliser les données et surtout d'intervenir manuellement sur les données.

Quatre tableaux

- Les utilisateurs

- Les destinataires

- Les reférences

- Les documents

13 - Gestion des Erreurs

14 - Remerciements

Pour le remerciements, ça risque d'être aussi long que l'article.
Premièrement, à mon épouse qui sais parfois se montrer patiente.
Pour les membres de la rédactionde DVP, je vais faire un tableau, ce sera plus facile et j'y mettrai les liens de leur site respectif.