[VBA - Word] Update des propriétés

Update des propriétés [VBA - Word] - VB/VBA/VBS - Programmation

Marsh Posté le 30-09-2003 à 09:36:51    

bonjour :hello:
Je vous explique le topo. J'insère dans mon document word des propriétés (exemple: Author). Il me mets la valeur de ce champ.
J'insère ce meme champ dans l'en-tete et le pied de page. Jusque là parfait. Je change la valeur de mon champ.
 
Je fais une petit macro avec pour code:
ActiveDocument.Fields.Update
(équivalent à clique droit - mettre à jour les champs).
 
Il me mets à jour les champs dans le document en lui-meme, mais pas dans l'en-tête et le pied de page. Existe-t-il une commande pour mettre à jour tous les champs du document en entier? ou doit-on magouiller pour faire le tour de toutes les "parties"?
 
merci pour votre aide :hello:

Reply

Marsh Posté le 30-09-2003 à 09:36:51   

Reply

Marsh Posté le 30-09-2003 à 10:27:35    

quand tu imprimes, il le met à jour ce champ ou bien c'est pas à jour dans tous les cas?
 
quand on pense qu'il y a déjà un beau bug qui traîne dans la mise à jour des numéros de page :D style t'as un document avant fusion de deux pages, puis plus qu'une après fusion, ben il imprime "1/2" sachant que 2 représente le total de pages (foireux donc dans ce cas ci).

Reply

Marsh Posté le 30-09-2003 à 10:29:29    

quand tu imprimes (ou même l'aperçu), il met effectivement à jour, ce qui nous a fait penser qu'il y avait une commande spécifique et non pas une magouille à réaliser

Reply

Marsh Posté le 30-09-2003 à 10:42:20    

j'ai enregistré une macro pour voir mais j'obtiens Selection.Fields.Update [:benou] (et bizarrement, il n'est pas possible de switcher entre le document et les header/footer pendant l'enregistrement d'une macro).

Reply

Marsh Posté le 30-09-2003 à 10:44:46    

hum... c'est un cas gouttu alors :/

Reply

Marsh Posté le 30-09-2003 à 11:09:14    

:hello:
Qu'est ce que tu appelles 'mettre a jour' ?
 
(oui, suis pas bien reveillee..)


---------------
NP :
Reply

Marsh Posté le 30-09-2003 à 11:18:45    

et bien si par exemple j'insère le champ "author" dans le document.
il me met la valeur.
si ensuite je change sa valeur, c'est toujours l'ancienne qui est sur le document.
c'est + clair?

Reply

Marsh Posté le 30-09-2003 à 11:19:41    

t'as pas essayé de gerer ça avec des signets ?


---------------
NP :
Reply

Marsh Posté le 30-09-2003 à 11:21:51    

j'ai jamais utilisé, ca sert à quoi?

Reply

Marsh Posté le 30-09-2003 à 11:24:01    

Tu places ton signet sur ton doc word.
tu le nommes, et ensuite, tu fais un bout de code qui va insérer une valeur là ou tu as placé ton signet.
et ca fonctionne aussi pour les pieds de pages, entetes de pages !


---------------
NP :
Reply

Marsh Posté le 30-09-2003 à 11:24:01   

Reply

Marsh Posté le 30-09-2003 à 11:25:46    

ah ouais ca pourrait être la soluce, le problème c'est que je sais pas si on peut utiliser autre chose que les propriétés (utilisation par plusieurs personnes et applic).
je regarde avec mon collègue cet aprèm :)

Reply

Marsh Posté le 30-09-2003 à 11:35:50    

tu me dis si tu veux le bout de code !


---------------
NP :
Reply

Marsh Posté le 30-09-2003 à 11:40:34    

ah ben si tu as sous la main file toujours ;)

Reply

Marsh Posté le 30-09-2003 à 11:43:07    

vais chercher...
 
ca donne un truc comme ça :  
 

Code :
  1. Private Function SetSignet(varSignet As String, valSignet As String) As String
  2.    
  3.     On Error GoTo erreurSetSignet
  4.     'On se positionne sur le signet
  5.     Set objRange = objWord.ActiveDocument.GoTo(What:=wdGoToBookmark, Name:=varSignet)
  6.     'On insère la valeur du signet
  7.     objRange.InsertBefore valSignet
  8.     SetSignet = "0"
  9.     Exit Function
  10. erreurSetSignet:
  11.     SetSignet = "-1"
  12.     erreurMsg = "(SetSignet)Problème au niveau du signet " & varSignet
  13. End Function ' Fin SetSignet


 
et après si par exemple tu as appellé dans ton doc word un signet 'author' et que tu veux lui attribuer la valeur 'Urd Sama' :
 

Code :
  1. SetSignet varSignet:="author", valSignet:="Urd Sama"


Message édité par walli le 30-09-2003 à 11:50:07

---------------
NP :
Reply

Marsh Posté le 30-09-2003 à 11:48:29    

merci :)

Reply

Marsh Posté le 19-07-2005 à 10:43:43    

Page de 2 ans référencée dans les 1eres réponses de Google. Impressionnant! Suffisant pour justifier ce mega-up!
 
Je viens tout juste d'avoir le meme pb: le ActiveDocument.Fields.Update qui ne met pas à jour les entetes et pied de page.
 
J'ai trouvé la réponse complète sur http://www.dotnet247.com/247refere [...] 06189.aspx
Celle ci a l'avantage de mettre tout à jour, sans besoin de prédéfinir des signets
 

Code :
  1. Public Sub UpdateFieldsInHeaders()
  2. Dim Story As Variant
  3. Dim rngNext As Word.Range
  4. ' Iterate through all story types
  5. For Each Story In ActiveDocument.StoryRanges
  6. ' Only Update fields in a header
  7. If Story.StoryType = wdPrimaryHeaderStory Or _
  8. Story.StoryType = wdFirstPageHeaderStory Or _
  9. Story.StoryType = wdEvenPagesHeaderStory Then
  10. ' Update fields in this header
  11. Story.Fields.Update
  12. ' There may be linked headers so Update them as well
  13. Set rngNext = Story.NextStoryRange
  14. Do Until rngNext Is Nothing
  15. ' Update fields in this header
  16. rngNext.Fields.Update
  17. ' Link to next story (if any)
  18. Set rngNext = rngNext.NextStoryRange
  19. Loop
  20. End If
  21. Next
  22. End Sub
  23. Public Sub updateFieldsInFooters()
  24. Dim Story As Variant
  25. Dim rngNext As Word.Range
  26. ' Iterate through all story types
  27. For Each Story In ActiveDocument.StoryRanges
  28. ' Only update fields in a footer
  29. If Story.StoryType = wdPrimaryFooterStory Or _
  30. Story.StoryType = wdFirstPageFooterStory Or _
  31. Story.StoryType = wdEvenPagesFooterStory Then
  32. ' Update fields in this footer
  33. Story.Fields.Update
  34. ' There may be linked footers so update them as well
  35. Set rngNext = Story.NextStoryRange
  36. Do Until rngNext Is Nothing
  37. ' Update fields in this footer
  38. rngNext.Fields.Update
  39. ' Link to next story (if any)
  40. Set rngNext = rngNext.NextStoryRange
  41. Loop
  42. End If
  43. Next
  44. End Sub

Reply

Marsh Posté le 06-10-2005 à 07:42:49    

J'ai eu le même problème... mais je n'ai pas trouvé la même solution ! La mienne est plus simple mais doit avoir des limitation (s'il y a plusieurs entete / pied de pages par exemple)
 
[cpp]' Met à jour les champs dans le corps du document
Selection.WholeStory
Selection.Fields.Update
 
' Passe dans le bas de page
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageFooter
Selection.WholeStory
Selection.Fields.Update
 
' Passe dans l'entete
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
Selection.WholeStory
Selection.Fields.Update
 
[/spoiler]

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed