XL 2016 Remplir automatiquement un fichier Word avec des données Excel

AurelShisho

XLDnaute Nouveau
Bonjour à tous,

Voilà mon sujet : J'aurais aimé pouvoir remplir un fichier Word avec des données provenant d'un tableur Excel.

J'ai essayé sans succès d'utiliser les "outils harmonisés" de Word (étiquettes, etc) et de programmer du VBA. Sauf que clairement, ça fais des années que je n'ai plus touché VBA et je ne me souviens de pas grand chose, si ce n'est, de rien.

J'en appel donc à votre bienveillance afin de m'expliquer comment faire.
Si vous avez besoin de plus d'informations, voire des fichiers en question. Faites le moi savoir.

Merci d'avance,

Bien cordialement 😁
 

AurelShisho

XLDnaute Nouveau
Bonjour,

Le publipostage n'est-il pas pour réaliser des mails ?

Je vous partage les fichiers en question avec les explications.

En gros, je voudrais que les cellules A16 / C16 / D16 / E16 / F16 et H16 du fichier Excel soient directement inscrites dans les endroits prévus sur le fichier Word respectivement : Change n° / Chargé du change (demandeur) / Titre / Type de change / Site(s) / Solution(s) proposée(s).

Cela éviterait aux utilisateurs de remplir deux fois les mêmes données. Plus on facilite, plus on a de chance que les gens fassent ce qu'on leur demande ....

Cordialement.
 

Pièces jointes

  • Change_Control.docx
    61.8 KB · Affichages: 5
  • Générateur_Change_1.xlsm
    28.3 KB · Affichages: 7

chris

XLDnaute Barbatruc
RE
Les champs à remplir sont des objets de formulaire qu'il faut remplacer par des champs de publipostage

Il faut définir une plage nommée dans Excel ton tableau étant sous d'autres données : on ne peut utiliser de noms dynamique et j'ai donc mis 500 lignes à adapter éventuellement
 

Pièces jointes

  • Générateur_Change_2.xlsm
    27.1 KB · Affichages: 12
  • Change_Control3.docx
    61.6 KB · Affichages: 13

AurelShisho

XLDnaute Nouveau
Re,

Alors je t'avouerais que je n'ai pas tout compris .. Mon niveau est proche du néant actuellement.

Aussi, étant sur le PC professionnel, je n'ai pas les pleins pouvoirs. Par exemple, je ne peux pas ouvrir le fichier Word que tu viens de me transmettre car il requiert, visiblement, un accès à un serveur SQL.

Je sens que je ne suis pas au bout de mes peines avec cette idée de remplissage auto 😩
 

chris

XLDnaute Barbatruc
RE
J'ai oublié d'indiquer qu'il faut changer la source de données quand tu ouvres le Word pour indiquer l'Excel que j'ai joint, déjà enregistré sur ton disque sinon cela ne peut fonctionner...

Modifie le chemin dans la fenêtre qui s'ouvre quand tu réponds oui puis OK
 
Dernière édition:

AurelShisho

XLDnaute Nouveau
Bonjour Chris,

Ok je vois, j'ai compris ce que tu avais fais du coup. Je pense que je me suis mal exprimé quant à mon besoin, je reprend :
Tu as pu voir que j'avais fais une mini macro afin de générer un nouveau n° de Change avec les informations associées. Une fois le tableau rempli, la personne clique sur le bouton " Générer n° de Change " et une ligne se créée.
Ce que je souhaiterais à partir de ce moment là est la chose suivante :

Une fois la ligne créée, j'aimerais que la personne puisse appuyer sur un bouton " Créer le formulaire Word associé ". Ce qui ouvrirait le formulaire de demande Word avec les champs voulus préremplis.

Du coup, il faudrait une macro qui soit capable d'ouvrir ce fameux Word, et d'y inscrire les données de la dernière ligne créée par la précédente macro " Générer n° de Change ".

J'espère être assez clair à l'écrit, ce n'est pas évident ..

Merci pour ton temps dans tous les cas,
Cordialement.
 

chris

XLDnaute Barbatruc
Bonjour
On ne peut ouvrir un fichier Word depuis l'excel contenant les données à fusionner car cela crée un conflit d'accès
Il faut dans ce cas exporter dans un fichier Excel ou txt, toujours de même nom, que l'ion écrase donc, lié au publipostage et déclencher l'ouverture de Word et du publipostage.

Sinon remplir un formulaire par VBA doit être possible : je laisse la main aux VBistes...
 

p56

XLDnaute Occasionnel
Bonjour à tous,

Alors pour faire du remplissage de word depuis excel, voici une méthode simple (grâce aux tableaux du doc) :
* on intègre directement le docx dans le xl en tant que "Objet Document" en mode "icône"
* on relie cette icône à du code, ici Procédure "Ouvre_Doc"
* il est simple alors de stocker la ligne active dans un array,
* et de compléter les cellules du tableau du doc avec le contenu de l'array
* et enfin d'enregistrer le tout dans un autre docx dans le même dossier que le xl

Pour la démo, seule 2 info sont recopiées dans le tableau 2 ligne 1, après sélection de la ligne à copier et clic sur l’icône du doc

Rq1 : pour word une cellule d'un tableau est cell sans S à la fin

Rq2 : si utilisation dans OneDrive, remplacer dans le code ThisWorkbook.Path par OneDrivePath comme expliqué ici=>https://excel-downloads.com/threads/saveas-dans-un-environnement-onedrive.20073048/#post-20558006

Rq3 : pour modifier éventuellement le doc modèle : clic droit sur l’icône / Objet Document / Modifier

P.

VB:
Option Explicit

' ***********************************************************************
' *****                                                             *****
' *****        CODE PierreP56 : http://tatiak.canalblog.com/        *****
' *****                                                             *****
' ***********************************************************************

Public WordApp As Object, WordDoc As Object


Sub Ouvre_Doc()
Dim lg As Long, ndf As String, T As Variant

    lg = ActiveCell.Row
    T = ActiveSheet.Range("A" & lg & ":L" & lg).Value
    If lg < 16 Or T(1, 1) = "" Then
        MsgBox "Vous devez sélectionner une ligne de données"
        Exit Sub
    End If
    
    ndf = ThisWorkbook.Path & "\Fiche_" & T(1, 1) & "_" & Format(Date, "ddmmyy")
        
    ActiveSheet.OLEObjects(Application.Caller).Verb xlVerbOpen
    Set WordApp = GetObject(, "Word.Application")
    Set WordDoc = WordApp.ActiveDocument
    WordApp.Visible = False
    
    With WordDoc
        .Tables(2).cell(1, 2).Range.Text = T(1, 1)
        .Tables(2).cell(1, 4).Range.Text = T(1, 4)
        ' etc ...
        
        .SaveAs2 Filename:=ndf & ".docx"
        .Close SaveChanges:=0
    End With

    WordApp.Application.Quit
    Set WordDoc = Nothing
    Set WordApp = Nothing
    MsgBox "Ok"
End Sub
' *************************************************************************************************
 

Pièces jointes

  • Aurel.zip
    55 KB · Affichages: 29

AurelShisho

XLDnaute Nouveau
Bonjour Chris, bonjour P56,

Merci pour vos réponses. J'ai commencé à regarder des tutos hier pour essayer de comprendre le fonctionnement au delà de simplement appliquer bêtement une macro qui, si elle vient à merder, ne pourra être modifiée par mes soins ahah.

Je vais prendre le temps d'essayer ta macro P56 et je te fais un retour. Pas sur de pouvoir revenir vers vous dans des délais très brefs.

Dans tous les cas, merci pour vos réponses.

Bien cordialement.
 

Discussions similaires

Statistiques des forums

Discussions
313 329
Messages
2 097 235
Membres
106 883
dernier inscrit
Papalo