OVH Cloud OVH Cloud

Champs /Field VBA

5 réponses
Avatar
Oliv'
Bonjour à tous,
je travaille sur des champs comportant des formules imbriquées.
Pour débogage et notamment plublication sur ce forum j'avais besoin de
copier le "code" du champ (et non pas le résultat)
j'ai donc trouvé et modifié cette petite macro qui insère en texte à la fin
du document les codes trouvés

sub code_champ()
Dim fieldLoop As Field
For Each fieldLoop In ActiveDocument.Fields
'MsgBox Chr(34) & fieldLoop.Code.Text & Chr(34)
pressepapier = fieldLoop.Code.Text
ActiveDocument.Content.InsertAfter pressepapier
ActiveDocument.Content.InsertAfter Chr(13) & Chr(10) & Chr(13)
Next fieldLoop
end sub

Cependant lorsque j'ai des champs imbriqués le résultat est donné pour
chaque champ
ex (les  = { ou }:

= NUMPAGES \* MERGEFORMAT  + PAGE \* MERGEFORMAT 



NUMPAGES \* MERGEFORMAT



PAGE \* MERGEFORMAT


Mes questions donc
y a t'il une notion de hiérachie ? comment écrire je ne veux que le code
du champ parent?

Auriez vous une macro qui à partir du texte d'un code de champ recréé ce
champ ?

merci
--
Have a nice day
Cdt
Oliv'

5 réponses

Avatar
Geo
Bonjour Oliv'

Tu sais qu'on peut imprimer le contenu des codes champs au lieu du résultat
?

--

A+
Avatar
Geo
Bonjour Oliv'

Sinon il faudrait modifier ta boucle en sautant de champ en champ,
juste une idée pas testée,
regarder ce que ferait l'enregistreur de macro avec F5 champ
traiter le champ, passer en fin de champ
puis refaire f5 champ etc.
Ou ne traiter que certains champs si tu sais ceux que tu veux traiter.

NB C'est d'ailleurs l'époque aussi pour commencer à traiter les jardins
contre les parasites.

--

A+
Avatar
Oliv'
Geo que je salut a écrit:
Bonjour Oliv'

Sinon il faudrait modifier ta boucle en sautant de champ en champ,
juste une idée pas testée,
regarder ce que ferait l'enregistreur de macro avec F5 champ
traiter le champ, passer en fin de champ
puis refaire f5 champ etc.
ce n'est pas le même code mais même résultat


Ou ne traiter que certains champs si tu sais ceux que tu veux traiter.
en fait non

Mais peut être qu'en vérifiant la position du début du champ par rapport à
la fin du précédent, ca marcherait mais je ne connais pas bien les objets
vba WORD, suis carrèment plus à l'aise avec Excel.

NB C'est d'ailleurs l'époque aussi pour commencer à traiter les
jardins contre les parasites.
pas que les jardins ;-)))


Pour ce qui est de l'impression mentionnée dans ton précédent post, cela
fonctionne si j'imprime dans un fichier vers mon imprimante pdf ,pour
pouvoir copier coller ailleurs ex ici :
{ ={ NUMPAGES * MERGEFORMAT } +{ PAGE * MERGEFORMAT }}
Oliv'

Avatar
Oliv'
Oliv' <(supprimerceci) c'est moi !! a écrit:
Geo que je salut a écrit:
Bonjour Oliv'

Sinon il faudrait modifier ta boucle en sautant de champ en champ,
juste une idée pas testée,
regarder ce que ferait l'enregistreur de macro avec F5 champ
traiter le champ, passer en fin de champ
puis refaire f5 champ etc.
ce n'est pas le même code mais même résultat


Ou ne traiter que certains champs si tu sais ceux que tu veux
traiter.
en fait non

Mais peut être qu'en vérifiant la position du début du champ par
rapport à la fin du précédent, ca marcherait mais je ne connais pas
bien les objets vba WORD, suis carrèment plus à l'aise avec Excel.

NB C'est d'ailleurs l'époque aussi pour commencer à traiter les
jardins contre les parasites.
pas que les jardins ;-)))


Pour ce qui est de l'impression mentionnée dans ton précédent post,
cela fonctionne si j'imprime dans un fichier vers mon imprimante pdf
,pour pouvoir copier coller ailleurs ex ici :
{ ={ NUMPAGES * MERGEFORMAT } +{ PAGE * MERGEFORMAT }}
Oliv'


Voici le code que j'ai pondu et qui à l'aire de fonctionner assez bien.

Sub ajout_texte_des_code_champs()
'
' Macro enregistrée le 06/04/2005 par Olivier CATTEAU
' Ajoute à la fin du document les codes de champs principaux trouvés

Dim fieldLoop As Field
Selection.HomeKey Unit:=wdStory
nbr = ActiveDocument.Fields.Count
For i = 1 To nbr
Set myfield = Selection.NextField
If Not (myfield Is Nothing) Then StatusBar = "Field found :" & myfield.Index

pressepapier = ActiveDocument.Fields(myfield.Index).Code.Text
Selection.MoveRight Unit:=wdCharacter, Count:=1
pressepapier1 = Replace(pressepapier, "", "{")
pressepapier2 = "{" & Replace(pressepapier1, "", "}") & "}"

ActiveDocument.Content.InsertAfter pressepapier2
ActiveDocument.Content.InsertAfter Chr(13) & Chr(10) & Chr(13)
i = myfield.Index
Next i

End Sub
--
Espèrant que cela puisse vous servir
Oliv'


Avatar
Geo
Bonjour Oliv'


Voici le code que j'ai pondu et qui à l'aire de fonctionner assez
bien.


[ Couic ]

Perso je n'en ai pas besoin pour l'instant amis on ne sait jamais.
Merci pour le retour