IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Ouvrir un fichier Word via une macro EXCEL et via un explorateur [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur aéronautique
    Inscrit en
    Août 2017
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur aéronautique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2017
    Messages : 363
    Par défaut Ouvrir un fichier Word via une macro EXCEL et via un explorateur
    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.

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 166
    Billets dans le blog
    53
    Par défaut
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =LIEN_HYPERTEXTE("Tutoriel - Hyperlink.docx";"Tuto LIEN_HYPERTEXTE")
    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#Offre";"Signet 'Offre' du tutoriel LIEN_HYPERTEXTE")
    Il est évidemment possible d'ouvrir un document Word se trouvant dans un autre répertoire.
    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 sur et 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

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur aéronautique
    Inscrit en
    Août 2017
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur aéronautique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2017
    Messages : 363
    Par défaut
    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

  4. #4
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par licpegpon Voir le message
    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.
    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.

  5. #5
    Membre éclairé
    Homme Profil pro
    Ingénieur aéronautique
    Inscrit en
    Août 2017
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur aéronautique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2017
    Messages : 363
    Par défaut
    Bonjour Menhir,

    Voici une copie d'écran du fichier EXCEL à partir duquel j'exécute la macro en cliquant sur le bouton fluo.

    Nom : Capture_1.JPG
Affichages : 2390
Taille : 93,4 Ko


    Voici une copie d'écran du fichier Word vers lequel je transfère les valeurs de champs.

    Nom : Capture_2.JPG
Affichages : 2393
Taille : 107,6 Ko


    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 :

    Nom : Capture_3.JPG
Affichages : 2442
Taille : 74,3 Ko

    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.

  6. #6
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par licpegpon Voir le message
    Voici la macro dans sa version actuelle :
    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.

    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 ?
    Personnellement, je préfère utiliser des Bookmark (signets) dans Word pour désigner les parties à modifier.

    Ca donnerait des lignes de code comme celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WordDoc.Bookmarks("BM_Title").Range.Text = ExcelWS.Range("B2").Text
    En mettant dès le début du code Set ExcelWS = Workbooks("BD_DRC.xlsm").Sheets("Feuil1") plus fiable que tes Activate.

    Ce code ne pourrait bien sûr fonctionner que si les signets correspondant son mis en place dans le modèle Word.

    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é.
    C'est ce que fait la méthode GetOpenFilename que j'ai indiqué dans ma réponse précédente.
    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 ?

  7. #7
    Membre éclairé
    Homme Profil pro
    Ingénieur aéronautique
    Inscrit en
    Août 2017
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur aéronautique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2017
    Messages : 363
    Par défaut
    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 :

    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
    Merci par avance.

    Cdlt.
    Jérôme.

  8. #8
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par licpegpon Voir le message
    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 )
    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.

    J'ai essayé de tenir compte de tes commentaires cependant je cale au niveau du Getobjet ??
    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.

    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Ouvrir un fichier Word via macro de Excel
    Par dadu35 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 04/09/2015, 03h05
  2. Ouvrir un fichier video par une macro excel
    Par cott333 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 10/05/2013, 14h11
  3. Ouvrir un fichier pdf depuis une macro
    Par Maluje dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 28/03/2008, 17h51
  4. Convertir un fichier word en une BDD excel
    Par Kiefer_Sutherland dans le forum Excel
    Réponses: 11
    Dernier message: 01/09/2007, 13h40
  5. Ouvrir un fichier word via formulaire
    Par liop49 dans le forum Access
    Réponses: 10
    Dernier message: 07/09/2006, 12h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo