Developpez.com - Word
X

Choisissez d'abord la catégorieensuite la rubrique :


Débutez en VBA Word

Date de publication : 25 janvier 2009

Par Olivier Lebeau (Heureux-oli sur DVP)
 


               Version PDF (Miroir)   Version hors-ligne (Miroir)

1. Introduction
2. L'objet Application Word
3. Les documents
4. Range et Selection
5. Les paragraphes
6. Les tableaux
7. Les signets
8. Les champs
8-A. Méthodes
8-A-1. Add
8-A-2. ToggleShowCodes
8-A-3. Update
8-A-4. Unlink
8-B. Propriétés
8-B-1. Code
8-B-2. ShowCodes
8-B-3. Count
9. Les formulaires
10. Les images et autres objets graphiques
11. Les objets Range et Selection
12. Les en-têtes et les pieds de page
13. Solutions
14. Exercice complet : une application de gestion de courrier
15. Liens Utiles
16. Remerciements


1. Introduction


2. L'objet Application Word


3. Les documents


4. Range et Selection


5. Les paragraphes


6. Les tableaux


7. Les signets


8. Les champs

Il est plus courant d'utiliser les champs au travers de l'interface graphique, mais heureusement, leur utilisation est également possible dans votre code. L'utilisation des champs au travers de l'interface graphique est décrite détaillée dans ce tutoriel : Découvrez les champs et leurs applications sous Word.

Les champs les plus utilisés sont les champs de fusion et de publipostage, les champs contenant des images ou du texte, les champs relatifs aux propriétés du document et les champs relatifs aux tables et index.

warning Si vous utilisez un chemin dans vos champs, Word ne les prend en comptes que si les "\" sont doublés.
Ex : C:\Temp\a.docm devient C:\\Temp\\a.docm
Insertion d'une image

Sub insereruneimage()
ActiveDocument.Fields.Add Range:=Selection.Range, _
        Type:=wdFieldIncludePicture, Text:="C:\\Temp\\a.jpg"

End Sub
L'insertion d'un champ se fait par l'utilisation de la méthode Add, on passe à cette méthode quatre arguments,
Range : l'endroit où sera inséré le champ
Type : constante Word déterminant le type de champ inséré
Text : Le texte qui sera utilisé pour le champ.
PreserveFormatting : Conserve ou non le format
Insertion le nom de l'utilisateur

Sub InsererNomUtilisateur()
ActiveDocument.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, Text:= _
        "USERNAME  ", PreserveFormatting:=True

End Sub
Dans le cas du nom de l'utilisateur, si vous ne mettez rien, c'est le nom d'utilisateur de la suite Office qui est utilisé. Vous pouvez imposer un autre nom.

Sub InsereNomUtilisateur()
ActiveDocument.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, Text:= _
        "USERNAME  Olivier \* Caps ", PreserveFormatting:=True
End Sub
En changeant le type de champ, vous pouvez insérer la date du jour.
Insertion de la date du jour

Sub AjouterDate()
ActiveDocument.Fields.Add Range:=Selection.Range, Type:=wdFieldDate
End Sub
Nous venons de voir comment ajouter un champ et le "code" qu'il contient, nous pouvons aussi faire la manipulation inverse, pour chaque champ récupère son code.

Sub RecupererCode()
' Déclaration d'un variable de type champ
Dim oFld As Field
' Boucle sur tous les champs du document
For Each oFld In ActiveDocument.Fields
    Debug.Print oFld.Code
Next oFld

End Sub

8-A. Méthodes


8-A-1. Add

Nous avons déjà utilisé cette méthode, elle permet l'ajout d'un champ à la collection des champs du document. Nous avons également vu que cette méthode peut recevoir jusqu'à 4 arguments.

Voici la liste des valeurs que peut prendre l'argument Type.

Nom Description
wdFieldAddin Champ de complément. Non disponible dans la boîte de dialogue Champ. Utilisé pour stocker les données cachées dans l'interface utilisateur.
wdFieldAddressBlock Champ AddressBlock.
wdFieldAdvance Champ Advance.
wdFieldAsk Champ Ask.
wdFieldAuthor Champ Author.
wdFieldAutoNum Champ AutoNum.
wdFieldAutoNumLegal Champ AutoNumLgl.
wdFieldAutoNumOutline Champ AutoNumOut.
wdFieldAutoText Champ AutoText.
wdFieldAutoTextList Champ AutoTextList.
wdFieldBarCode Champ BarCode.
wdFieldBidiOutline Champ BidiOutline.
wdFieldComments Champ Comments.
wdFieldCompare Champ Compare.
wdFieldCreateDate Champ CreateDate.
wdFieldData Champ Data.
wdFieldDatabase Champ Database.
wdFieldDate Champ Date.
wdFieldDDE Champ DDE. Non disponible dans la boîte de dialogue Champ, mais pris en charge pour les documents créés dans les versions précédentes de Word.
wdFieldDDEAuto Champ DDEAuto. Non disponible dans la boîte de dialogue Champ, mais pris en charge pour les documents créés dans les versions précédentes de Word.
wdFieldDocProperty Champ DocProperty.
wdFieldDocVariable Champ DocVariable.
wdFieldEditTime Champ EditTime.
wdFieldEmbed Champ Embedded.
wdFieldEmpty Champ Empty. Agit comme un espace réservé pour les contenus de champ qui ne sont pas encore ajoutés. Un champ ajouté en utilisant le raccourci Ctrl+F9 dans l'interface utilisateur est un champ Empty.
wdFieldExpression Champ = (Formule).
wdFieldFileName Champ FileName.
wdFieldFileSize Champ FileSize field.
wdFieldFillIn Champ Fill-In.
wdFieldFootnoteRef Champ FootnoteRef. Non disponible dans la boîte de dialogue Champ. Inséré par programmation ou en mode interactif.
wdFieldFormCheckBox Champ FormCheckBox.
wdFieldFormDropDown Champ FormDropDown.
wdFieldFormTextInput Champ FormText.
wdFieldFormula Champ EQ (Equation).
wdFieldGoToButton Champ GoToButton.
wdFieldGreetingLine Champ GreetingLine.
wdFieldHyperlink Champ Hyperlink.
wdFieldIf Champ If.
wdFieldImport Champ Import. Ne peut pas être ajouté dans la boîte de dialogue Champ, mais peut être ajouté en mode interactif ou par programmation (rédaction de code).
wdFieldInclude Champ Include. Ne peut pas être ajouté dans la boîte de dialogue Champ, mais peut être ajouté en mode interactif ou par programmation (rédaction de code).
wdFieldIncludePicture Champ IncludePicture.
wdFieldIncludeText Champ IncludeText.
wdFieldIndex Champ Index.
wdFieldIndexEntry Champ XE (Index Entry).
wdFieldInfo Champ Info.
wdFieldKeyWord Champ Keywords.
wdFieldLastSavedBy Champ LastSavedBy.
wdFieldLink Champ Link.
wdFieldListNum Champ ListNum.
wdFieldMacroButton Champ MacroButton.
wdFieldMergeField Champ MergeField.
wdFieldMergeRec Champ MergeRec.
wdFieldMergeSeq Champ MergeSeq.
wdFieldNext Champ Next.
wdFieldNextIf Champ NextIf.
wdFieldNoteRef Champ NoteRef.
wdFieldNumChars NumChars.
wdFieldNumPages Champ NumPages.
wdFieldNumWords Champ NumWords.
wdFieldOCX Champ OCX. Ne peut pas être ajouté dans la boîte de dialogue Champ, mais peut être ajouté par programmation (rédaction de code), par le biais de la méthode AddOLEControl de la collection Shapes ou de la collection InlineShapes.
wdFieldPage Champ Page.
wdFieldPageRef Champ PageRef.
wdFieldPrint Champ Print.
wdFieldPrintDate Champ PrintDate.
wdFieldPrivate Champ Private.
wdFieldQuote Champ Quote.
wdFieldRef Champ Ref.
wdFieldRefDoc Champ RD (Reference Document).
wdFieldRevisionNum Champ RevNum.
wdFieldSaveDate Champ SaveDate.
wdFieldSection Champ Section.
wdFieldSectionPages Champ SectionPages
wdFieldSequence Champ Seq (Sequence).
wdFieldSet Champ Set.
wdFieldShape Champ Shape. Créé automatiquement pour les images dessinées.
wdFieldSkipIf Champ SkipIf.
wdFieldStyleRef Champ StyleRef.
wdFieldSubject Champ Subject.
wdFieldSymbol Champ Symbol.
wdFieldTemplate Champ Template.
wdFieldTime Champ Time.
wdFieldTitle Champ Title.
wdFieldTOA Champ TOA (Table of Authorities).
wdFieldTOAEntry Champ TOA (Entrée dans la table des références).
wdFieldTOC Champ TOC (Table of Contents).
wdFieldTOCEntry Champ TOC (Entrée dans la table des matières).
wdFieldUserAddress Champ UserAddress.
wdFieldUserInitials Champ UserInitials.
wdFieldUserName Champ UserName.
wdFieldBibliography Champ Bibliography.
wdFieldCitation Champ Citation.
Cet exemple montre comment ajouter un champ date à votre document :

Sub AjouterChampDate()
ActiveDocument.Fields.Add Range:=Selection.Range, Type:=wdFieldDate
End Sub

8-A-2. ToggleShowCodes

Cette méthode correspond à la combinaison de touches Shift + F9, elle permet l'affichage des codes de champ.

Selection.Fields.ToggleShowCodes

8-A-3. Update

Lorsque vous utilisez cette méthode, vous mettez à jour le ou les champs du document.
Mise à jour d'un champ

ActiveDocument.Fields(1).Update
Mise à jour de tous les champs

ActiveDocument.Fields.Update
L'utilisation de cette méthode renvoie un Long, si la valeur renvoyée est 0, c'est que la mise à jour s'est correctement déroulée, si la mise à jour à généré une erreur, le nombre renvoyé correspond à l'index du premier champ qui pose problème.

If ActiveDocument.Fields.Update = 0 Then
    MsgBox "La mise à jour s'est correctement déroulée"
Else
    MsgBox "Le champ " & ActiveDocument.Fields.Update & _
        " a généré une erreur"
End If

8-A-4. Unlink

Cette méthode permet dans certains cas de briser le lien entre le champ la source et de remplacer le champ par sa valeur la plus récente.

ActiveDocument.Fields(1).Unlink
Cette méthode peut-être appliquée à la collection.

ActiveDocument.Fields.Unlink
Dans ce cas, tous les champs seront remplacés.


8-B. Propriétés


8-B-1. Code

Cette propriété renvoie le code du champ. Elle est en lecture-écriture. C'est donc grâce à cette propriété que vous pourrez récupérer les codes d'un champ ou encore en modifier le code.

Nous avons vu comment ajouter un champ date.

Sub AjouterChampDate()
ActiveDocument.Fields.Add Range:=Selection.Range, Type:=wdFieldDate
End Sub
Nous allons modifier ce champ pour lui ajouter un masque.

Sub AjouterMasque()
' Déclaration des variables
Dim stChamp As String
Dim oFld As Field
Dim intI As Integer
Dim stContent() As String
'Affectation des objets
Set oFld = ActiveDocument.Fields(1)

stChamp = oFld.Code
'Boucle pour déterminer si le champ est un champ date
If oFld.Type = wdFieldDate Then
    'Remplissage du tableau
    stContent = Split(stChamp, "\")
    Debug.Print LBound(stContent)
    stChamp = ""
End If
'Boucle sur le contenu du tableau
For intI = 0 To UBound(stContent)
    Debug.Print stContent(intI)
    'Ajout du masque avant le second élément du tableau
    If intI = 1 Then stChamp = stChamp & "@ " & Chr(34) & "dddd dd/MM/yyyy" & Chr(34) & " \"
    If intI = UBound(stContent) Then
        stChamp = stChamp & stContent(intI)
    Else
        stChamp = stChamp & stContent(intI) & " \"
    End If
    
    
Next intI
Debug.Print stChamp
oFld.Code.Text = stChamp
oFld.Update

End Sub

8-B-2. ShowCodes

Alors que ToggleShowCode bascule l'affichage du code tous les champs, ShowCodes permet de ne le faire que pour un seul champ.

ActiveDocument.Fields(1).ShowCodes = True

8-B-3. Count

Les Fields formant une collection, Count permet de connaitre leur nombre.

ActiveDocument.Fields.Count

9. Les formulaires


10. Les images et autres objets graphiques


11. Les objets Range et Selection


12. Les en-têtes et les pieds de page


13. Solutions


14. Exercice complet : une application de gestion de courrier


15. Liens Utiles

  Titre de l'article
VBA Généralités sur le VBA
  Initiation au VBA d'Outlook

16. Remerciements

Je tiens à remercier pour leurs contributions à ce projet :
- lorenzole+bo
- Philippe JOCHMANS
- Caro-Line
- Arkham46
- Jeannot45



               Version PDF (Miroir)   Version hors-ligne (Miroir)

Valid XHTML 1.0 TransitionalValid CSS!

Copyright © 2009 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. Droits de diffusion permanents accordés à Developpez LLC.

Responsables bénévoles de la rubrique Word : Pierre Fauconnier - Arkham46 -