Partager via

Insertion de champ par VBA et accolades des champs imbriqués

Anonyme
2023-02-09T12:52:57+00:00

Bonjour,

Je souhaiterais insérer un champ type wdFieldIf ou wdFieldExpression mais je rencontre un problème. Lorsque j'écris le texte du champ (voir ci-dessous), l'accolade de début et de fin sont créées et interprétées automatiquement et correctement par VBA, mais celles à l'intérieur (autour de PAGE et NUMPAGES) ne le sont pas, elles sont créées comme des caractères standards et ne sont pas interprétés.

Voici mon code VBA :

ActiveDocument.Fields.Add Range:=Selection.Range, Type:=wdFieldIf, Text:="{PAGE} = {NUMPAGES} ""dernière page""", PreserveFormatting:=True

Comment faire un Ctrl+F9 dans le code VBA pour que les accolades de PAGE et NUMPAGES soient prises en compte ?

Cordialement,

David

Microsoft 365 et Office | Word | Pour la maison | Windows

Question verrouillée. Cette question a été migrée à partir de la Communauté Support Microsoft. Vous pouvez voter pour indiquer si elle est utile, mais vous ne pouvez pas ajouter de commentaires ou de réponses ni suivre la question.

0 commentaires Aucun commentaire

3 réponses

  1. Anonyme
    2023-02-09T14:53:06+00:00

    Je viens de recevoir une solution qui semble bien marcher après un premier essai. Je vais l'adapter et l'intégrer dans mon code.

    Voici la solution proposée :

    Dim oRng As Range
    Set oRng = Selection.Range
    With oRng
            .Fields.Add Range:=oRng, Type:=wdFieldIf, Text:="{PAGE} = {NUMPAGES} {AUTOTEXT}", PreserveFormatting:=False
            .Collapse 1
            .MoveEndUntil "}"
            .End = .End + 1
            .MoveStartUntil "{"
            .Text = ""
            .Fields.Add Range:=oRng, Type:=wdFieldPage, PreserveFormatting:=False
            
            .Collapse 0
            .MoveEndUntil "}"
            .End = .End + 1
            .MoveStartUntil "{"
            .Text = ""
            .Fields.Add Range:=oRng, Type:=wdFieldNumPages, PreserveFormatting:=False
               
            .Collapse 0
            .MoveEndUntil "}"
            .End = .End + 1
            .MoveStartUntil "{"
            .Text = ""
            .Fields.Add Range:=oRng, Type:=wdFieldAutoText, Text:="PDPVF1", PreserveFormatting:=False
                    
            .Fields.Update
    
        End With
    

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  2. Anonyme
    2023-02-09T14:36:45+00:00

    Merci beaucoup pour votre retour !

    Je vais me pencher à nouveau sur l'insertion d'un AUTOTEXT via un BUILDINGBOCK, cela marchait mais je trouvais cette solution assez contraignante pour les mises à jour.

    Je vais regarder la deuxième proposition indiquée dans le document https://wordmvp.com/FAQs/MacrosVBA/NestedFieldsWithVBA.htm

    Cordialament,

    David

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  3. Hecatonchire 53,700 Points de réputation Modérateur bénévole
    2023-02-09T13:04:57+00:00

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire