Microsoft 365 Enregistrer un fichier Word à partir d'excel

Alain79

XLDnaute Nouveau
Bonsoir,
Je travaille sous Windows 10 avec notamment office 365 et plus particulièrement Excel et Word. J'ai un fichier excel relatif à des recherches généalogiques dont la liste des personnes avec différentes informations sous contenues sur une feuille. A partir d'une autre feuille, je sélectionne une personne et quatre cellules (ex. Cellule B4 à B7) se remplissent automatiquement des informations souhaitées, de plus dans deux autres cellules est indiqué le nom que je souhaite attribuer au fichier Word (ex. Cellule B10) et le nom de l'emplacement dans le répertoire souhaité (ex. Cellule B12).
A l'aide de la macro suivante :
Dim WordApp As Word.Application
Dim DocWord As Word.Document

Set WordApp = CreateObject("word.Application")
WordApp.Visible = True
Set DocWord = WordApp.Documents.Add(Template:="D:\Genealogie\Extraits\Entete.docx" _
, NewTemplate:=False, DocumentType:=0)
Je crée un fichier word qui se nomme automatiquement "Document1" à partir du modèle que j'ai précédemment créé comprenant les 4 cellules du fichier excel enregistré sous "D:\Genealogie\Extraits\Entete.docx"
Je complète ce fichier Word à l'aide d'une image scannée (ex. Un acte d'état civil) et je souhaiterais pouvoir à l'aide d'une macro enregistré ce fichier au format PDF sous le nom figurant cellule B10 et dans l'emplacement figurant cellule B12.
Pour l'instant, je copie le nom du fichier sous Excel, je bascule sous Word, je clique sur le bouton "enregistrer", colle le nom du fichier, sélectionne le format PDF et modifie l'emplacement proposé par défaut.
Ayant un millier de fichiers à créer, j'aimerais à l'aide d'une macro automatiser l'opération. J'ai essayé différentes façons notamment à l'aide d'exemples trouvés sur les forums sans résultats.
Quelqu'un pourrait-il m'aider et par avance je l'en remercie.
PS : je précise que j'ai 75 ans et donc je n'ai jamais eu aucune formation informatique, mais je m'efforce à automatiser mes fichiers Excel, car j'utilise beaucoup ce logiciel depuis la version excel IV pour lequel les macros n'étaient pas écrites en VBA.
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, Alain33190

Voici ta macro complétée pour ce qui concerne l'enregistrement avec le chemin en B10 et le nom du fichier en B12
VB:
Sub DocWord()
Dim WordApp As Word.Application, DocWord As Word.Document, Modele As String
Dim Chemin As String, Fichier As String
Modele = "D:\Genealogie\Extraits\Entete.docx"
Chemin = Feuil1.[B12].Value2
Fichier = Feuil1.[B10].Value2
Set WordApp = CreateObject("word.Application")
WordApp.Visible = True
Set DocWord = WordApp.Documents.Add(Template:=Modele, DocumentType:=0)
DocWord.SaveAs2 Chemin & "\" & Fichier & ".docx"
DocWord.Close wdDoNotSaveChanges
WordApp.Quit
End Sub

Pour la suite, j'ai quelques questions
1) L'image : insérée manuellement ou par macro ?

[Suggestions en passant]
Sinon puisque tu parles de milliers de fichiers, on pourrait envisager une autre façon de faire: le publipostage avec images
Bref résumé
Dans un fichier Excel (qui sert de base de données) serait stockée dans 3 colonnes: PATRONYME |NOM FICHIER|CHEMIN IMAGE
Ensuite par macro (depuis Word, en étant sur ton document Entete.docx - ou plutôt une copie pour test), on lance le publipostage
La macro se chargeant d'enregistrer directement en PDF une page (avec l'image idoine) par enregistrement.
PS: j'ai déjà le code VBA en stock, il faudrait juste faire quelques ajustements.
 
Dernière édition:

Alain79

XLDnaute Nouveau
Bonjour Staple1600,
Merci d'avoir bien voulu lire et apporter une réponse à ma question.
Toutefois, ma macro indiquée dans ma question fait le travail souhaité, et pour moi il convient d'écrire une 2éme macro à exécuter une fois que j'ai collé l'image dans mon fichier Word créé avec la 1ére macro décrite.
Pour répondre à la question, l'image provient de plusieurs sources, soit de fichiers déjà enregistrés, soit de documents papiers que je scanne, soit de document que je récupère lors de recherches sur les différents sites (sites d'archives départementales ou spécialisés dans la généalogie etc..).
Pour cette raison, je suis obligé d'opérer en deux temps, le 1er : créer un document Word comprenant l'entête (ce que je fais avec a macro) et que je complète obligatoirement manuellement par l'image souhaitée, et le 2éme : c'est l'enregistrement de ce fichier au format PDF et non DOCX à l'emplacement figurant dans la cellule B12 et avec le nom de fichier figurant dans la cellule B10.
Donc il s'agit bien de deux macros actionnées à l'aide de deux boutons différents figurant dans mon fichier Excel.
Il ne peut en aucun cas s'agir d'un publipostage, l'ensemble des documents n'étant pas forcément déjà enregistré et classé sur l'ordinateur. Précision faite que toutes images collées dans le document de base Word proviennent de découpage (capture d'écran) ou de document scanné au format image.
Encore d'essayer de m'apporter une solution qui pourrait consister simplement, une fois que j'ai collé mon image dans le document Word et à partir de mon fichier excel, ouvrir la boite de dialogue d'enregistrement sous Word avec l'indication de l'emplacement d'enregistrement du fichier et du format du fichier et le nom du fichier se ferait au moyen d'un copier-coller à défaut de pouvoir l'insérer directement.
Restant à disposition pour fournir toutes prévisions complémentaires utiles qui permettrait d'apporter une solution à mon problème.
 

Staple1600

XLDnaute Barbatruc
Re

Sauf erreur de ma part, le code qu'on pouvait lire dans ton premier message était
Code:
A l'aide de la macro suivante :
Dim WordApp As Word.Application
Dim DocWord As Word.Document

Set WordApp = CreateObject("word.Application")
WordApp.Visible = True
Set DocWord = WordApp.Documents.Add(Template:="D:\Genealogie\Extraits\Entete.docx" _
, NewTemplate:=False, DocumentType:=0)
Sans doute une erreur de copier/coller a fait qu'il soit incomplet.

D'où la version complétée que j'ai postée dans le message#2.

Et pour ma suggestion "publipostage", je maintiens qu'elle tout à fait exploitable dans cette problématique.
Et j'ai parlé d'un enregistrement directement en PDF (pas en *.docx)
Mais je ne la détaillera plus avant si elle ne retient pas ton attention.
 

Alain79

XLDnaute Nouveau
Re Bonjour,
Bien sûr la macro indiquée dans mon premier message ne comprenait ni le début ni la fin, à savoir :
Sub Creationentetedoc()
......................
End sub
Mais elle était complète et suffisante.
Le document créé, à partir du fichier "Entete.docx", n'a aucune raison d'être enregistré avec seulement l'entête, mais il sert uniquement en attendant de coller l'image souhaitée et ensuite être enregistré au format PDF.
Et je ne vois pas comment faire un publipostage alors que tous les éléments ne sont pas enregistrés au moment de la création du fichier provisoire.
 

Staple1600

XLDnaute Barbatruc
Re

Elle était compléte et suffisante pour toi (le demandeur)
Mais pas pour nous, ceux qui répondent (aka les répondeurs) qui essaient d'aider l'initiateur de la question.

Ci-dessous un exemple sommaire d'un publipostage Word/Excel avec insertion images
PART_1.jpg

En 1) la base de données
En 2) le document Word pour le publipostage

Dans le message suivant, je poste le résultat obtenu.
 

Staple1600

XLDnaute Barbatruc
Suite

Voila ce que cela donne
RESULTAT_PUBLI.jpg

Le publipostage a été créé par une macro.
Pour la suite, il suffit d'ajouter la partie du code qui exporte chaque page directement en PDF
(comme je l'ai dit : j'ai ce code VBA dans mes archives, et qu'on trouvera également sur le forum)

PS: j'ai retravaillé mes captures d'écran pour qu'elles prennent moins de place.

EDITION: Ci-dessous juste pour montrer que c'est bien le fichier image qui est inséré lors de la fusion
exempleIMG.jpg
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

Adapté à ta problématique , je verrais les choses ainsi
Travail en amont
• Regrouper les images dans un seul dossier
• Normaliser leur nom
Récupérer le chemin et le nom des images avec PowerQuery
(cela génère une feuille qui servira pour créer la base de données)
Retravailler la base de données pour compléter les infos nécessaires
Enfin créer sous Word le document de fusion (insertion des champs de fusion)
Puis exécuter la macro qui exécute le publipostage et créé N Pdf pour N enregistrements .

PS: Je fais ce genre de tâches régulièrement au boulot
(avec ou sans insertion d'images), et cela fonctionne et me permets de dégager du temps pour des tâches moins rébarbatives.
 

Alain79

XLDnaute Nouveau
Re
Je te remercie à nouveau et je comprends très bien la solution que tu me proposes mais ça ne correspond pas du tout à mon problème car je travaille au cas par cas. C'est à dire que je ne possède pas toutes les images mais que je les récupère au fur et à mesure de mes recherches qui durent depuis plusieurs années et qui dureront encore pendant plusieurs années car c'est un travail de fourni qui demande beaucoup de patience pour trouver les actes ou documents que l'on recherche et qui remonte pour certain à plusieurs centaines d'années en arrière. Effectivement, j'aurais un millier de fichiers à créer mais je ne peux pas le faire d'un coup.
Donc je ne peux pas envisager la solution de publipostage.
merci quand même pour tes explications et dommage que je ne puisse pas m'en inspirer.
 

Staple1600

XLDnaute Barbatruc
Re

Tu parles de cas par cas avec un aspect manuel des choses.
1) Copier/Coller une image dans Word
2) Enregistrer sous => PDF
Dans ces conditions, je ne vois pas où peut se faire l'automatisation
(Sauf à décider de planifier les choses)
Je traite 50 "fiches" par semaine
Donc recherche des images, façonnage de la base, et publipostage en fin de semaine.

Et en relisant ta demande initiale, cela ressemble quand même à ce que fait mon publipostage, non ?
Pour l'instant, je copie le nom du fichier sous Excel, je bascule sous Word, je clique sur le bouton "enregistrer", colle le nom du fichier, sélectionne le format PDF et modifie l'emplacement proposé par défaut.
Ayant un millier de fichiers à créer, j'aimerais à l'aide d'une macro automatiser l'opération.
 

Alain79

XLDnaute Nouveau
Re
Désolé de t'avoir dérangé, mais apparemment mon problème n'a pas de solution, car ce que je souhaitais c'était d'éviter lorsque je veux enregistrer mon fichier créé sous Word d'indiquer le nom du fichier, sélectionner le type de fichier et l'emplacement de l'enregistrement dans la boite de dialogue "Enregistrer sous".
Merci quand même d'avoir essayé de m'aider.
 

Staple1600

XLDnaute Barbatruc
Re

???
Où j'ai écrit que tu m'avais dérangé...:rolleyes:

Tu parles de faire ceci comme automatisation?
VB:
Sub DocWord_bis()
Dim WordApp As Word.Application, DocWord As Word.Document, Modele As String
Dim Chemin$, Fichie$, nf$
Modele = "D:\Genealogie\Extraits\Entete.docx"
Chemin = Feuil1.[B10].Value2
Fichier = Feuil1.[B12].Value2
Set WordApp = CreateObject("word.Application")
WordApp.Visible = True
Set DocWord = WordApp.Documents.Add(Template:=Modele, DocumentType:=0)
nf = Application.GetOpenFilename("Fichier JPG (*.jpg), *.jpg")
If nf <> "" And Right(nf, 3) = "jpg" Then
DocWord.InlineShapes.AddPicture nf
End If
DocWord.SaveAs2 Chemin & "\" & Fichier & ".docx"
DocWord.Close wdDoNotSaveChanges
WordApp.Quit
End Sub
Je te laisse exécuter ma macro, normalement tu devrais voir apparaitre une boite de dialogue
 

Alain79

XLDnaute Nouveau
Re
Le fait d'avoir écrit "Désolé de t'avoir dérangé" était une simple formule de politesse.
Je viens d'essayer de tester ta macro et elle crée bien un document sous Word avec l'entête, pis une boîte de dialogue s'ouvre pour récupérer l'image qui se colle au-dessus de l'entête et non dessous, puis elle bloque au niveau : DocWord.SaveAs2 Chemin & "\" & Fichier & ".docx" avec un message d'erreur
1614538601982.png

Je ne comprends pas pourquoi un tel message d'erreur car le nom est accepté lors d'un enregistrement manuel ex. EN 18541221 DUBOIS Pierre (Fiche n° 256)

Mais ça impose que les images soient enregistrées sur l'ordinateur alors que pour la plupart il s'agit de capture d'écran qu'il suffit de coller directement dans le document et enfin si le fichier s'enregistre il le serait au format docx et non pdf.
 

Staple1600

XLDnaute Barbatruc
Re

En relisant ton dernier message, ceci devrait plus correspondre à la boite de dialogue que tu évoques
VB:
Sub DocWord_Ter()
Dim WordApp As Word.Application, DocWord As Word.Document, Modele As String
Dim Chemin$, Fichie$, nf$
Dim dlgSaveAs As Word.Dialog
Modele = "D:\Genealogie\Extraits\Entete.docx"
Chemin = Feuil1.[B10].Value2
Fichier = Feuil1.[B12].Value2
Set WordApp = CreateObject("word.Application")
WordApp.Visible = True
Set DocWord = WordApp.Documents.Add(Template:=Modele, DocumentType:=0)
Set dlgSaveAs = WordApp.Dialogs(wdDialogFileSaveAs)
With dlgSaveAs
    .Name = Chemin & "\" & Fichier
    .Format = wdFormatDocument '*.doc OK
    .Show
End With
WordApp.Quit
End Sub
NB: Par contre, je n'arrive pas à mettre l'enregistrement en *.docx
Même si j'écris cette ligne ainsi:
.Format = wdFormatDocumentDefault
 

Staple1600

XLDnaute Barbatruc
Re

NB; Tel que j'ai écrit mon code le chemin du fichier
est en B10 et son nom en B12
Donc en B10, on doit avoir quelque chose comme
C:\Users\STAPLE\Documents\testWORD
(Et dans mon code il s'agit des cellules sur la feuille Feuil1)

EDITION: Je te laisse faire les tests et adaptations idoines.
Je pars diner.
Je repasse en fin de soirée.
 

Discussions similaires

Statistiques des forums

Discussions
312 104
Messages
2 085 337
Membres
102 865
dernier inscrit
FreyaSalander