IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Word Discussion :

Parcourir des champs dans word en VBA


Sujet :

VBA Word

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 34
    Points : 71
    Points
    71
    Par défaut Parcourir des champs dans word en VBA
    Bonjour

    je souhaite parcourir des champs word dans un document comment faire en vba ?

    merci

  2. #2
    Membre averti Avatar de Nain porte koi
    Homme Profil pro
    a
    Inscrit en
    Novembre 2023
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : a

    Informations forums :
    Inscription : Novembre 2023
    Messages : 234
    Points : 315
    Points
    315
    Par défaut
    hello,

    désolé, mais la question n'est pas claire du tout... vous pouvez précisez ce que vous voulez faire exactement ?
    JièL
    Membre des AMIS
    Anti Macro Inutilement Superfétatoire

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 34
    Points : 71
    Points
    71
    Par défaut
    Je souhaite parcourir des champs InclureTexte dans un document, pouvoir afficher leur code. Si par exemple j'ai dans mon document les champs :
    {INCLUDETEXT "exemple include 1"}, {INCLUDETEXT "exemple include 2"}, en lançant une macro je voudrais afficher en vba ces codes dans la console d'exécution.

    merci

  4. #4
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 224
    Points : 443
    Points
    443
    Par défaut
    Bonjour dexter01, Nain porte koi, le forum

    Tu peux faire avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub LoopFields()
    Dim l_o_field As Word.Field
        For Each l_o_field In ThisDocument.Fields
            If l_o_field.Type = wdFieldIncludeText Then Debug.Print l_o_field.Code
        Next l_o_field
    End Sub
    A+

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 34
    Points : 71
    Points
    71
    Par défaut
    Bonjour mromain, merci pour le code, j'ai fait plusieurs tests et je rencontre des résultats extrêmement étrange avec cet objet word Field.

    J'ai besoin de complexifier l'attendu dans le cadre de ce que je dois réaliser, pour cela je vous présente un exemple :
    Le code utilisé est celui-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub test()
    Dim champ As Field
     
    Documents.Open FileName:="C:\test\DOC-PRINCIPAL-NIVEAU0.doc"
     
    For Each champ In ActiveDocument.Fields
     If champ.Type = wdFieldIncludeText Then
        Debug.Print (champ)
     End If
     
    Next champ
     
    End Sub
    J'ai créé donc 3 documents :
    DOC-PRINCIPAL-NIVEAU0.doc
    INCLUDE-NIVEAU1.doc
    INCLUDE-NIVEAU2.doc


    Dans DOC-PRINCIPAL-NIVEAU0.doc je fais appel à l'include INCLUDE-NIVEAU1.doc et dans INCLUDE-NIVEAU1.doc je fais appel à l'include INCLUDE-NIVEAU2.doc et dans
    INCLUDE-NIVEAU2.doc j'ai du texte en dur.

    La logique du code VBA ci-dessus voudrait qu'on aurait comme résultat dans la console d'exécution :
    uniquement le champ contenu dans le document principal c'est à dire {INCLUDETEXT "INCLUDE-NIVEAU1.doc"} ou alors
    les deux includes {INCLUDETEXT "INCLUDE-NIVEAU1.doc"} et {INCLUDETEXT "INCLUDE-NIVEAU2.doc"} sont parcourus dans le document principal DOC-PRINCIPAL-NIVEAU0.doc ?


    Ce que me donne le résultat du code est les deux includes niveau 1 et niveau 2. Or dans le cas réel de mon projet, j'ai parfois uniquement le parcours d'include uniquement dans
    le document principal et à d'autres moments j'ai des includes niveau1 et 2 et voire d'autres include qui ne sont même pas mentionnés.
    D'où la bizarrerie de cet objet FIELD. Je n'arrive vraiment pas à comprendre ce qu'il fait et comment il recherche ces champs.

    J'ai tout tenté avec la mise à jour des champs etc.. mais le comportement de recherche des includes est un peu aléatoire. Ou alors il existe une autre commande vba pour le faire fonctionner correctement ?

    Je vous remercie en tout cas pour votre aide

  6. #6
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 224
    Points : 443
    Points
    443
    Par défaut
    Bonjour dexter01,

    La logique du code VBA ci-dessus voudrait qu'on aurait comme résultat dans la console d'exécution :
    uniquement le champ contenu dans le document principal c'est à dire {INCLUDETEXT "INCLUDE-NIVEAU1.doc"} ou alors
    les deux includes {INCLUDETEXT "INCLUDE-NIVEAU1.doc"} et {INCLUDETEXT "INCLUDE-NIVEAU2.doc"} sont parcourus dans le document principal DOC-PRINCIPAL-NIVEAU0.doc ?
    J'ai reproduit ton exemple : DOC-PRINCIPAL-NIVEAU0.docx qui contient un champ INCLUDETEXT pointant vers INCLUDE-NIVEAU1.docx qui lui-même contient un champ INCLUDETEXT pointant vers INCLUDE-NIVEAU2.docx.
    Le VBA voit que DOC-PRINCIPAL-NIVEAU0.docx contient deux champs INCLUDETEXT.

    J'ai tout tenté avec la mise à jour des champs etc.. mais le comportement de recherche des includes est un peu aléatoire. Ou alors il existe une autre commande vba pour le faire fonctionner correctement ?
    Je t'avoue ne pas trop comprendre ton objectif... Qu'entends-tu par fonctionner correctement ?

    A+

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 34
    Points : 71
    Points
    71
    Par défaut
    Dans le cas réel c'est à dire avec les documents de ma boite je dois réaliser un traitement spécifique par ailleurs en me basant sur ce parcours de champs
    INCLUDETEXT. Donc j'ai besoin que ce parcours de champs INCLUDETEXT soit fiable mais je n'ai pas l'impression qu'il soit fiable et me fait un peu n'importe quoi.
    Je ne pourrais pas partager les documents réels de ma boite pour évoquer le cas je pense car ce sont des données confidentielles.

    En revanche on peut partir de l'exemple des 3 documents :

    Dans mes documents réels, j'ai plutôt des INCLUDETEXT qui sont intégrés dans d'autres types de champ, comme vous avez pu reproduire mon cas, reprenons l'exemple et dans le document principal DOC-PRINCIPAL-NIVEAU0.doc remplaçons par ceci :
    {IF {MERGEFIELD CHAMPF } = "O" "{SET SIGNET "{INCLUDETEXT "INCLUDE-NIVEAU1.doc"}"}" ""}


    et dans le document INCLUDE-NIVEAU1.doc rajoutons un include par exemple : {INCLUDETEXT "nouvel include pour tester"}

    et maintenant revenons à notre code, on remarquera que le résultat du code affichera toujours l'include 1 et l'include 2. Et même après une mise à jour
    des champs du document principal, le code affichera toujours include1 et include 2. Donc le code a du mal à gérer un includetext intégré dans d'autres champs. C'est problématique.

    Si on garde QUE {INCLUDETEXT "INCLUDE-NIVEAU1.doc"} dans le document principal sans mise à jour, il n' y aura rien d'inchangé en revanche si on fait la mise à jour des champs du document principal et qu'ensuite on relance le code, il prendra bien en compte l'include 1 et 2 ET le nouvel include rajouté. Mais ce n'est pas dans mon cas réel de mes documents malheureusement, j'ai beaucoup d' INLCUDETEXT intégrés dans d'autres types de champ

    Donc je ne vois pas comment remédier à ce problème, avez-vous une idée pour que le parcours des champs INCLUDETEXT se fassent correctement avec cet objet FIELD ?

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 34
    Points : 71
    Points
    71
    Par défaut
    Bonjour

    personne n'a un avis ou un commentaire sur ce sujet ? à moins qu'il existe une autre façon autre que le code ci-dessus pour parcourir des champs Includetext ? même si j'en doute mais sait-on jamais.

    merci
    Cordialement

Discussions similaires

  1. Utilisation des champs dans WORD
    Par Nverder dans le forum Word
    Réponses: 3
    Dernier message: 21/05/2013, 16h07
  2. Réponses: 1
    Dernier message: 05/05/2008, 20h56
  3. [VBA-W] changer la source des liaisons dans Word
    Par pointe dans le forum VBA Word
    Réponses: 1
    Dernier message: 07/02/2007, 09h25
  4. [VBA-E]Insérer des autotext dans Word à partir d'excel
    Par noordman dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/04/2006, 15h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo