Mise à jour champs d'un fichier word

  • Initiateur de la discussion Initiateur de la discussion STéphane
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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 ....
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
2
Affichages
511
Réponses
5
Affichages
639
Réponses
24
Affichages
2 K
Retour