Tim a créé une macro simple pour mettre à jour tous les champs d’un modèle. La macro comprend une étape qui sélectionne le document entier, un peu comme appuyer sur Ctrl + A. Cette étape ne sélectionne pas les en-têtes et les pieds de page, et Tim craint qu’il y ait des champs à mettre à jour à ces emplacements. Il se demande s’il existe un moyen d’inclure des en-têtes et des pieds de page lors de la sélection de tout, ou s’il existe une manière différente pour sa macro de mettre à jour les champs dans les zones d’en-tête ou de pied de page.

La réponse simple est que vous devez modifier votre code de macro afin qu’il recherche dans toutes les différentes zones Word qu’il peut y avoir des champs. Le problème avec l’utilisation d’une approche «sélectionner tout» est qu’elle ne sélectionne que le texte dans le document principal. Les en-têtes, les pieds de page et une foule d’autres éléments sont conservés dans leurs propres calques séparés qui les empêchent d’être sélectionnés avec tout le texte du document.

Si vous souhaitez simplement mettre à jour les champs dans le texte principal et dans les en-têtes et pieds de page, vous devez utiliser une technique telle que la suivante:

Sub MyUpdateFields1()

ActiveDocument.StoryRanges(wdMainTextStory).Fields.Update     ActiveDocument.StoryRanges(wdPrimaryFooterStory).Fields.Update     ActiveDocument.StoryRanges(wdPrimaryHeaderStory).Fields.Update End Sub

Notez que les différentes couches d’un document sont appelées «histoires» et conservées dans leur propre collection. Alors que cette simple macro met très rapidement à jour les champs des stories contenant le texte principal, les pieds de page et les en-têtes, il existe d’autres stories (couches)

où il pourrait y avoir des champs nécessitant une mise à jour. La macro suivante examine chaque histoire, quel que soit son type, et effectue la mise à jour requise:

Sub MyUpdateFields2()

Dim story As Word.Range

For Each story In ActiveDocument.StoryRanges         Do             story.Fields.Update             ' Check linked stories as linked stories are not independent             Set story = story.NextStoryRange         Loop Until (story Is Nothing)

Next End Sub

Si vous voulez vraiment être complet, cependant, il y a plus que les différentes couches d’histoire que vous devez parcourir. Par exemple, il se peut que certains champs contenus dans des zones de texte nécessitent une mise à jour. Une macro plus complète est nécessaire pour traiter tous ces autres endroits où les champs pourraient être localisés. Dans l’exemple suivant, notez les nombreux éléments du document qui peuvent être vérifiés pour les champs.

Sub MyUpdateFields3()

Dim doc As Document ' Pointer to Active Document     Dim wnd As Window ' Pointer to Document's Window     Dim lngMain As Long ' Main Pane Type Holder     Dim lngSplit As Long ' Split Type Holder     Dim lngActPane As Long ' ActivePane Number     Dim rngStory As Range ' Range Objwct for Looping through Stories     Dim TOC As TableOfContents ' Table of Contents Object     Dim TOA As TableOfAuthorities 'Table of Authorities Object     Dim TOF As TableOfFigures 'Table of Figures Object     Dim shp As Shape

' Set Objects     Set doc = ActiveDocument     Set wnd = ActiveDocument.ActiveWindow

' get Active Pane Number     lngActPane = wnd.ActivePane.Index

' Hold View Type of Main pane     lngMain = wnd.Panes(1).View.Type

' Hold SplitSpecial     lngSplit = wnd.View.SplitSpecial

' Get Rid of any split     wnd.View.SplitSpecial = wdPaneNone

' Set View to Normal     wnd.View.Type = wdNormalView

' Loop through each story in doc to update     For Each rngStory In doc.StoryRanges         If rngStory.StoryType = wdCommentsStory Then             Application.DisplayAlerts = wdAlertsNone             ' Update fields             rngStory.Fields.Update             Application.DisplayAlerts = wdAlertsAll         Else            ' Update fields            rngStory.Fields.Update         End If     Next

For Each shp In doc.Shapes         With shp.TextFrame             If .HasText Then                 shp.TextFrame.TextRange.Fields.Update             End If         End With     Next

' Loop through TOC and update     For Each TOC In doc.TablesOfContents         TOC.Update     Next

' Loop through TOA and update     For Each TOA In doc.TablesOfAuthorities         TOA.Update     Next

' Loop through TOF and update     For Each TOF In doc.TablesOfFigures         TOF.Update     Next

' Return Split to original state     wnd.View.SplitSpecial = lngSplit

' Return main pane to original state     wnd.Panes(1).View.Type = lngMain

' Active proper pane     wnd.Panes(lngActPane).Activate

' Close and release all pointers     Set wnd = Nothing     Set doc = Nothing End Sub

WordTips est votre source pour une formation Microsoft Word rentable.

(Microsoft Word est le logiciel de traitement de texte le plus populaire au monde.) Cette astuce (522) s’applique à Microsoft Word 97, 2000, 2002 et 2003. Vous pouvez trouver une version de cette astuce pour l’interface ruban de Word (Word 2007 et plus tard) ici:

link: / wordribbon-Including_Headers_and_Footers_when_Selecting_All [Y compris les en-têtes et pieds de page lors de la sélection de tout].