Bonjour,
J'ai un petit souci que je n'arrive pas a comprendre ni à résoudre.
Sur Excel 2010, j'ai un tableau avec une liste de document word a créer.
A coté, j'ai un Template Word qui contient des champs.
Ces champs sont liées aux propriétés personnalisées du document Word.
En double cliquant sur le titre du document dans excel, je souhaite via VBA, créer un nouveau document issu du Template, le renommer et le sauvegarder quelque part sur le réseau et ensuite modifier les propriétés personnalisées.
Les valeurs utilisées pour modifiées les champs Word sont issus d'un formulaire initié après double clic sur le titre du document dans le tableau Excel.
Voici le premier code pour créer le document:
Voici le second code pour modifier les propriétés personnalisées du document :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 'Création du fichier Word Set wordapp = CreateObject("word.Application") wordapp.Visible = True Set DocWord = wordapp.Documents.Add(Template:="\\dom2.ad.sys\DFSLPT1ROOT\LPT1_TUS$\05_Field_Service\507_PGI_2016-2017\04-MACRO_FLORENT\DOSSIER_TEMPORAIRE_FP\Trame\Field Procedure Template French.dotx", NewTemplate:=False, DocumentType:=0) NomFich = "\\dom2.ad.sys\DFSLPT1ROOT\LPT1_TUS$\05_Field_Service\507_PGI_2016-2017\04-MACRO_FLORENT\DOSSIER_TEMPORAIRE_FP\En cours\" & Template_Property.TextBox11.Value & ".docx" wordapp.ActiveDocument.SaveAs Filename:=NomFich, FileFormat:= _ wdFormatDocumentDefault, LockComments:=False, Password:="", AddToRecentFiles:= _ True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:= _ False, SaveNativePictureFormat:=False, SaveFormsData:=False, _ SaveAsAOCELetter:=False wordapp.ActiveDocument.Close wordapp.Quit Set wordapp = Nothing Set DocWord = Nothing
Tout fonctionne très bien a un détail près .
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 'Modification des propriété personnalisées document word 'Nécessite d'activer la référence DSO OleDocument Properties Reader 2.0 'http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q224351 Dim DSO As DSOFile.OleDocumentProperties Set DSO = New DSOFile.OleDocumentProperties 'Attention: Le fichier doit être préalablement fermé! DSO.Open sfilename:="\\dom2.ad.sys\DFSLPT1ROOT\LPT1_TUS$\05_Field_Service\507_PGI_2016-2017\04-MACRO_FLORENT\DOSSIER_TEMPORAIRE_FP\En cours\" & Template_Property.TextBox11.Value & ".docx" DSO.CustomProperties.Item("FP #") = Template_Property.TextBox1.Value DSO.CustomProperties.Item("Schedule Task & Step Number") = Template_Property.TextBox2.Value DSO.CustomProperties.Item("Current Revision") = Template_Property.TextBox3.Value DSO.CustomProperties.Item("Approved By DATE") = Template_Property.TextBox4.Value DSO.CustomProperties.Item("Approved By") = Template_Property.TextBox5.Value DSO.CustomProperties.Item("Prepared By DATE") = Template_Property.TextBox6.Value DSO.CustomProperties.Item("Prepared By") = Template_Property.TextBox7.Value DSO.CustomProperties.Item("Reference Drawing Title") = Template_Property.TextBox8.Value DSO.CustomProperties.Item("Reference MLI or Cost Code") = Template_Property.TextBox9.Value DSO.CustomProperties.Item("Equipment Type") = Template_Property.TextBox10.Value DSO.SummaryProperties.Title = Template_Property.TextBox11.Value DSO.Close True Set DSO = Nothing
A l'ouverture du document nouvellement créé, les champs personnalisés ont bien été modifiés mais n'ont pas été mis à jour.
Je souhaiterais que les champs soient mis à jour pour que les collègues n'aient pas à penser que ce n'est pas le bon document qu'ils ont ouvert ou bien a leur demander de faire eux-mêmes la mise à jour des champs (Ctrl + A + F9)
Et je ne vois pas comment je peux le faire automatiquement en vba à la fin du 2ème code.
Sinon j'ai essayé d'inverser les 2 paragraphes de codes pour modifier les propriétés du Template avant création du document.
Dans ce cas, les champs sont mis à jour, mais une fois sur 2 le code plante a la ligne "DSO.Close true" en me disant : Erreur 70 permission refusée.
et je dois alors reseter les champs manuellement dans le Template avant de pouvoir refaire l'opération.
Si quelqu'un avait une idée, je lui en serais extrêmement reconnaissant.
Merci d'avance.
Agd
Partager