Mise à jour champs d'un fichier word

S

STéphane

Guest
bonjour

j'ai travaillé sur un code qui à partir des valeurs figurant dans les colonnes A & B d'une feuille de calcul Excel, crée un fichier Word à partir d'un document modèle et utilise ces valeurs pour mettre à jour deux champs figurant dans le modèle.

comme je pense que cela peut grandement servir, je vous mets le code, cela vous évitera de batailler avec les propriétés de l'objet field (champ dans word), quoique ma gestion de ceux-ci n'est pas poussé et un peu bâtarde.

la gestion de l'ouverture d'une instance de word n'est pas blindée maisbon

voilà ce que fait la macro :

-ouvre une instance de word
-boucle sur une plage de données source correspondante à la première colonne de la feuille 2
-crée un document word à partir d'un modèle
-boucle sur chacun des champs du document et contrôle s'il s'agit de champs particuliers en se basant sur leur code : ceci est un peu bâtard, mais mon document ayant plusieurs champs,je n'ai trouvé que ce moyen de les identifier. Si vous n'avez que deux champs ou quelques uns, vous pouvez également les identifier par leur index
-mise à jour des champs avec les valeurs d'excel
-sauvegarde du document sous un nom incluant une valeur de la colonne a et une autre de la colonne b

POUR TESTER LA MACRO, crée un document modèle word avec deux champs en prenant soin de renommer les champs soit dans mon code, soit dans votre modèle.
Faites également attention aux chemins d'accès


Sub Creat_Transports()
Application.ScreenUpdating = False

Dim wdApp As Object 'déclare la variable devant contenir la référence
Dim rg_SrcRange As Range, cl As Range
Dim fd As Field
Dim fd2 As String, fd1 As String

Set wdApp = CreateObject("word.application")
wdApp.DisplayAlerts = False

Set rg_SrcRange = Sheets("Feuil2").Range([A2], Cells([A65536].End(xlUp).Row, 1))

For Each cl In rg_SrcRange

wdApp.Documents.Add Template:="c:\winnt\profiles\royers\bureau\mod_transport.dot"

For Each fd In wdApp.ActiveDocument.Fields
If InStr(1, fd.Code, "Code_tr") > 0 Then fd.Result.Text = cl.Value: fd1 = fd.Result.Text
If InStr(1, fd.Code, "Desc_Tr") > 0 Then fd.Result.Text = cl.Offset(0, 1).Value: fd2 = fd.Result.Text
Next fd

'sans boucle :
'Set fd1 = wdApp.ActiveDocument.Fields(1): fd1.Result.Text = cl.Value
'Set fd2 = wdApp.ActiveDocument.Fields(2): fd2.Result.Text = cl.Offset(0, 1).Value

wdApp.ActiveDocument.SaveAs FileName:="c:\winnt\profiles\royers\bureau\transports\" & fd1 & "_" & fd2
wdApp.ActiveDocument.Close savechanges:=False

Next cl
wdApp.Quit
Set wdApp = Nothing ' puis libère la référence.
End Sub


j'espère que vous apprécierez

bye
stéphane


ps : à tout hasard, il y a longtemps j'avias essayé de manipuler le publipostage de word à partir d'excel mais sans succès, si vous savez omment faire ....
 
S

STéphane

Guest
bonjour

un zip exemple et une ou deux améliorations


bye
stephane
 

Pièces jointes

  • demo_maj_champs_word.zip
    16.2 KB · Affichages: 194
  • demo_maj_champs_word.zip
    16.2 KB · Affichages: 187
  • demo_maj_champs_word.zip
    16.2 KB · Affichages: 195
S

STéphane

Guest
bonjour


un autre zip avec des améliorations non testé jusqu'au bout car j'ai pas Microsoft Outlook


bye
stephane
 

Pièces jointes

  • demo_maj_champs_word.zip
    21.2 KB · Affichages: 104
  • demo_maj_champs_word.zip
    21.2 KB · Affichages: 117
  • demo_maj_champs_word.zip
    21.2 KB · Affichages: 113

Discussions similaires

Statistiques des forums

Discussions
312 074
Messages
2 085 070
Membres
102 770
dernier inscrit
mathieu.lemaitre