Modifier champs dans Word par VBA
Bonjour le forum,
Eh bien voilà... je ne pensais pas que ça irait si vite, mais déjà ma première question après une matinée de reprise
J'avais crée des documents modèles sous Word, avec des champs persos DOCPROPERTY.
Ceci pour que dans les entêtes, et les formules bateaux de présentation du projet, les secrétaires n'aient pas à retaper les informations qui ressortent toutes les 3 lignes (nom du client, N° de devis...) (en en oubliant au passage, et en faisant quelques fautes de frappe ben sûr
Mais voilà en mon absence ils ont "oublié" comment modifier un champ à la création d'un nouveau devis
Donc je me suis dit : qu'à cela ne tienne, maintenant que je sais faire des macros, je vais leur faire un bouton et une inputbox ou un userform, comme ça y'aura plus de soucis...
Mais je n'arrive pas à trouver la syntaxe qui va bien pour modifier un champ existant, et l'enregistreur de macro ne réagit pas
Comme ça marche pareil avec Excel, je me dis que peut-être quelqu'un ici connaîtra la réponse
Merci d'avance, Sylvain
hello
suggestion :
tu sembles avoir de meilleures compétences en Excel qu'en Word (VBA y compris)
imagine faire les devis sur Excel.
quitte à y insérer un objet Word s'il y a de longs textes.
Merci jmd pour la suggestion,
Mais ça ne m'emballe pas trop, vu que c'est juste des descriptifs technique avec un prix à la fin (pas de formules).
Donc la mise en page, les en-têtes, sont bien plus agréables sur Word.
A force de chercher sur le net, j'ai trouvé hier des bouts de syntaxe qu'il faut que je teste, je pense pouvoir arriver à en faire quelque chose
Comme ma priorité reste quand même la conception, je ne fais ça qu'en pointillé, ça n'avance pas trop...
Je communiquerai mon code dés que j'aurai réussi, ce qui ne saurait tarder je suis optimiste 8)
Re,
Je sais que j'y arriverais
J'ai fini par trouver le mot qui me manquait pour un champ perso :
CustomDocumentProperties
Pour les propriétés intégrées (titre, auteur,...), c'est
BuiltinDocumentProperties
Avec quelques essais pour trouver la syntaxe adéquate (ça ne déclenche as de saisie semi-automatique
Voilà ce que ça donne pour un champ perso "N°Devis", qui a déjà été crée dans le modèle avant de lancer la macro.
Sub MajChamps()
Dim Story As Variant
Dim rngNext As Word.Range
'==================================
' modification champ "N°Devis"
'==================================
ActiveDocument.CustomDocumentProperties("N°Devis") = InputBox _
("Indiquez ici le numéro de devis", N°Devis)
'==================================
' mise à jour champs dans feuilles
'==================================
Selection.WholeStory
Selection.Fields.Update
Application.Browser.Previous
'==================================
' mise à jour champs dans en-têtes
'==================================
' Iterate through all story types
For Each Story In ActiveDocument.StoryRanges
' Only Update fields in a header
If Story.StoryType = wdPrimaryHeaderStory Or _
Story.StoryType = wdFirstPageHeaderStory Or _
Story.StoryType = wdEvenPagesHeaderStory Then
' Update fields in this header
Story.Fields.Update
' There may be linked headers so Update them as well
Set rngNext = Story.NextStoryRange
Do Until rngNext Is Nothing
' Update fields in this header
rngNext.Fields.Update
' Link to next story (if any)
Set rngNext = rngNext.NextStoryRange
Loop
End If
Next
'==================================
' mise à jour champs dans pieds de pages
'==================================
' Iterate through all story types
For Each Story In ActiveDocument.StoryRanges
' Only update fields in a footer
If Story.StoryType = wdPrimaryFooterStory Or _
Story.StoryType = wdFirstPageFooterStory Or _
Story.StoryType = wdEvenPagesFooterStory Then
' Update fields in this footer
Story.Fields.Update
' There may be linked footers so update them as well
Set rngNext = Story.NextStoryRange
Do Until rngNext Is Nothing
' Update fields in this footer
rngNext.Fields.Update
' Link to next story (if any)
Set rngNext = rngNext.NextStoryRange
Loop
End If
Next
End Sub