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?
0 votes
@Pedro77 Comment cela est censé aider? Au moins avec Word 2013 (je n'ai plus accès à Word 2007), aller à l'aperçu avant impression, ou imprimer d'ailleurs, ne met pas à jour les champs.
0 votes
Mes champs sont mis à jour, du moins les champs de références et de renvois sont.
0 votes
@Pedro77 As-tu fait quelque chose de spécial? Mes champs n'ont pas été mis à jour et, à en juger par le nombre de personnes qui m'envoient des PDF ou des impressions de documents avec des champs obsolètes, le comportement que j'observe est répandu.