XL 2013 Macro depuis excel pour piloter un document word

CHLOE90

XLDnaute Junior
Bonsoir le Forum,

J'ai réalisé différentes recherches sur ce forum et pas que, concernant un problème qui se pose à moi depuis deux jours...sans que je trouve une solution, du coup, je me décide à vous écrire.
J'ai trouvé des réponses approchantes de STAPLE 1600 ou encore celle de CHRIS ci-dessous, mais je ne suis pas parvenue à mettre en oeuvre.

Voici mon problème :
J'ai dans une colonne d'une feuille d'un classeur excel une liste d'une cinquantaine de fichiers Word (.docx), les uns sous les autres. Tous ces documents Word sont dans le même répertoire que mon classeur excel, ils sont tous au même format (1 document = 1 feuille).
Ma volonté est de pouvoir depuis la liste excel, sélectionner certains fichiers (à partir d'une valeur dans la cellule de la colonne suivante 1, 0 ou Oui/Non) afin que les fichiers sélectionnés soient fusionnés dans un nouveau document Word avec si possible un document par page. Au bout de la fusion, le document serait sauvegardé dans le même répertoire.
Si je pouvais en plus choisir la chronologie des fichiers à fusionner ça serait extra. (les valeurs dans la colonne seraient alors 1, 2, 3 etc..)

Merci à celui ou celle qui pourra se pencher sur mon sujet. Je continue mes recherches en parallèle.
Bon W.E. à tous
Chloé
 

CHLOE90

XLDnaute Junior
Bonjour le fil

=>Chloé
Quand tu parles du fusionner des documents Word, tu parles d'ajouter chaque pages de tes fichiers Word à la à la queue leu leu dans un document Word unique?
Bonjour Staple, le forum

Merci Staple 1600 de consacrer de ton temps à mon souci.
Oui c’est tout à fait ça, que le contenu des fichiers Word se trouvent à la queue leu leu dans le nouveau document Word généré.

Belle journée à tous.
Chloé
 

Staple1600

XLDnaute Barbatruc
Re

Ce bout de code semble OK
(mais j'ai testé sur trois documents Word d'une seule page)
Code VBA à mettre dans un fichier Excel agencé comme suit
En A1: NOMS
En B1: Choix
En colonne A (à partir de A2)
les noms des documents Word
En colonne B
Oui ou Non
VB:
Sub TestA()
'Cocher la référence à la librairie Word dans VBE
'Outils/Références/Microsoft Word XX.0 Library
Dim strPath$, strDoc$, objWord As Word.Application, objDoc As Word.Document
Set objWord = CreateObject("Word.Application")
Set appWord = GetObject(, "Word.Application")
Set objDoc = objWord.Documents.Add
objWord.Visible = True
Set objSelection = objWord.Selection
strPath = "C:\Users\STAPLE\Documents\testWORD\" ' à adapter
objDoc.SaveAs "C:\Users\STAPLE\Documents\testWORD\Fusion\Agrégat.docx" 'à adapter
For i = 2 To Cells(Rows.Count, "B").End(xlUp).Row
    If Cells(i, "B").Value = "Oui" Then
        strDoc = strPath & Cells(i, "A").Value2
        With appWord.Selection
        .InsertFile Filename:=strDoc
        End With
        With objWord.Selection
        .Collapse Direction:=wdCollapseEnd
        .InsertBreak Type:=7
        End With
    End If
Next
objDoc.Save
objDoc.Close wdSaveChanges
appWord.Quit
Application.ScreenUpdating = True
End Sub
Test OK sur mon PC

Avec voir ce que cela donne avec tes documents Word.
 

Staple1600

XLDnaute Barbatruc
Re

Une version plus courte
(ici on combine tous les documents Word)
(Charge à l'utilisateur d'avoir fait une sélection au préalable dans le dossier traité)
VB:
Sub TestB()
'Cocher la référence à la librairie Word dans VBE
'Outils/Références/Microsoft Word XX.0 Library
Dim strPath$, strFile$, objWord As Word.Application, objDoc As Word.Document, rng As Word.Range
strPath = "C:\Users\STAPLE\Documents\testWORD\" ' à adapter
Set objWord = CreateObject("Word.Application")
Set objDoc = objWord.Documents.Add
objWord.Visible = True
Application.ScreenUpdating = False
strFile = Dir(strPath & "*.docx")
    Do Until strFile = ""
        Set rng = objDoc.Range
        rng.Collapse wdCollapseEnd
        rng.InsertFile strPath & strFile
        rng.InsertBreak Type:=wdPageBreak
        strFile = Dir()
    Loop
objDoc.Bookmarks("\page").Range.Delete
End Sub
NB: test OK sur mon PC.
 

CHLOE90

XLDnaute Junior
STAPLE, c'est simplement parfait, ça marche au poil, y compris pour les documents word qui dépassent une page (j'en ai).
Merci encore pour ton aide précieuse, je n'y serais jamais arrivée seule, c'est bien trop complexe pour moi.

En haut de mon code, j'écrirai ceci :
'Macro crée le 20 03 2021 PAR STAPLE 1600 pour Chloé

Bon dimanche à tous et merci STAPLE de nous faire bénéficier/partager tes connaissances.
 

Staple1600

XLDnaute Barbatruc
Re

Pour la route, une version à tester avec des documents
(avec des formatages complexes)
VB:
Sub TestC()
'Cocher la référence à la librairie Word dans VBE
'Outils/Références/Microsoft Word XX.0 Library
Dim strPath$, strFile$, objWord As Word.Application
Dim objDoc As Word.Document, oDocFic As Word.Document, rng As Word.Range
strPath = "C:\Users\STAPLE\Documents\testWORD\" ' à adapter
Set objWord = CreateObject("Word.Application")
Set objDoc = objWord.Documents.Add: objWord.Visible = False
Application.ScreenUpdating = False
With ActiveSheet
    For j = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
      Set oDocFic = _
                objWord.Documents.Open(Filename:=strPath & .Cells(j, 1).Value2, _
                ReadOnly:=True, AddToRecentFiles:=False)
        With objDoc.Range
          .Collapse Direction:=wdCollapseEnd
          .InsertBreak Type:=wdPageBreak
          .Collapse Direction:=wdCollapseEnd
          .FormattedText = oDocFic.Range.FormattedText
        End With
      oDocFic.Close SaveChanges:=False
    Next
End With
objWord.Visible = True
objDoc.Bookmarks("\page").Range.Delete
End Sub
OK pour le haut de ton code, mais il faudrait rajouter ;)
'Macro crée le 20 03 2021 PAR STAPLE 1600 pour Chloé 'par un beau samedi d'avant printemps, sous un ciel bleu azur 'NB: macro rédigée avec ses petits doigts(*) passés au gel hydroalcoolique
(*) je parle des miens de petits doigts
(tout calleux à force d'écrire et d'écrire du VBA à longueur de journée depuis le 22 mai 1995, 15 heures de l'aprés-midi ;))
 

Discussions similaires