0
(0)

Il existe une grande variété de cas et d'exceptions.

Il faut à la fois distinguer certaines actions provoquant une mise à jour (ouverture, impression), l'emplacement du champ (corps du texte, entête/pied de page, zone de texte...) et le champ lui-même !

Les champs présents dans l'en-tête ou le pied de page

Ils sont mis à jour lors de l'impression ou au passage en aperçu avant impression sauf FILENAME (Mise à jour manuelle).

Ceux liés à la pagination (REF, PAGEREF, SECTIONPAGES) sont mis à jour en cas de modification de la pagination (Insertion d'un paragraphe, dimensionnement d'un objet, sauts...).

Les champs NON présents dans l'en-tête ou le pied de page

Les champs mis à jour à l'ouverture, à chaque changement d'affichage (Page, Web, Brouillon...), à l'impression ou au passage en aperçu avant impression.

  • DATE, PRINTDATE, SAVEDATE, TIME.

Les champs mis à jour à l'ouverture, l'impression ou au passage en aperçu avant impression.

  • NUMPAGES (nombre de pages), PAGE (N° de la page), PAGEREF (Renvoi n° page d'un signet), SECTIONPAGES (Nombre de pages de la section), SECTION (N° de la section),
  • NOTEREF (Renvoi vers signet sur n° note), FTNREF (obsolète remplacé par NOTEREF), REF (renvoi texte d'un signet), STYLEREF (Renvoi style dictionnaire), SEQ (N° séquentiel).

Les champs qui se mettent à jour automatiquement

  • AUTONUM (Numérotation des paragraphes > obsolète) , AUTONUMLGL (Numérotation des paragraphes > obsolète), AUTONUMOUT (Numérotation des paragraphes > obsolète),
  • LISTNUM (Numérotation des paragraphes), REVNUM (N° de la révision/enregistrement), CITATION (citation bibliographique).

Les champs qui ne nécessitent pas de mise à jour

Toute mise à jour est inutile (saisie utilisateur) ou impossible à modifié (propriétés fixe).

Les champs d'affichage générer par l'utilisateur

  • ADVANCE (créé un décalage), AUTOTEXT, AUTOTEXTLIST, BARCODE (Code barre), CREATEDATE, EDITTIME, EQ (équation mathématique),
  • FORMCHECKBOX (case à cocher), FORMDROPDOWN (Liste déroulante), FORMTEXT (zone de texte),
  • EMBED (objet intégré), HYPERLINK, INCLUDEPICTURE, QUOTE (Citation), SYMBOLE (insertion caractère).

Les champs non visibles

  • TA (entrée de table des références), TC (entrée de table des matières), XE (entrée de table index), RD (document référencé),
  • PRIVATE (informations de conversion), MACROBUTTON, GOTOBUTTON, PRINT (insertion codes d'impression), DOCVARIABLE (exploité via VBA), SET.

Les champs qui se mettent à jour manuellement

  • AUTHOR, COMMENTS, DOCPROPERTY, FILENAME, FILESIZE, INFO, KEYWORDS, LASTSAVEDBY, NUMCARS, NUMWORDS, SUBJECT, TEMPLATE, TITLE,
  • BIBLIOGRAPHY, INDEX, TOA (Table de référence), TOC (Sommaire), LINK,
  • USERADDRESS, USERINITIALS, USERNAME,
  • ASK (Demander), FILLIN (Remplir), AUTOTEXT, INCLUDETEXT.

Mise à jour manuelle des champs

Le document Word est décomposé en plusieurs parties indépendantes (17 stories ! voir https://learn.microsoft.com/fr-fr/office/vba/api/word.wdstorytype ).

Sélectionner tout ( CTRL + A ) puis mettre à jour ( F9 ) n'actualisera que la "story" en cours !

Exemple : On est dans le "corps" du texte, on fait cette manipulation, cela n'actualisera que les champs présents dans le corps du document mais pas ceux des en-têtes et pieds de page, zones de texte, notes de bas de page... étant des stories différentes.

La solution : Une petite macro

Sub MAJ_champs()
    ' Objectif    : Mettre à jour tous les champs présent dans le document actif
    ' Utilisation : Ne fonctionne pas si le document est protégé
    '               Ne gère pas l'exception FILENAME
    '               Ne gère pas les tables (sommaire, illustrations, références) autre part que dans
    '                 le corps du texte.
    ' Auteur      : Arnaud COTTIN (www.1forme.fr)
    ' Licence     : CC-BY-NC-SA (Vous pouvez diffuser/partager/modifier cette macro dans les même conditions,
    '                           seulement à titre personnel et citant l'auteur/site d'origine.
    
    Dim objDoc          As Document
    Dim rngStory        As Range
    Dim objChamp        As Field
    Dim i               As Integer
    Dim objShape        As Shape
    Dim objShapeCanvas  As Shape
    Dim objShapeGroupe  As Shape
    Dim objTOC          As TableOfContents
    Dim objTOF          As TableOfFigures
    Dim objTOA          As TableOfAuthorities
    
    
    On Error GoTo erreur
    Set objDoc = ActiveDocument
    With objDoc
        If .ProtectionType <> wdNoProtection Then
            MsgBox "Le document est protégé !" & vbCrLf & _
                    "Pour mettre à jour les champs, retirer cette protection.", _
                    vbOKOnly + vbInformation, "Exécution impossible"
            Set objDoc = Nothing
            Exit Sub
        End If

        Application.ScreenUpdating = False
        Application.DisplayAlerts = wdAlertsNone
        
        ' Mise à jour des stories :
        ' -------------------------
        '   wdMainTextStory     1   Article Texte principal.
        '   wd FootnotesStory   2   Article Notes de bas de page.
        '   wdEndnotesStory     3   Article Notes de fin.
        '   wdCommentsStory     4   Article Commentaires.
        '   wdTextFrameStory    5   Article Cadre de texte.

        For i = 1 To 5
            On Error Resume Next
            .StoryRanges(i).Fields.Update
            On Error GoTo erreur
            If i = 1 Then
                For Each objShape In .StoryRanges(i).ShapeRange
                    If objShape.Type = msoGroup Then
                        ' Objets groupés
                        With objShape.GroupItems
                            For Each objShapeGroupe In objShape.GroupItems
                                objShapeGroupe.TextFrame.TextRange.Fields.Update
                            Next
                        End With
                    ElseIf objShape.Type = msoCanvas Then
                        ' Zones de dessin
                        For Each objShapeCanvas In objShape.CanvasItems
                            objShapeCanvas.TextFrame.TextRange.Fields.Update
                        Next
                    Else
                        ' Objet simple
                        objShape.TextFrame.TextRange.Fields.Update
                    End If
                Next
            End If
        Next
        For Each oTOC In objDoc.TablesOfContents
            oTOC.Update
        Next
        
    ' Mise à jour des tables (sommaire, illustrations, références) dans wdMainTextStory
    ' Remarque : je n'ai pas trouvé comment mettre à jour ces tables dans les autres stories
    For Each objTOC In .TablesOfContents
        objTOC.Update
    Next
    For Each objTOF In .TablesOfFigures
        objTOF.Update
    Next
    For Each objTOA In .TablesOfAuthorities
        objTOA.Update
    Next

    End With
    ' Mise à jour des stories :
    ' -------------------------
    '   wdEvenPagesHeaderStory                 6  Article En-tête des pages paires.
    '   wdPrimaryHeaderStory                   7  Article En-tête principal.
    '   wdEvenPagesFooterStory                 8  Article Pied de page des pages paires.
    '   wdPrimaryFooterStory                   9  Article Pied de page principal.
    '   wdFirstPageHeaderStory                10  Article En-tête de la première page.
    '   wdFirstPageFooterStory                11  Article Pied de la première page.
    '
    '   wd FootnoteSeparatorStory             12  Article Séparateur de note de bas de page.
    '   wd FootnoteContinuationSeparatorStory 13  Article Séparateur de continuation de note de bas de page.
    '   wdContinuationNoticeStory             14  Article Indicateur de continuation de note de bas de page.
    '
    '   wdEndnoteSeparatorStory               15  Article Séparateur de note de fin.
    '   wdEndnoteContinuationSeparatorStory   16  Article Séparateur de continuation de note de fin.
    '   wdEndnoteContinuationNoticeStory      17  Article Indicateur de continuation de note de fin.

    Application.PrintPreview = True
    Application.PrintPreview = False
fin:
    Application.ScreenUpdating = True
    Application.DisplayAlerts = wdAlertsAll

    Set objDoc = Nothing
    Exit Sub
erreur:
    MsgBox Err.Description & "(" & Err.Number & ")"
    Resume
    GoTo fin
End Sub

Les champs qui se mettent à jour automatiquement à l'utilisation d'un modèle

Ils se mettent à jour quand on génère un nouveau document.

  • FILENAME, REVNUM, SAVEDATE, TEMPLATE,
  • COMMENTS, KEYWORDS, SUBJECT, TITLE, USERADDRESS, USERINITIALS, USERNAME,
  • DOCPROPERTY, INFO, NUMCHARS, NUMPAGES, NUMWORDS,
  • FILLIN (Mise à jour très intéressante car FILLIN peut être utiliser à la place de ASK, permettant de répéter le texte saisi à plusieurs endroits du document, en le marquant avec un signet et générer les répétitions avec des renvois au signet).

Pour mettre à jour tous les champs à l'impression

Il faut activer cette case dans les options de Word (Ruban Fichier > Options).

Word Forcer la Mise à jour des champs à l'impression
Word Forcer la Mise à jour des champs à l'impression

Remarques

  • Si le champ ne veut pas se mettre à jour, il est peut-être verrouillé.
    > CTRL + F11 : Verrouiller le champ (empêcher sa mise à jour)
    > CTRL + MAJ + F11 : Déverrouiller le champ.
  • Pour empêcher définitivement la mise à jour d'un champ on peut le convertir en texte
    > CTRL + MAJ + F9 : Remplace les champs par leur valeur.
  • Je ne sais pas trop comment "caractériser"
    > les champs de publipostage (DATABASE, ADDRESSBLOCK, MERGEFIELD, MERGEREC, GREETINGLINE, SKIPIF, MERGSEQ, NEXT, NEXTIF),
    > SI, COMPARE.
    Si vous avez une idée ?
  • Champs non évalués : BIDIOUTLINE, DATA, DDE (obsolète), DDEAUTO (obsolète), GLOSSARY (obsolète), SHAPE (obsolète ?).

Merci pour votre attention bienveillante.

Article intéressant ?

Cliquez sur une étoile pour noter cet article !

Note moyenne 0 / 5. Nombre de votes : 0

Aucun vote pour l'instant ! Soyez le premier à noter ce post.

Nous sommes désolés que cet article ne vous ait pas été utile !

Améliorons cet article !

Dites nous comment nous pouvons améliorer cet article ?

Publications similaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *