Bonjour
je souhaite parcourir des champs word dans un document comment faire en vba ?
merci
Bonjour
je souhaite parcourir des champs word dans un document comment faire en vba ?
merci
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
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
Bonjour dexter01, Nain porte koi, le forum
Tu peux faire avec ce code :
A+
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
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 :
J'ai créé donc 3 documents :
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
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
Bonjour dexter01,
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.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 ?
Le VBA voit que DOC-PRINCIPAL-NIVEAU0.docx contient deux champs INCLUDETEXT.
Je t'avoue ne pas trop comprendre ton objectif... Qu'entends-tu par fonctionner correctement ?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 ?
A+
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 ?
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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager