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 !