Imprimer tous les fichiers d'un dossier

Bonjour,

Je souhaiterais savoir s'il existe un code VBA qui, à partir d'une exécution sur un document word permettrait d'imprimer TOUS les fichiers du dossier où se trouve le document word ?

A savoir que les fichiers s'y trouvant possèdent diverses extensions (.pdf, .xlsx, .docx).

Je pensais passer par Shell32 mais je n'arrive pas à comprendre son fonctionnement.

Je vous remercie par avance !

PS : N'hésitez pas à me dire si ce n'est pas possible.

PS 2 : Je ne souhaite pas passer par du VBS (interdit sur mon serveur entreprise ..)

Cordialement,

Bon au final j'ai trouvé en cherchant ailleurs, par contre j'aimerais beaucoup qu'on m'explique le code

De plus, vous sauriez si il est possible de ne pas update l'écran et que ça s’exécute en arrière plan ?

Un peu comme le application.screenupdating = false ..

Option Explicit

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
    (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
    (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String _
    , ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Sub Test()

Dim Fichier As String, WordObj As Object, WordDoc As Object
Dim Arr(), Chemin As String
Dim Wb As Workbook
Dim Elt As Variant
Chemin = ActiveDocument.Path & "\"

Arr = Array("*.docx", "*.xlsx", "*.pdf")
For Each Elt In Arr
Fichier = Dir(Chemin & Elt)
Select Case Elt

Case Arr(0)
Set WordObj = CreateObject("Word.Application")
WordObj.Visible = True
WordObj.Activate
Do While Fichier <> ""
Set WordDoc = WordObj.Documents.Open(Chemin & Fichier)
WordDoc.PrintOut
WordDoc.Close False
Fichier = Dir()
Loop
WordObj.Quit
Set WordDoc = Nothing
Set WordObj = Nothing

Case Arr(1)
Do While Fichier <> ""
Set Wb = Workbooks.Open(Chemin & Fichier)
Wb.PrintOut
Wb.Close False
Fichier = Dir()
Loop
Set Wb = Nothing

Case Arr(2)
Dim x As Long
x = FindWindow("XLMAIN", Application.Caption)
ShellExecute x, "print", Chemin & Fichier, "", "", 1
End Select
Next
End Sub

Merci !!

Up ?

Désolé pour le triple post ..

Bonjour Ergotamine ,

j'espère que les commentaires ajouter à la macro pourrons vous aider,

copier la macro dans un module, les commentaires serons plus visible.

Option Explicit
'déclaration pour utiliser (Fichier = Dir(Chemin & Elt))
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
    (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
    (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String _
    , ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Sub Test()
  'déclaration des variables
Dim Fichier As String, WordObj As Object, WordDoc As Object
Dim Arr(), Chemin As String
Dim Wb As Workbook
Dim Elt As Variant
Chemin = ActiveDocument.Path & "\"

Application.ScreenUpdating = False 'évite de voit tout le déroulement de la macro à l'écran

'Arr est une variable type Variant contenant un tableau qui défini les types de fichiers à imprimer
Arr = Array("*.docx", "*.xlsx", "*.pdf")
For Each Elt In Arr  ' pour chaque cas Elt In Arr (docx, xlsx, pdf)
    Fichier = Dir(Chemin & Elt)  'pour chaque fichiers du répertoire Chemin
    Select Case Elt   'selon le cas Elt (docx ou xlsx ou pdf)
        Case Arr(0)  ' si c'est un fichier docx
            Set WordObj = CreateObject("Word.Application")
            WordObj.Visible = True  'mettre à false pour ne pas voir l'exécution
            WordObj.Activate   'active l'application Word  (pas nécessaire)

            Do While Fichier <> ""   'faire pour tous les fichiers docx  du répertoire
                Set WordDoc = WordObj.Documents.Open(Chemin & Fichier)
                WordDoc.PrintOut  'imprime le fichier
                WordDoc.Close False  'ferme le fichier
                Fichier = Dir()   ' passe au prochin fichier docx
            Loop

            WordObj.Quit  'ferme l'application Word
            Set WordDoc = Nothing  ' vide l'espace mémoire pris par la variable Objet WordDoc
            Set WordObj = Nothing  ' vide l'espace mémoire pris par la variable Objet WordObj

        Case Arr(1)  ' si c'est un fichier xlsx
            Do While Fichier <> ""
                Set Wb = Workbooks.Open(Chemin & Fichier)
                Wb.PrintOut
                Wb.Close False
                Fichier = Dir()
            Loop

            Set Wb = Nothing

        Case Arr(2)  ' si c'est un fichier pdf
            Dim x As Long
            x = FindWindow("XLMAIN", Application.Caption)
            ShellExecute x, "print", Chemin & Fichier, "", "", 1
    End Select
Next Elt
Application.ScreenUpdating = True
End Sub

Bonjour I20100,

Merci beaucoup pour l'explication.

Une dernière question : comment le système sait interpréter "Elt" comme un fichier sachant que nous n'avons précisé que ce n'était qu'un objet de type Variant ?

Bon dimanche !

Rechercher des sujets similaires à "imprimer tous fichiers dossier"