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

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur aéronautique
    Inscrit en
    Août 2017
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    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
    Points : 79
    Points
    79
    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
    12 765
    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 : 12 765
    Points : 28 623
    Points
    28 623
    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 régulier
    Homme Profil pro
    Ingénieur aéronautique
    Inscrit en
    Août 2017
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    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
    Points : 79
    Points
    79
    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 sénior 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
    Points : 32 866
    Points
    32 866
    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.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  5. #5
    Membre régulier
    Homme Profil pro
    Ingénieur aéronautique
    Inscrit en
    Août 2017
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    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
    Points : 79
    Points
    79
    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 : 1884
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 : 1886
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 : 1940
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 sénior 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
    Points : 32 866
    Points
    32 866
    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 ?
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  7. #7
    Membre régulier
    Homme Profil pro
    Ingénieur aéronautique
    Inscrit en
    Août 2017
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    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
    Points : 79
    Points
    79
    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 sénior 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
    Points : 32 866
    Points
    32 866
    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.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  9. #9
    Membre régulier
    Homme Profil pro
    Ingénieur aéronautique
    Inscrit en
    Août 2017
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    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
    Points : 79
    Points
    79
    Par défaut
    Bonjour Menhir,

    Voici une nouvelle version du code, pour laquelle j'ai un message d'erreur à la ligne 20 :

    Nom : Capture_1.JPG
Affichages : 1802
Taille : 17,3 Ko

    Par ailleurs la ligne 21 est-elle utile ? La ligne 22 permet-elle d'afficher un menu qui permet de se balader dans les dossier/sous dossier et de sélectionner un fichier (ce que je veux) ?


    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
    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
    Dim wrd As Object
    '
    'Activation du fichier "BD.xlsm", on se place dans l'onglet "Feuil1"
    '
    Set ExcelWS = Workbooks("BD.xlsm").Sheets("Feuil1")
    '
    '
    'Ouverture du template Word
    '
    Set wrd = GetObject(, "Word.Application")
    wrd.Visible = True
    wrd.Documents.Open
    '
    ' 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

  10. #10
    Expert éminent sénior 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
    Points : 32 866
    Points
    32 866
    Par défaut
    Regarde le lien que j'ai placé dans ma réponse #4 concernant le GetObjet().
    Cette fonction doit avoir en paramètre le chemin et le nom du fichier à ouvrir. Sinon le code ne sait pas quel fichier ouvrir.

    La ligne 22 permet-elle d'afficher un menu qui permet de se balader dans les dossier/sous dossier et de sélectionner un fichier (ce que je veux) ?
    Non.
    Open permet uniquement d'ouvrir un document indiqué.

    Je le répète à nouveau : c'est la méthode GetOpenFilename qui permet de "naviguer" dans les dossier pour choisir le fichier à ouvrir.
    Puis, une fois le fichier sélectionné (et donc son nom et son chemin connus), la fonction GetObject permet de l'ouvrir en même temps que ton application.

    Avec cette façon de procéder (je le répète également) la méthode Open n'est pas utile puisque c'est le GetObject qui ouvre le document.

    Autre détail : rajoute le parent (la Worksheet) dans la désignation des références de cellules, comme je l'ai spécifié dans la ligne de code que j'ai donné en exemple dans la réponse #6.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  11. #11
    Membre régulier
    Homme Profil pro
    Ingénieur aéronautique
    Inscrit en
    Août 2017
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    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
    Points : 79
    Points
    79
    Par défaut
    Clairement, je patauge......Ben pas du tout développeur...

    Si j'ai bien compris je dois d'abord mettre le GetOpenFilename et juste après le GetObject ?

    La syntaxe pour le GetOpenFilename ne semble pas bonne (ligne 20) ---> message d'erreur.
    Quelle est la bonne syntaxe ?

    Syntaxe pour GetObject (ligne 21) ?? J'ai comme l'impression que cette ligne (telle que je l'ai écrite) n'ouvre pas le fichier sélectionné à l'étape précédente (ligne 20).

    Autre détail : rajoute le parent (la Worksheet) dans la désignation des références de cellules, comme je l'ai spécifié dans la ligne de code que j'ai donné en exemple dans la réponse #6.
    Je ne sais pas où le mettre ainsi que la syntaxe précise ? Le parent est à mettre dans le GetObject ?

    Voici une nouvelle version me retournant une erreur :

    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
    Dim wrd As Object
    '
    'Activation du fichier "BD.xlsm", on se place dans l'onglet "Feuil1"
    '
    Set ExcelWS = Workbooks("BD.xlsm").Sheets("Feuil1")
    '
    '
    'Sélection du fichier via browse
    '
    Template = Application.GetOpenFilename("Documents Word prenant en charge les macros (*.docm), Tous les fichiers (*.*),*.* ", 1, "Sélect the template", , False)
    Set wrd = GetObject(, "Word.Application")
    '
    ' 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
    Je tourne en rond...

    Merci de votre (immense) patience...

    Cdlt.
    Jérôme

  12. #12
    Expert éminent sénior 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
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par licpegpon Voir le message
    Si j'ai bien compris je dois d'abord mettre le GetOpenFilename et juste après le GetObject ?
    Personnellement, pour faire un code propre, je mettrais entre les deux un test pour vérifier que l'utilisateur a effectivement sélectionné un fichier et n'est pas sorti de la fenêtre avec un "Annuler".

    La syntaxe pour le GetOpenFilename ne semble pas bonne (ligne 20) ---> message d'erreur.
    Quelle est la bonne syntaxe ?
    Celle qui est expliquée dans le lien que j'ai donné en réponse #4. L'as-tu consulté.

    J'ai comme l'impression que cette ligne (telle que je l'ai écrite) n'ouvre pas le fichier sélectionné à l'étape précédente (ligne 20).
    Le GetObject ne peut pas ouvrir un fichier si tu ne lui indiques pas le nom et le chemin de ce fichier.

    Je le répète, le GetOpenFilename sert a sélectionner un fichier et à récupérer son nom et son chemin dans une variable.
    Il n'y a pas de lien direct entre GetOpenFilename et GetObject.
    Il faut utiliser la variable qui récupère le nom et le chemine du fichier suite au GetOpenFilename pour indiquer à GetObject quel fichier ouvrir.

    Autre détail : rajoute le parent (la Worksheet) dans la désignation des références de cellules, comme je l'ai spécifié dans la ligne de code que j'ai donné en exemple dans la réponse #6.
    Je ne sais pas où le mettre ainsi que la syntaxe précise ? Le parent est à mettre dans le GetObject ?
    Non, je parlais de la série de Range qu'il y a ensuite.
    Si tu n'indiques pas à quelle feuille appartiennent ces Range, VBA risque de faire une confusion.
    Voir dans mon message #6 la ligne de code qui montre comment transférer d'un Range Excel vers un Bookmark Word.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  13. #13
    Membre régulier
    Homme Profil pro
    Ingénieur aéronautique
    Inscrit en
    Août 2017
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    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
    Points : 79
    Points
    79
    Par défaut
    La syntaxe pour le GetOpenFilename ne semble pas bonne (ligne 20) ---> message d'erreur.
    Quelle est la bonne syntaxe ?

    Celle qui est expliquée dans le lien que j'ai donné en réponse #4. L'as-tu consulté.
    Oui et j’ai également fouillé sur le net car je ne comprenais pas bien ce qui était proposé. J'ai finalement repris une ligne de commande sur un site.

    En ligne 20, je propose donc en remplacement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Template = Application.GetOpenFilename("Documents Word prenant en charge les macros (*.docm), *.docm)")
    OK ?

    Le GetObject ne peut pas ouvrir un fichier si tu ne lui indiques pas le nom et le chemin de ce fichier.

    Je le répète, le GetOpenFilename sert a sélectionner un fichier et à récupérer son nom et son chemin dans une variable.
    La ligne de commande proposée juste avant ne récupère donc pas le nom et le chemin ?? Il faut donc que je créé deux variables, une qui va récupérer le nom et l’autre qui va récupérer le chemin ? Quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Template = Application.GetOpenFilename("Documents Word prenant en charge les macros (*.docm), *.docm)")
    NomFichier = ??? syntaxe ??
    Chemin = ?? syntaxe ??

    C’est juste après que je met le GetObject si je comprend bien ?

    Il me faut donc une ligne d’instruction contenant NomFichier, Chemin et GetObject ?? Syntaxe ??

    Et en terme de déclaration de variables ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim NomFichier as Variant
    Dim Chemin as Variant
    Dim Template as Variant
    OK ?

    Je dois partir, mais je suivrais sur mon téléphone portable toute réponse éventuelle.

    Merci encore.

    Cdlt.
    Jérôme.

  14. #14
    Expert éminent sénior 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
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par licpegpon Voir le message
    La ligne de commande proposée juste avant ne récupère donc pas le nom et le chemin ??
    Le GetOpenFilename récupère le nom et le chemin du fichier.
    Cette information est placée dans la variable Template grace au "=" entre la variable et la méthode.

    Il faut donc que je créé deux variables, une qui va récupérer le nom et l’autre qui va récupérer le chemin ?
    Non, le nom et le chemin forment une seule chaine de caractère.

    Fais un Debug.Print ou un MsgBox pour afficher le contenu de cette variable ou regarde dans la fenêtre des variables locales ou une des multiples autres méthodes disponibles.

    C’est juste après que je met le GetObject si je comprend bien ?
    Je crois que j'ai répondu au moins 4 fois à cette question. Je doute qu'une cinquième fois ait une quelconque utilité.

    Il me faut donc une ligne d’instruction contenant NomFichier, Chemin et GetObject ?? Syntaxe ??
    Non, il faut juste mettre Template dans le GetObject suivant la syntaxe présentée dans le lien que j'ai mis en réponse #4.

    Et en terme de déclaration de variables ?
    Template en String
    WordDoc en Word.Document (déjà dit).
    ExcelWS en Worksheet (déjà dit).

    Les Variant, il vaut mieux éviter à moins d'y être forcé.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  15. #15
    Membre régulier
    Homme Profil pro
    Ingénieur aéronautique
    Inscrit en
    Août 2017
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    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
    Points : 79
    Points
    79
    Par défaut
    Bonjour,

    Voici les modif apportées à mon code (tout en bas de ce message).

    J'ai déclaré dans un premier temps ma variable "Template" de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Template As Word.Document
    A l'éxécution j'obtiens une erreur :

    Nom : Capture_2.JPG
Affichages : 1795
Taille : 16,7 Ko

    Suite à ce message d'erreur je modifie la ligne et je rentre :

    Cela me permet lorsque j'exécute la macro pas à pas de passer à la ligne suivante sans message d'erreur.

    Lorsque j'arrive à la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Template = Application.GetOpenFilename("Documents Word prenant en charge les macros (*.docm), *.docm)")
    Un menu "ouvrir" s'ouvre (ENFIN ce que je veux ), je sélectionne alors le fichier .docm souhaité et j'ai alors un message d'erreur :


    Nom : Capture_1.JPG
Affichages : 1780
Taille : 17,9 Ko


    Dans le code ci-dessous, mon commentaire est-il exact ? De façon générale est-ce que les commentaires indiqués dans mon code tout en bas sont exact ? Cela me permet de valider pas à pas ce que je fais (pas du tout développeur).

    ' Ouverture du fichier sélectionné précédemment ??
    '
    Set wrd = GetObject(Template, "Word.Application")


    Nouveau code :

    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
    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 Object
    Dim wrd As Object
    '
    'Activation du fichier "BD.xlsm", on se place dans l'onglet "Feuil1"
    '
    Set ExcelWS = Workbooks("BD.xlsm").Sheets("Feuil1")
    '
    '
    'Sélection du fichier via browse
    '
    Template = Application.GetOpenFilename("Documents Word prenant en charge les macros (*.docm), *.docm)")
    MsgBox ("Template = ") & Template
    '
    ' Ouverture du fichier sélectionné précédemment ??
    '
    Set wrd = GetObject(Template, "Word.Application")
    '
    ' 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 encore.

    Cdlt.
    Jérôme

  16. #16
    Expert éminent sénior 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
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par licpegpon Voir le message
    J'ai déclaré dans un premier temps ma variable "Template" de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Template As Word.Document
    A l'éxécution j'obtiens une erreur :
    Tu n'as pas chargé la bibliothèque d'objets Word : Menu Outils > Références > Cocher la bibliothèque Microsoft Word 16.0 Object Library.

    Cela dit, dans ma réponse précédente, je t'avais dit de le déclarer en String.
    Je me demande s'il y a vraiment un intérêt à écrire...

    Lorsque j'arrive à la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Template = Application.GetOpenFilename("Documents Word prenant en charge les macros (*.docm), *.docm)")
    Un menu "ouvrir" s'ouvre (ENFIN ce que je veux ), je sélectionne alors le fichier .docm souhaité et j'ai alors un message d'erreur :
    GetOpenFilename, comme son nom l'indique, ne renvoie pas un objet mais un nom de fichier, donc un String.

    Ca ne peut être considéré comme un document Word que lorsqu'on ouvre ce document avec GetObject.
    Mais, de nouveau, j'ai déjà expliqué ça plusieurs fois.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  17. #17
    Membre régulier
    Homme Profil pro
    Ingénieur aéronautique
    Inscrit en
    Août 2017
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    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
    Points : 79
    Points
    79
    Par défaut
    Bonjour,

    Tout d'abord j'ai coché "Microsoft Word 15.0 Object Library" dans Menu Outils > Références > d'EXCEL :
    Ce n'est pas la version 16.0 mais la 15.0 (probablement du fait que je suis sous la version EXCEL 13.0) ?

    Nom : Capture_1.JPG
Affichages : 1833
Taille : 49,4 Ko

    Ensuite, j'ai effectué quelques manips pour essayer de comprendre ce que faisaient certaines lignes de codes.

    Notamment :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set ExcelWS = Workbooks("BD.xlsm").Sheets("Feuil1")
    Visiblement cette ligne de code ne fait pas ce que j'ai écrit en commentaire, à savoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'Activation du fichier "BD.xlsm", on se place dans l'onglet "Feuil1"
    Je souhaitait via cette ligne activer le fichier BD.xlsm et me mettre dans l'onglet Feuil1, c'est pour cela que j'avais mis au départ un "activate", qui semble t-il n'est pas judicieux ? J'ai comme l'impression que cette ligne ne sert à rien car la macro étant exécutée depuis l'onglet "Feuil1" il ne doit pas être nécessaire d'activer cet onglet ?

    Lorsque j'exécute la macro via la touche F8 (pas à pas), le texte Template situé dans la ligne de commande m'affiche (lorsque je survole le texte) Template = FAUX ??
    Il ne s'agit donc pas de la valeur affichée via le msgbox plus haut (celui-ci me retourne bien le chemin et le nom du fichier qui vient d'être sélectionné ). Visiblement il s'agit d'autre chose.

    J'avance (malheureusement) petit à petit ...

    Code mis à jour (notamment les déclarations de variables) :

    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
    Option Explicit
    Sub publipostage()
    '
    ' Déclaration des variables
    '
    Dim WordApp As Object
    Dim WordDoc As Word.Document
    Dim pRange As Object
    Dim ExcelWS As Worksheet
    Dim Template As String
    Dim wrd As Object
    '
    'Activation du fichier "BD.xlsm", on se place dans l'onglet "Feuil1"
    '
    Set ExcelWS = Workbooks("BD.xlsm").Sheets("Feuil1")
    '
    '
    'Sélection du fichier via browse
    '
    Template = Application.GetOpenFilename("Documents Word prenant en charge les macros (*.docm), *.docm)")
    MsgBox ("Template = ") & Template
    '
    ' Ouverture du fichier sélectionné précédemment ??
    '
    Set wrd = GetObject(Template, "Word.Application")
    '
    ' 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.

    Cdlt.
    Jérôme.

  18. #18
    Expert éminent sénior 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
    Points : 32 866
    Points
    32 866
    Par défaut
    C'est ma dernière intervention parce que ça devient lassant de répéter plusieurs fois les même choses sans que tu en tiennes compte.

    Citation Envoyé par licpegpon Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set ExcelWS = Workbooks("BD.xlsm").Sheets("Feuil1")
    Visiblement cette ligne de code ne fait pas ce que j'ai écrit en commentaire, à savoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'Activation du fichier "BD.xlsm", on se place dans l'onglet "Feuil1"
    Cette ligne met dans une variable la référence de la feuille de calcul où se trouvent tes données sources.
    Ainsi, on évite de faire des Select ou des Activate qui ne font que ralentir et compliquer le code.

    Mais elle n'est utile que si cette variable est utilisée comme parent des références de cellules placées par la suite, comme je l'ai fait dans le code de ma réponse #6 que tu n'as toujours pas intégré.

    Lorsque j'exécute la macro via la touche F8 (pas à pas), le texte Template situé dans la ligne de commande m'affiche (lorsque je survole le texte) Template = FAUX ??
    Ca signifie que tu as quitté la fenêtre de sélection de fichier par le bouton Annuler.

    Set wrd = GetObject(Template, "Word.Application")
    Set wrd = GetObject(Template)
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  19. #19
    Membre régulier
    Homme Profil pro
    Ingénieur aéronautique
    Inscrit en
    Août 2017
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    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
    Points : 79
    Points
    79
    Par défaut
    Bonjour Menhir,

    Après échanges avec des collègues de travail, voici la version modifiée qui m'est proposée et qui fonctionne mis à part le fait que la date insérée dans le document Word est inversée par rapport au fichier EXCEL (pb de format : inversion jour/mois). Pb entre anglais / français ? Pourtant lorsque je regarde le format de la cellule dans le fichier EXCEL celui-ci est correct --> JMA - paramètres régionaux français ?

    Par exemple :
    Dans le fichier EXCEL : date = 14/09/2018
    Dans le fichier Word : date = 9/14/2018

    Je souhaiterais avoir dans le fichier word le même format que la date du fichier EXCEL à savoir 14/09/2018 (format JMA).

    Si je chipote, je souhaiterais que lorsque la macro est terminée s'affiche le fichier word (fichier EXCEL passe dessous le fichier Word).

    Voici la macro modifiée, très certainement pas optimisée et j'en passe, cependant elle fonctionne, je n'en demande pas plus :

    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
    Option Explicit
    Sub publipostage()
    '
    ' Déclaration des variables
    '
    Dim WordApp As Object
    Dim WordDoc As Word.Document
    Dim pRange As Object
    Dim ExcelWS As Worksheet
    Dim Template As String
    '
    '
    ' Sélection du fichier via un menu "Fichier / Ouvrir"
    ' On met en mémoire, dans la variable Template, le chemin et le nom du fichier avec l'extension DOCM
    '
    Template = Application.GetOpenFilename("Documents Word prenant en charge les macros (*.docm), *.docm)")
    '
    '
    ' Ouverture et affichage de Word
    '
    Set WordApp = CreateObject("Word.Application")
    WordApp.Visible = True
    '
    '
    ' Ouverture du fichier sélectionné précédemment
    '
    WordApp.Documents.Open (Template)
    '
    '
    ' 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 l'entête et le corps du document
    '
    For Each pRange In WordApp.ActiveDocument.StoryRanges
    pRange.Fields.Update
    Next
    '
    MsgBox ("Procedure completed !!")
    '
    End Sub

    Merci encore.

    Cdlt.
    Jérôme.

  20. #20
    Expert éminent sénior 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
    Points : 32 866
    Points
    32 866
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Format(Range("F2").Value,"dd/mm/yyyy")
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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