web-dev-qa-db-fra.com

Comment mettre à jour tous les champs d'un document Word?

Je veux un moyen de mettre à jour tous les champs d'un document Word 2013. (Si cela fonctionne dans d'autres versions, tant mieux; j'avais à l'origine ce problème avec Word 2007 et rien ne semble avoir changé depuis.) Cela comprend les références croisées, les numéros de page, les tables des matières, les index, les en-têtes, etc. S'il peut être mis à jour en appuyant sur F9Je veux le mettre à jour.

(En théorie, la mise à jour des champs peut nécessiter une mise à jour, par exemple, une table des matières plus longue modifie certains numéros de page dans le texte principal. Prendre soin des cas courants me suffit. En fait, je peux exécuter le processus. la macro deux ou trois fois avant qu'elle ne se stabilise. Je veux juste avoir une seule macro qui trouve tout.)

Ma tentative jusqu'à présent ne met pas à jour les champs dans les zones de texte à l'intérieur des figures. Comment puis-je les mettre à jour et quoi d'autre ai-je manqué?


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

'' Update all the fields, indexes, etc. in the specified document.
Sub UpdateAllFieldsIn(doc As Document)
    '' Update tables. We do this first so that they contain all necessary
    '' entries and so extend to their final number of 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
    '' Update fields everywhere. This includes updates of page numbers in
    '' tables (but would not add or remove entries). This also takes care of
    '' all index updates.
    Dim sr As range
    For Each sr In doc.StoryRanges
        sr.Fields.Update
        While Not (sr.NextStoryRange Is Nothing)
            Set sr = sr.NextStoryRange
            '' FIXME: for footnotes, endnotes and comments, I get a pop-up
            '' "Word cannot undo this action. Do you want to continue?"
            sr.Fields.Update
        Wend
    Next sr
End Sub
'' Update all the fields, indexes, etc. in the active document.
'' This is a parameterless subroutine so that it can be used interactively.
Sub UpdateAllFields()
    UpdateAllFieldsIn ActiveDocument
End Sub
97
Gilles

Allez dans les paramètres d'impression, sélectionnez les champs de mise à jour. Ensuite, allez à imprimer ou à imprimer un aperçu de votre doc.

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

 MS Word Print Options from Word of Mac 2016

37
David Roussel

Je fais juste Ctrl+A - pour tout sélectionner - et puis  F9 mettre à jour le lot.

Bien que cela manque des en-têtes et des pieds de page, mais ils sont mis à jour lorsque vous imprimez/affichez un aperçu avant impression.


Mettre à jour

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

Espérons que cela couvre tout ce dont vous avez besoin, sinon indiquez ce qui ne fonctionne toujours pas.

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
80
DMA57361

Cette 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é à gauche de la boîte de dialogue. (Cliquez ici pour afficher une figure associée.) Dans la zone Général (défilez un peu pour la voir), assurez-vous que la case à cocher Mettre à jour les liens automatiques à l'ouverture est cochée. Cliquez sur OK Ce paramètre doit vous assurer que tous vos liens sont toujours à jour. Si vous souhaitez mettre à jour les champs lorsque le document est ouvert, vous devez utiliser une macro pour accomplir la tâche. Plus précisément, vous devrez utiliser une macro AutoOpen ou AutoClose, selon que vous souhaitez ou non mettre à jour les champs à l'ouverture ou à la fermeture du document. 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 met à jour tous les membres de la collection Fields du document. Si vous préférez mettre à jour les champs à la fermeture, vous pouvez utiliser cette macro:

Sub AutoClose()
    ActiveDocument.Fields.Update
End Sub

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.

5
user3463

Si vous souhaitez mettre à jour correctement tous les en-têtes et les 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
3
Yohnny

Word 2010:

Cliquez avec le bouton droit sur le ruban, personnalisez-le, choisissez une commande dans "toutes les commandes", recherchez "mise à jour" et ajoutez-la à l'endroit souhaité.

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

3
rlaviolette

Pour C #:

using System;
using System.Collections.Generic;
using System.IO;
using Microsoft.Office.Interop.Word;

class Program
{
    static void Main(string[] args)
    {
        List<string> path = new List<string>(args);

        string filePathstr = string.Join(" ", path.ToArray());
        //System.Windows.Forms.MessageBox.Show("filepathstr: " + filePathstr);

        string folderPathstr = Path.GetDirectoryName(filePathstr);
        //System.Windows.Forms.MessageBox.Show("folderPathstr: " + folderPathstr);

        try
        {
            Application ap = new Application();
            Document document = ap.Documents.Open(filePathstr);
            document.Fields.Update();

            foreach (Section section in document.Sections)
            {
                document.Fields.Update();  // update each section

                HeadersFooters headers = section.Headers;  //Get all headers
                foreach (HeaderFooter header in headers)
                {
                    Fields fields = header.Range.Fields;
                    foreach (Field field in fields)
                    {
                        field.Update();  // update all fields in headers
                    }
                }

                HeadersFooters footers = section.Footers;  //Get all footers
                foreach (HeaderFooter footer in footers)
                {
                    Fields fields = footer.Range.Fields;
                    foreach (Field field in fields)
                    {
                        field.Update();  //update all fields in footers
                    }
                }
            }    

            document.Save();
            document.Close();

        }
        catch (NullReferenceException)
        {
            System.Windows.Forms.MessageBox.Show("A valid file was not selected.");
        }
    }
}
2
Sherd