XL 2013 Ouvrir plusieurs documents word avec une boucle

skrytchy

XLDnaute Nouveau
Bonjour,

J'ai besoin d'un coup de main sur une macro. J'ai cherché pendant un long moment mais je n'ai jamais trouvé quelque chose qui s'approche de ce que je veux faire.

Je vous joins mon fichier.

J'ai actuellement une dizaine de fichier word dans un dossier bien identifié.
Je souhaiterais en remplissant mon onglet Impression que le document word de chaque ligne ayant dans la colonne le chiffre 1 s'ouvre et s'imprime.

J'ai réussi à le faire en spécifiant un document sauf que cela bloque à l'impression et je ne parviens pas à rédiger la macro pour ce que je désire.

Demande optionnelle : Est-il possible de générer pour le coup une numérotation des pages ?
 

Pièces jointes

  • Présentation.xlsm
    18.7 KB · Affichages: 36
  • Présentation.xlsm
    18.7 KB · Affichages: 37

Lone-wolf

XLDnaute Barbatruc
Re : Ouvrir plusieurs documents word avec une boucle

Bonjour skrytchy,


fait un test avec ceci. Vu que tu as les fichiers dans le même dossier pas besoin de mettre le lien sur la feuille. Tu mets juste les noms des documents et le nombre d'impressions. En PJ ton fichier retouché.


Code:
Sub Impression()
Dim WApp As Object
Dim doc, nb
Dim cel As Range
Dim Chemin As String
Application.WindowState = xlMinimized
Set WApp = CreateObject("Word.Application")
WApp.Visible = True
Chemin = "L:\ORGANISATION\Documents originaux\Lsf présentation\"
With Sheets("Feuil1")
For Each cel In .Range("b5:b12")
x = x + 1
    If cel >= 1 Then
    doc = Chemin & "\" & cel.Offset(0, -1) & ".doc"
       'Ouvre le document
        WApp.Documents.Open (doc)
        nb = cel
             'Ajoute le numéro de page
              WApp.ActiveDocument.Sections(1).Footers(wdHeaderFooterPrimary).PageNumbers.Add _
        PageNumberAlignment:=wdAlignPageNumberCenter
             t = Timer + 1.3: Do Until Timer > t: DoEvents: Loop
        Else
        Exit For
    End If
        'Imprime
        WApp.ActiveDocument.PrintOut Copies:=nb, ActivePrinter:="PDFCreator", Collate:=True
Next cel
End With
'Ferme le document actif
WApp.ActiveDocument.Close
Application.WindowState = xlNormal
End Sub
 

Pièces jointes

  • Présentation.xlsm
    18.3 KB · Affichages: 32
  • Présentation.xlsm
    18.3 KB · Affichages: 31
Dernière édition:

skrytchy

XLDnaute Nouveau
Re : Ouvrir plusieurs documents word avec une boucle

Bonjour Lone-wolf,

Merci pour ta réponse plus que rapide. J'ai testé avec ton fichier mais la macro s'arrête à

'Imprime
WApp.ActiveDocument.PrintOut Copies:=nb, ActivePrinter:="PDFCreator", Collate:=True

"Argument nommé introuvable"

Si l'on teste en remplacant nb par 1 cela ne fonctionne pas non plus. Le nom de mon imprimante est bien PDFCreator.
Si je remplace PDFCreator par le nom d'une autre imprimante cela ne fonctionne pas non plus.

J'avais réussi à générer l'impression hier mais j'ai malencontreusement effacé ce bout de macro.
 

skrytchy

XLDnaute Nouveau
Re : Ouvrir plusieurs documents word avec une boucle

Voici après quelques tests les problèmes qui subsistent :


1 / Après plusieurs test à tatons, en mettant simplement

WApp.ActiveDocument.PrintOut Copies:=nb

Cela fonctionne, donc c'est vraisemblablement la zone ActivePrinter qui ne va pas. Mais cela n'est pas forcément génant.

2 / J'ai complété mon fichier que je te rejoins mais j'ai un souci quand je mets des lignes à 0 les lignes qui suivent avec des 1 ne s'impriment pas.

3 / Est-il possible de générer les numérotations les une après les autres. Je m'explique
le premier document à une page n°1
le second document à deux pages n°2 et 3
le troisième document à une page n°4....
Bref de mettre un genre de compteur quelque part.
J'ai réussi à le faire avec un fichier excel qui imprime plusieurs onglets les uns après les autres mais vu que là c'est sur word je bloque.

A savoir que le choix des impressions ne se fera qu'avec 0 exemplaires dans la colonne B ou avec 1 exemplaires.
 

Pièces jointes

  • Présentation.xlsm
    19.4 KB · Affichages: 32
  • Présentation.xlsm
    19.4 KB · Affichages: 30
Dernière modification par un modérateur:

Lone-wolf

XLDnaute Barbatruc
Re : Ouvrir plusieurs documents word avec une boucle

Re,

pour la question n°2: je pense que c'est dû à la mise en page, j'ai un aussi ce souci avec un document.

Pour la question n°3: dans la macro, tu as vu que j'ai mis x = x + 1.

.Headers(wdHeaderFooterPrimary).Range.Text = "Page(s) " & NbPages + x
 
Dernière édition:

skrytchy

XLDnaute Nouveau
Re : Ouvrir plusieurs documents word avec une boucle

Pour la question 2 je comprends pas d'où cela peut venir. Cependant j'ai trouvé une solution de bricolage, en triant la colonne B j'arrive du coup à imprimer les documents voulus. Mais bon çà reste du bricolage.

Question 3 : cela fonctionne avec la macro suivante mais j'ai la numérotation en haut à gauche.

Sub Impression()
Dim WApp As Object
Dim doc, nb
Dim cel As Range
Dim Chemin As String
Application.WindowState = xlMinimized
Set WApp = CreateObject("Word.Application")
WApp.Visible = True
Chemin = "L:\ORGANISATION\Documents originaux\Lsf présentation\"
With Sheets("Feuil1")
For Each cel In .Range("b5:b15")
x = x + 1
If cel >= 1 Then
doc = Chemin & "\" & cel.Offset(0, -1) & ".doc"
'Ouvre le document
WApp.Documents.Open (doc)
nb = cel
'Ajoute le numéro de page
WApp.ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Range.Text = "Page " & NbPages + x

t = Timer + 1.3: Do Until Timer > t: DoEvents: Loop
Else
Exit For
End If
'Imprime
WApp.ActiveDocument.PrintOut Copies:=nb
'Ferme le document actif
WApp.ActiveDocument.Close

Next cel
End With

Application.WindowState = xlNormal
End Sub
 

Lone-wolf

XLDnaute Barbatruc
Re : Ouvrir plusieurs documents word avec une boucle

Re,

essaie avec ceci

'Ajoute le numéro de page en pied de page
WApp.ActiveDocument.Sections(1).Footers(wdHeaderFooterPrimary).PageNumbers.Add _
PageNumberAlignment:=wdAlignPageNumberCenter
 

Lone-wolf

XLDnaute Barbatruc
Re : Ouvrir plusieurs documents word avec une boucle

Re Skrytchi,

si tu passe par ici

pour mettre "Page 1 / X" en haut à droite. A adapter

Comme je l'ai dit dans mon précédent post, j'avais un problème d'insertion de "Page 1 / X" dans un doc.

Je viens de faire cette manipulation: j'ai copié le texte, ouvert un doc vierge, collage special > texte sans mise en forme. J'ai fais la mise en page et enregistrer le document avec le même nom. En refaisant le test, surprise, "Page 1 / X" à bien été inserer.


Code:
With WApp.ActiveDocument.Sections(1)
       .Headers(wdHeaderFooterPrimary).Range.Paragraphs. _
        Alignment = wdAlignParagraphRight
       .Headers(wdHeaderFooterPrimary).PageNumbers.Add
        If cel.Offset(0, 2) <> "" Then  ' Ici je récupère le nb de pages par document
         'np$ = cel.Offset(0, 2) et divise np$ si >= 2
        .Headers(wdHeaderFooterPrimary).Range.Text = "Page " & (np$ / np$) & " / " & NbPages
         Else
        .Headers(wdHeaderFooterPrimary).Range.Text = "Page " & np$ & " / " & NbPages
        End If
        End With
 
Dernière édition:

skrytchy

XLDnaute Nouveau
Re : Ouvrir plusieurs documents word avec une boucle

Merci beaucoup de ton aide.

J'ai modifié un peu la macro et maintenant çà marche à merveille.
Pour le souci d'arrêt de la macro quand elle passe sur une ligne à 0, j'ai simplement ajouté un tri automatique à la macro.

Code:
Sub Impression()
Dim WApp As Object
Dim doc, nb
Dim cel As Range
Dim Chemin As String
Dim nbpagessuivante As Integer

Application.WindowState = xlMinimized
Set WApp = CreateObject("Word.Application")
WApp.Visible = True
Chemin = "L:\ORGANISATION\Documents originaux\Lsf présentation\"

'Tri Tableau

   Range("A4:C15").Select
    ActiveWorkbook.Worksheets("Feuil1").AutoFilter.Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Feuil1").AutoFilter.Sort.SortFields.Add Key:=Range _
        ("C4"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Feuil1").AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    ActiveWorkbook.Worksheets("Feuil1").AutoFilter.Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Feuil1").AutoFilter.Sort.SortFields.Add Key:=Range _
        ("B4"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Feuil1").AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    
'Sélection des impressions

With Sheets("Feuil1")
    For Each cel In .Range("b5:b15")
    x = x + 1
        If cel >= 1 Then
        doc = Chemin & "\" & cel.Offset(0, -1) & ".doc"
           'Ouvre le document
            WApp.Documents.Open (doc)
            nb = cel
                'Ajoute le numéro de page
                nbpagessuivante = NbPages + x
                 
                With WApp.ActiveDocument.Sections(1)
                    .Footers(wdHeaderFooterPrimary).Range.Paragraphs. _
                     Alignment = wdAlignParagraphCenter
                    .Footers(wdHeaderFooterPrimary).Range.Text = "Page " & nbpagessuivante
                End With
                  
            t = Timer + 1.3: Do Until Timer > t: DoEvents: Loop
            Else
            Exit For
        End If
        
            'Imprime
            WApp.ActiveDocument.PrintOut Copies:=nb
            'Ferme le document actif
            WApp.ActiveDocument.Close
            
    Next cel
End With
WApp.Quit
'Tri Tableau

   Range("A4:C15").Select
    ActiveWorkbook.Worksheets("Feuil1").AutoFilter.Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Feuil1").AutoFilter.Sort.SortFields.Add Key:=Range _
        ("C4"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Feuil1").AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

Application.WindowState = xlNormal
End Sub

Merci encore.
 
Dernière modification par un modérateur:

Lone-wolf

XLDnaute Barbatruc
Re : Ouvrir plusieurs documents word avec une boucle

Bonjour skrytchy

modifie ton message. Va dans mode avancé, clique sur le bouton #, ensuite fait comme ceci pour mettre tout ton code.

CODE=VBA] Ton code /CODE] sans enlever les parenthèses. Il serait plus lisible.
 

skrytchy

XLDnaute Nouveau
Re : Ouvrir plusieurs documents word avec une boucle

Mince j'ai été trop vite en besogne, j'ai un ultime problème que je ne parviens pas à résoudre. Je m'explique
Je lance l'impression des document 1 qui a une page et 2 qui a deux pages.
Le document 1 se numérote Page 1 et le document 2 se numérote Page 2 sur les deux pages.

Moi pas comprendre....
 

Discussions similaires

Réponses
15
Affichages
791
Compte Supprimé 979
C

Statistiques des forums

Discussions
312 336
Messages
2 087 388
Membres
103 534
dernier inscrit
Kalamymustapha