Liaison base de données Excel / fichier Word - contôles de contenu ?

Bonjour à tous,

J'ai une question je pense assez simple pour les utilisateurs de VBA, et dont la réponse me simplifierait grandement la vie - ainsi, je pense, qu'à pas mal de membres du forum. Voilà : je cherche le moyen de pouvoir remplir automatiquement un tableau du type de celui présenté dans le fichier Word ci-joint à partir d'une base de données simple comme celle du fichier Excel en PJ. A terme, chaque champ pourra apparaître à plusieurs endroits d'un fichier Word plus complexe, l'idée étant de gagner du temps en ne faisant les modifications qu'une seule fois (dans la base de données Excel), et que les changements soient ensuite automatiquement répercutés dans l'ensemble du document Word.

J'imagine que l'on doit pouvoir travailler autour des contrôle de contenu Word, mais je ne sais pas comment lier automatiquement le résultat (fichier Word) et la base de données (fichier Excel). Si quelqu'un à une piste pour un code VBA, je vous serai très reconnaissant !

Merci,

Pierre

PS : dites-moi si je ne poste pas dans la bonne section du forum

81mode-le-word.docx (26.58 Ko)

Bonjour,

La première piste qui me vient en tête c'est de passer par du publipostage classique =>

https://support.microsoft.com/fr-fr/office/fusion-et-publipostage-%C3%A0-l-aide-d-une-feuille-de-cal...

Efficace et pas cher (en terme de développement)

Pierre

Merci, je vais me pencher là-dessus !

Pierre

Bonjour,

ci-joint un exemple en insérant des contrôles de contenu dans votre document Word (menu Développeur --> onglet contrôles --> Aa)

183mode-le-word1.docx (19.62 Ko)

Merci pour vos suggestions !

@pierrep56 : j'ai exploré l'option publipostage, mais comme il s'agit d'un détournement de la fonction initiale, les contraintes imposées (max 256 champs de fusion et chaque champ limité à 250 caractères) est problématique pour mon usage.

@thev : merci beaucoup ! Quand je lance la macro, j'obtiens l'erreur d'exécution 1004 suivante : "La méthode "GetOpenFileName" de l'object "_Application a échoué". Dans la macro, faut-il indiquer quelque part le nom du fichier Word sur lequel la macro va travailler ? Désolé s'il y a quelque chose d'évident qui m'échappe.

Quand je lance la macro, j'obtiens l'erreur d'exécution 1004 suivante :"La méthode "GetOpenFileName" de l'object "_Application a échoué"
Il se peut que cette méthode ne soit pas disponible dans votre version Mac.

Essayer de remplacer cette méthode
    nom_fichier = Application.GetOpenFilename("Word files (*.docx), *.docx")
    If nom_fichier = "Faux" Then MsgBox "aucun fichier sélectionné": Exit Sub
Par celle-ci
    With Application.FileDialog(msoFileDialogFilePicker)
        .Filters.Clear
        .Filters.Add "Word Files", "*.docx"
        If .Show = 0 Then MsgBox "aucun fichier sélectionné": Exit Sub
        nom_fichier = .SelectedItems(1)
    End With

Je vous remercie. J'obtiens maintenant une erreur "Variable objet ou variable de bloc With non définie".

Essayer alors ce début de code en supposant que votre fichier docx modèle se trouve dans le même dossier que le classeur

Sub remplissage_doc()

    Dim WordApp As Object, WordDoc As Object, ctrl As Object
    Dim nom_fichier As String

    'ouverture document modèle
    nom_fichier = ThisWorkbook.Path & "\mode-le-word.docx"
    Set WordApp = CreateObject("Word.Application")
    'WordApp.Visible = True
    On Error Resume Next
    Set WordDoc = WordApp.Documents.Open(nom_fichier)
    If Err.Number <> 0 Then MsgBox "erreur ouverture document modèle: " & nom_fichier: Exit Sub
    On Error GoTo 0

    'entête document

Merci thev. J'ai maintenant une erreur d'exécution "-2146959355 (80080005)" - erreur automation qui concerne la ligne

Set WordApp = CreateObject("Word.Application")

J'ai vu qu'il y a avait des soucis récurrents avec l'ouverture de fichier Word via Excel sur Mac, mais je n'ai pas les connaissances nécessaires pour tester les solutions que l'on voit sur les forums.

Bonsoir,

D'après ce que j'ai vu dans un forum, le code pourrait être celui-ci

Sub remplissage_doc()

    Dim WordDoc As Object, ctrl As Object
    Dim nom_fichier As String

    'ouverture document modèle
    MyAppID = Shell("Disque Dur:Applications:Microsoft Office 2011:Microsoft Word.app:Contents:MacOS:Microsoft Word", vbHide)
    AppActivate MyAppID

    nom_fichier = ThisWorkbook.Path & "/mode-le-word.docx"
    On Error Resume Next
    Set WordDoc = Documents.Open(nom_fichier)
    If Err.Number <> 0 Then MsgBox "erreur ouverture document modèle: " & nom_fichier: Exit Sub
    On Error GoTo 0

    'entête document
    For Each ctrl In WordDoc.Sections(1).Headers(1).Range.ContentControls
        GoSub remplissage_ctrl_text
    Next ctrl

    'corps document
    For Each ctrl In WordDoc.ContentControls
        GoSub remplissage_ctrl_text
    Next ctrl

    'sauvegarde document
    WordDoc.SaveAs WordDoc.Path & "/save.docx"

    'fin procédure
    Kill MyAppID

    Exit Sub

remplissage_ctrl_text:
    If ctrl.Type = 0 Then
        Set cell = ActiveSheet.Columns("A").Find(ctrl.Title)
        If Not cell Is Nothing Then
            ctrl.Range.Text = cell.Offset(, 1)
        End If
    End If

    Return

End Sub

J'ai à présent une erreur d'exécution 5 sur la ligne

AppActivate MyAppID

Merci de votre aide mais je ne veux pas abuser de votre patience, j'ai lu à plusieurs endroits que VBA pour Excel Mac était vraiment capricieux.

Bonjour,

Dans cette instruction

MyAppID = Shell("Disque Dur:Applications:Microsoft Office 2011:Microsoft Word.app:Contents:MacOS:Microsoft Word", vbHide)

il faut remplacer

Disque Dur
par le nom de votre disque hébergeant les applications Microsoft. A priori par défaut, il devrait s'appeler : Macintosh HD, vous devriez trouver son nom via Finder.

Bonsoir, merci, malheureusement j'obtiens toujours la même erreur. Je n'ai pas de dossier Microsoft Office 2011 dans le dossier Applications, mais directement le fichier Microsoft Word.app. J'ai donc essayé également avec le chemin "Macintosh HD:Applications:Microsoft Word.app:Contents:MacOS:Microsoft Word" mais la même erreur se produit. Notez que j'utilise Office 365, au cas où cela peut avoir une influence.

Peut être essayer tout simplement

MyAppID = Shell("Macintosh HD/Applications/Microsoft Word.app", vbHide)
Rechercher des sujets similaires à "liaison base donnees fichier word contoles contenu"