101 votes

Comment mettre à jour tous les champs dans un document Word ?

Je veux une façon de mettre à jour tous les champs dans un document Word 2013. (Si cela fonctionne dans d'autres versions, tant mieux; j'ai eu ce problème à l'origine avec Word 2007, et rien ne semble avoir changé depuis lors.) Cela inclut les renvois, les numéros de page, les tables des matières, les index, les en-têtes, etc. Si cela peut être mis à jour en appuyant sur F9, je veux le mettre à jour.

(En théorie, la mise à jour des champs peut nécessiter la mise à jour d'autres champs, par exemple, un tableau des matières plus long modifie certains numéros de page dans le texte principal. S'occuper des cas courants me suffit. En fait, cela ne me dérange pas de devoir exécuter le macro deux ou trois fois avant qu'il ne se stabilise. Je veux juste avoir un seul macro qui trouve tout.)

Jusqu'à présent, ma tentative ne met pas à jour les champs dans les zones de texte à l'intérieur des figures. Comment les mettre à jour et qu'est-ce que j'ai oublié d'autre?


MODIFICATION : En combinant la réponse donnée avec ce que j'avais déjà, on obtient un macro qui semble tout mettre à jour (avec un défaut connu).

'' Mettre à jour tous les champs, index, etc. dans le document spécifié.
Sub UpdateAllFieldsIn(doc As Document)
    '' Mettre à jour les tables. Nous faisons cela en premier pour qu'elles contiennent toutes les entrées nécessaires
    '' et s'étendent au nombre final de pages.
    Dim toc As TableOfContents
    For Each toc In doc.TablesOfContents
        toc.Update
    Next toc
    Dim tof As TableOfFigures
    For Each tof In doc.TablesOfFigures
        tof.Update
    Next tof
    '' Mettre à jour les champs partout. Cela inclut les mises à jour des numéros de page dans
    '' les tables (mais n'ajouterait ni ne supprimerait d'entrées). Cela prend également en charge
    '' toutes les mises à jour d'index.
    Dim sr As range
    For Each sr In doc.StoryRanges
        sr.Fields.Update
        While Not (sr.NextStoryRange Is Nothing)
            Set sr = sr.NextStoryRange
            '' FIXME: pour les notes de bas de page, les notes de fin et les commentaires, je reçois un pop-up
            '' "Word ne peut pas annuler cette action. Voulez-vous continuer?"
            sr.Fields.Update
        Wend
    Next sr
End Sub
'' Mettre à jour tous les champs, index, etc. dans le document actif.
'' Il s'agit d'une sous-routine sans paramètres afin qu'elle puisse être utilisée de manière interactive.
Sub UpdateAllFields()
    UpdateAllFieldsIn ActiveDocument
End Sub

1 votes

Pour plus de complétude, vous voudrez peut-être ajouter le tableau des autorités : Dim toa As Word.TableOfAuthorities / For Each toa In ActiveDocument.TablesOfAuthorities / toa.Update / Suivant

0 votes

Juste un avertissement que j'ai essayé ceci dans Word 2013, et confirmant que cela fonctionne toujours. Merci beaucoup @Gilles d'avoir fourni le code!

0 votes

Que diriez-vous d'une macro qui va en aperçu avant impression et revient au document?

86voto

DMA57361 Points 18266

Je fais simplement Ctrl+A - pour tout sélectionner - et ensuite F9 pour mettre à jour le tout.

Cela dit, cela ne prend pas en compte les en-têtes et les pieds de page, mais ils se mettent à jour lorsque vous imprimez ou prévisualisez l'impression de mémoire.


Mettre à jour

J'ai trouvé la macro suivante. Lors d'un essai rapide, elle a mis à jour les tables des matières, les champs dans les paragraphes, les champs dans l'en-tête et le pied de page, et les champs dans une boîte de texte flottante d'une figure.

J'espère que cela couvre tout ce dont vous avez besoin, sinon veuillez indiquer ce qui ne se met toujours pas à jour.

Source : http://www.gmayor.com/installing_macro.htm

Sub UpdateAll()
    Dim oStory As Range
    For Each oStory In ActiveDocument.StoryRanges
        oStory.Fields.Update
        If oStory.StoryType <> wdMainTextStory Then
            While Not (oStory.NextStoryRange Is Nothing)
                Set oStory = oStory.NextStoryRange
                oStory.Fields.Update
            Wend
        End If
    Next oStory
    Set oStory = Nothing
End Sub

0 votes

@Giles - D'accord, c'est juste, il est toujours préférable de vérifier que les bases ont été explorées en premier. Je viens de chercher et j'ai trouvé une macro qui semble faire l'affaire, vérifiez ma mise à jour, faites-moi savoir s'il manque quelque chose.

0 votes

Maintenant, on avance! Je ne sais pas pourquoi l'itération avec NextStoryRange et avec document.StoryRanges sont des choses différentes, mais ton code combiné avec les mises à jour de tableau que j'avais déjà font un gagnant (enfin, presque, mais c'est un problème différent).

0 votes

Cela ne fonctionne pas pour les champs contenus dans des boîtes de texte contenues dans l'en-tête / pied de page. Vérifié sur Word 2016

37voto

Jules Points 307

Accédez aux paramètres d'impression, sélectionnez mettre à jour les champs. Ensuite, imprimez ou visualisez l'aperçu de votre document.

Et voilà, tous les champs sont mis à jour!

Options d'impression de MS Word à partir de Word pour Mac 2016

2 votes

Travaillant pour moi maintenant dans Word 2010 (où le paramètre se trouve dans "Fichier Options Affichage"). En fait, sans l'option certains champs sont mis à jour mais pas tous. Je suis pratiquement sûr que cela ne se produisait pas dans Word 2007, mais je ne l'ai plus pour tester.

2 votes

Je suis sur Word 2016 pour Mac. Le paramètre se trouve dans Word -> Préférences -> Imprimer. Mais sur Windows, il sera dans la section d'impression des paramètres globaux. Je suis sûr d'y avoir été par le passé, mais je n'ai pas d'installation pour faire des tests en ce moment.

0 votes

Je suppose que cela ne fonctionne plus sur Word 2016.

5voto

Ce page semble intéressante :

Si vous utilisez Word 2007, le processus est un peu différent : Cliquez sur le bouton Office, puis sur Options Word. Word affiche la boîte de dialogue Options Word. Cliquez sur Avancé du côté gauche de la boîte de dialogue. (Cliquez ici pour voir une figure connexe.) Dans la zone Général (faites défiler un peu pour la voir), assurez-vous que la case à cocher Mettre à jour les liens automatiques à l'ouverture est sélectionnée. Cliquez sur OK. Ce paramètre devrait garantir que tous vos liens sont toujours à jour. Si vous souhaitez mettre à jour les champs lorsque le document est ouvert, vous devrez utiliser une macro pour accomplir la tâche. Plus précisément, vous devrez utiliser une macro AutoOpen ou AutoClose, en fonction de si vous souhaitez mettre à jour les champs lorsque le document s'ouvre ou se ferme. Voici un exemple de macro AutoOpen que vous pouvez utiliser.

Sub AutoOpen()
    With Options
        .UpdateFieldsAtPrint = True
        .UpdateLinksAtPrint = True
    End With
    ActiveDocument.Fields.Update
End Sub

Notez que la macro s'assure que les options sont définies pour forcer la mise à jour des champs et des liens lors de l'impression, puis elle met à jour tous les membres de la collection de champs dans le document. Si, au lieu de cela, vous vouliez mettre à jour les champs à la fermeture, vous pourriez utiliser cette macro :

Sub AutoClose()
    ActiveDocument.Fields.Update

Cette macro est beaucoup plus courte car il n'est pas nécessaire de définir les options de mise à jour à l'impression lorsque vous quittez le document.

3voto

rlaviolette Points 47

Word 2010:

Cliquez avec le bouton droit sur le ruban, personnalisez le ruban, choisissez la commande "toutes les commandes", recherchez "mise à jour" et ajoutez-la où vous le souhaitez.

Ce bouton met à jour uniquement les champs sélectionnés.
Ensuite, pour mettre à jour tous les champs, appuyez sur Ctrl + A puis sur ce bouton.

0 votes

Comment cela diffère-t-il de l'appui sur F9? Cela met-il vraiment à jour à l'intérieur des figures, tableaux, etc?

1 votes

Je possède désormais Word 2013, alors j'ai vérifié. Cela semble faire la même chose que d'appuyer sur F9. Il ne met pas à jour les champs à l'intérieur des figures, ce qui était ma principale motivation pour poser cette question.

3voto

Yohnny Points 31

Si vous voulez mettre à jour correctement tous les en-têtes et pieds de page, cela a fonctionné pour moi :

    Dim oStory As Range
    Dim oSection As Object
    Dim oHeader As Object
    Dim oFooter As Object

    For Each oStory In ActiveDocument.StoryRanges
        oStory.Fields.Update
    Next oStory

        For Each oSection In ActiveDocument.Sections
             For Each oHeader In oSection.Headers
                 oHeader.Range.Fields.Update
             Next oHeader

             For Each oFooter In oSection.Footers
                 oFooter.Range.Fields.Update
             Next oFooter
        Next oSection

0 votes

Comment cela améliore-t-il la réponse acceptée? Met-il à jour les champs dans les cases de texte dans les figures?

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X