Bonjour,
Je cherche la (les) ligne(s) de commande(s) permettant d'ouvrir depuis un fichier EXCEL (donc macro EXCEL) un fichier Word et ceci via un explorateur de fichier.
Si vous avez des suggestions je suis preneur. Merci par avance.
Cdlt.
Jérôme.
Discussion :
Bonjour,
Je cherche la (les) ligne(s) de commande(s) permettant d'ouvrir depuis un fichier EXCEL (donc macro EXCEL) un fichier Word et ceci via un explorateur de fichier.
Si vous avez des suggestions je suis preneur. Merci par avance.
Cdlt.
Jérôme.
Bonjour,
Sans code VBA, la fonction LIEN_HYPERTEXTE permet de naviguer dans un répertoire, voir ce billet La fonction LIEN_HYPERTEXTE et l'ouverture de répertoire
On peut également ouvrir directement un document Word depuis Excel à l'aide la même fonction
Exemple pour l'ouverture du document Tutoriel - Hyperlink.docx se trouvant dans le même répertoire que le classeur où se trouve la fonction
Exemple d'ouverture du même document en sélectionnant le signet nommé Offre
Code : Sélectionner tout - Visualiser dans une fenêtre à part =LIEN_HYPERTEXTE("Tutoriel - Hyperlink.docx";"Tuto LIEN_HYPERTEXTE")
Il est évidemment possible d'ouvrir un document Word se trouvant dans un autre répertoire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part =LIEN_HYPERTEXTE("Tutoriel - Hyperlink.docx#Offre";"Signet 'Offre' du tutoriel LIEN_HYPERTEXTE")
Pour la syntaxe voir cet autre billet Ouvrir un classeur à l'aide de la fonction LIEN_HYPERTEXTE
Philippe Tulliez
Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer suret si celle-ci est pertinente pensez à voter
Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier
Bonjour,
Peut-être je me trompe, mais je cherche plutôt à ouvrir un fichier word avec un menu du type "fichier / ouvrir" et à partir de là je peux naviguer dans les dossiers et sous dossier et finalement sélectionner le fichier word voulu.
Toutes les fonctionnalités que vous citez m intéressent malgré tout.
Merci bcp.
Cdlt.
Jerome
Je ne comprends pas ce que tu veux dire par "via un explorateur de fichier".
Est-ce que tu veux dire par là que tu veux pouvoir sélectionner le fichier dans une fenêtre semblable à celle qu'on obtient quand on fait Fichier>Ouvrir ?
Si c'est le cas, utilise la méthode GetOpenFilename.
Lire ceci : https://docs.microsoft.com/fr-fr/off...etopenfilename
Attention, cette méthode te permet seulement de sélectionner le fichier. Elle ne l'ouvre pas.
Pour ouvrir un fichier Word sans Excel, il y a plusieurs méthodes.
Celle que je trouve la plus simple est la fonction GetObject.
Lire ça : https://docs.microsoft.com/fr-fr/off...bject-function
Attention, pense à mettre le résultat de cette fonction dans une variable de type Word.Document pour pouvoir y faire référence dans la suite du code.
Bonjour Menhir,
Voici une copie d'écran du fichier EXCEL à partir duquel j'exécute la macro en cliquant sur le bouton fluo.
Voici une copie d'écran du fichier Word vers lequel je transfère les valeurs de champs.
Voici la macro dans sa version actuelle :
Comme je suis en phase de développement, je n'ai pas encore mis tous les champs dans le documents word. C'est pour cette raison que certaines lignes sont encore en commentaires.
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
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119 Option Explicit Sub publipostage() ' ' Déclaration des variables ' Dim A_Doc_Title As String Dim A_Doc_Origin As String Dim A_Doc_Reference As String Dim A_Doc_Issue As String Dim A_Doc_Date As String Dim A_AC_Applicability As String Dim A_Customer As String Dim A_ATA_Applicability As String Dim A_Authoring_Name1 As String Dim A_Authoring_Function1 As String Dim A_Approval_Name1 As String Dim A_Approval_Function1 As String Dim A_Authorization_Name1 As String Dim A_Authorization_Function1 As String Dim Ref_RFF As String Dim Title_RFF As String Dim Issue_RFF As String Dim Date_RFF As String Dim Source_Siglum_RFF As String Dim Source_Name_RFF As String Dim Ref_FS As String Dim Title_FS As String Dim Issue_FS As String Dim Date_FS As String Dim Source_Siglum_FS As String Dim Source_Name_FS As String Dim Ref_ID As String Dim WordApp As Object Dim WordDoc As Object Dim pRange As Object ' 'Activation du fichier "BD_DRC.xlsm", on se place dans l'onglet "Feuil1" ' Windows("BD_DRC.xlsm").Activate Sheets("Feuil1").Activate ' ' Mise en mémoire ' A_Doc_Title = Range("B2").Value A_Doc_Origin = Range("C2").Value A_Doc_Reference = Range("D2").Value A_Doc_Issue = Range("E2").Value A_Doc_Date = Range("F2").Value A_AC_Applicability = Range("G2").Value A_Customer = Range("H2").Value A_ATA_Applicability = Range("I2").Value A_Authoring_Name1 = Range("J2").Value A_Authoring_Function1 = Range("K2").Value A_Approval_Name1 = Range("L2").Value A_Approval_Function1 = Range("M2").Value A_Authorization_Name1 = Range("N2").Value A_Authorization_Function1 = Range("O2").Value Ref_RFF = Range("P2").Value Title_RFF = Range("Q2").Value Issue_RFF = Range("R2").Value Date_RFF = Range("S2").Value Source_Siglum_RFF = Range("T2").Value Source_Name_RFF = Range("U2").Value Ref_FS = Range("V2").Value Title_FS = Range("W2").Value Issue_FS = Range("X2").Value Date_FS = Range("Y2").Value Source_Siglum_FS = Range("Z2").Value Source_Name_FS = Range("AA2").Value Ref_ID = Range("AB2").Value ' ' Ouverture de Word ' Set WordApp = CreateObject("Word.application") WordApp.Visible = True ' ' Ouverture du document "UH Temp IZRCK6 - Copie.docm" avec Word ' Set WordDoc = WordApp.Documents.Add(Template:="C:\Users\AB25418\Desktop\TEST\UH Temp IZRCK6 - Copie.docm", Newtemplate:=False, DocumentType:=0) ' ' Modification des champs ' WordApp.ActiveDocument.CustomDocumentProperties("A_Doc_Title") = A_Doc_Title WordApp.ActiveDocument.CustomDocumentProperties("A_Doc_Origin") = A_Doc_Origin WordApp.ActiveDocument.CustomDocumentProperties("A_Doc_Reference") = A_Doc_Reference WordApp.ActiveDocument.CustomDocumentProperties("A_Doc_Issue") = A_Doc_Issue WordApp.ActiveDocument.CustomDocumentProperties("A_Doc_Date") = A_Doc_Date WordApp.ActiveDocument.CustomDocumentProperties("A_AC_Applicability") = A_AC_Applicability WordApp.ActiveDocument.CustomDocumentProperties("A_Customer") = A_Customer WordApp.ActiveDocument.CustomDocumentProperties("A_ATA_Applicability") = A_ATA_Applicability WordApp.ActiveDocument.CustomDocumentProperties("A_Authoring_Name1") = A_Authoring_Name1 WordApp.ActiveDocument.CustomDocumentProperties("A_Authoring_Function1") = A_Authoring_Function1 WordApp.ActiveDocument.CustomDocumentProperties("A_Approval_Name1") = A_Approval_Name1 WordApp.ActiveDocument.CustomDocumentProperties("A_Approval_Function1") = A_Approval_Function1 WordApp.ActiveDocument.CustomDocumentProperties("A_Authorization_Name1") = A_Authorization_Name1 WordApp.ActiveDocument.CustomDocumentProperties("A_Authorization_Function1") = A_Authorization_Function1 WordApp.ActiveDocument.CustomDocumentProperties("Ref_RFF") = Ref_RFF 'WordApp.ActiveDocument.CustomDocumentProperties("Title_RFF") = Title_RFF 'WordApp.ActiveDocument.CustomDocumentProperties("Issue_RFF") = Issue_RFF 'WordApp.ActiveDocument.CustomDocumentProperties("Date_RFF") = Date_RFF 'WordApp.ActiveDocument.CustomDocumentProperties("Source_Siglum_RFF") = Source_Siglum_RFF 'WordApp.ActiveDocument.CustomDocumentProperties("Source_Name_RFF") = Source_Name_RFF 'WordApp.ActiveDocument.CustomDocumentProperties("Ref_FS") = Ref_FS 'WordApp.ActiveDocument.CustomDocumentProperties("Title_FS") = Title_FS 'WordApp.ActiveDocument.CustomDocumentProperties("Issue_FS") = Issue_FS 'WordApp.ActiveDocument.CustomDocumentProperties("Date_FS") = Date_FS 'WordApp.ActiveDocument.CustomDocumentProperties("Source_Siglum_FS") = Source_Siglum_FS 'WordApp.ActiveDocument.CustomDocumentProperties("Source_Name_FS") = Source_Name_FS WordApp.ActiveDocument.CustomDocumentProperties("Ref_ID") = Ref_ID ' ' Mise à jour champs dans feuilles et entêtes ' For Each pRange In WordApp.ActiveDocument.StoryRanges pRange.Fields.Update Next ' MsgBox ("Procedure completed !!") ' End Sub
Mon problème : Les champs situés en entête du document word sont bien mis à jour mais pas ceux présents dans le corps du texte (en l'occurence les champs "Ref_RFF" et "Ref_ID" surlignés en fluo).
que dois-je faire pour que TOUS les champs soient mis à jour ?
Concernant l'explorateur de fichier : "Je ne comprends pas ce que tu veux dire par "via un explorateur de fichier"".
En fait je souhaiterais que lorsque le code arrive à la ligne 79 (Set WordDoc = ...) un menu comme indiqué ci-dessous apparaisse :
Je peux ainsi me déplacer dans le bon dossier/sous-dossier et sélectionner le fichier souhaité.
Merci par avance.
Cdlt.
Jérôme.
Je ne comprends pas pourquoi tu utilises des variables intermédiaires entre la valeur de cellule et le renseignement dans le document Word.
Il est possible d'adresser directement ces cellules.
Personnellement, je préfère utiliser des Bookmark (signets) dans Word pour désigner les parties à modifier.Mon problème : Les champs situés en entête du document word sont bien mis à jour mais pas ceux présents dans le corps du texte (en l'occurence les champs "Ref_RFF" et "Ref_ID" surlignés en fluo).
que dois-je faire pour que TOUS les champs soient mis à jour ?
Ca donnerait des lignes de code comme celle-ci :
En mettant dès le début du code Set ExcelWS = Workbooks("BD_DRC.xlsm").Sheets("Feuil1") plus fiable que tes Activate.
Code : Sélectionner tout - Visualiser dans une fenêtre à part WordDoc.Bookmarks("BM_Title").Range.Text = ExcelWS.Range("B2").Text
Ce code ne pourrait bien sûr fonctionner que si les signets correspondant son mis en place dans le modèle Word.
C'est ce que fait la méthode GetOpenFilename que j'ai indiqué dans ma réponse précédente.En fait je souhaiterais que lorsque le code arrive à la ligne 79 (Set WordDoc = ...) un menu comme indiqué ci-dessous apparaisse :
Je peux ainsi me déplacer dans le bon dossier/sous-dossier et sélectionner le fichier souhaité.
Et tu pourrais éliminer ton CreateObjet (et le Documents.Add qui suit) en le remplaçant par un GetObjet.
L'as-tu au moins testée ?
Bonjour Menhir,
J'ai essayé de tenir compte de tes commentaires cependant je cale au niveau du Getobjet ??
De la même façon je ne suis pas du tout sûr de la partie déclaration des variables...Je pensais qu'il fallait déclarer ExcelWS comme un Workbook (comme j'ai eu un message d'erreur de compilation j'ai alors mis object, sans savoir pourquoi, je n'ai plus d'erreur à ce niveau)
Voici la version modifiée de la macro, notablement plus courte que la version initiale :
Merci par avance.
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
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 Option Explicit Sub publipostage() ' ' Déclaration des variables ' Dim WordApp As Object Dim WordDoc As Object Dim pRange As Object Dim ExcelWS As Object Dim Template As Variant ' 'Activation du fichier "BD.xlsm", on se place dans l'onglet "Feuil1" ' Set ExcelWS = Workbooks("BD.xlsm").Sheets("Feuil1") ' ' 'Ouverture du template Word ' Template = Application.GetOpenFilename("Documents Word prenant en charge les macros (*.docm), Tous les fichiers (*.*),*.* ", 1, "Sélect the template", , False) Getobjet ????? ' ' Modification des champs ' WordApp.ActiveDocument.CustomDocumentProperties("A_Doc_Title") = Range("B2").Value WordApp.ActiveDocument.CustomDocumentProperties("A_Doc_Origin") = Range("C2").Value WordApp.ActiveDocument.CustomDocumentProperties("A_Doc_Reference") = Range("D2").Value WordApp.ActiveDocument.CustomDocumentProperties("A_Doc_Issue") = Range("E2").Value WordApp.ActiveDocument.CustomDocumentProperties("A_Doc_Date") = Range("F2").Value WordApp.ActiveDocument.CustomDocumentProperties("A_AC_Applicability") = Range("G2").Value WordApp.ActiveDocument.CustomDocumentProperties("A_Customer") = Range("H2").Value WordApp.ActiveDocument.CustomDocumentProperties("A_ATA_Applicability") = Range("I2").Value WordApp.ActiveDocument.CustomDocumentProperties("A_Authoring_Name1") = Range("J2").Value WordApp.ActiveDocument.CustomDocumentProperties("A_Authoring_Function1") = Range("K2").Value WordApp.ActiveDocument.CustomDocumentProperties("A_Approval_Name1") = Range("L2").Value WordApp.ActiveDocument.CustomDocumentProperties("A_Approval_Function1") = Range("M2").Value WordApp.ActiveDocument.CustomDocumentProperties("A_Authorization_Name1") = Range("N2").Value WordApp.ActiveDocument.CustomDocumentProperties("A_Authorization_Function1") = Range("O2").Value WordApp.ActiveDocument.CustomDocumentProperties("Ref_RFF") = Range("P2").Value WordApp.ActiveDocument.CustomDocumentProperties("Ref_ID") = Range("AB2").Value ' ' Mise à jour champs dans feuilles et entêtes ' For Each pRange In WordApp.ActiveDocument.StoryRanges pRange.Fields.Update Next ' MsgBox ("Procedure completed !!") ' End Sub
Cdlt.
Jérôme.
Dans ce code, ExcelWS ne désigne pas le classeur entier (Workbook) mais la feuille (Worksheet) qui contient les données, comme le laisse supposé l'acronyme "WS" que j'ai utilisé dans son nom mais surtout, comme le montre le "Set" que j'ai écrit dans ma réponse précédente.
Le GetObject s'utilise presque de la même façon que le CreateObject, à ceci près qu'il ne se contente pas de créer un nouvelle élément d'une application extérieure mais ouvre directement le fichier avec son application.J'ai essayé de tenir compte de tes commentaires cependant je cale au niveau du Getobjet ??
Le CreateObject n'a de sens que si l'on veut créer un objet (Document, classeur, etc.) vierge.
Si l'on veut ouvrir un fichier existant, il est plus simple et rapide de l'ouvrir directement avec un GetObject qu'en deux temps avec un CreateObject puis un Open.
Petit détail : GetObject est une fonction et, à ce titre, retourne une valeur qui référence de l'objet ouvert. Par exemple, dans ton cas, un document Word.
Donc, il faut mettre cet valeur dans une variable de type Word.Document si on veut pouvoir faire référence à ce document dans la suite du code.
Partager