Imprimer tous les fichiers d'un dossier

Word, PowerPoint, Outlook, Access et tous les autres logiciels de la suite Office (sauf Excel)
E
Ergotamine
Membre fidèle
Membre fidèle
Messages : 264
Appréciations reçues : 13
Inscrit le : 26 juin 2016
Version d'Excel : 365

Message par Ergotamine » 25 janvier 2019, 18:44

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,
E
Ergotamine
Membre fidèle
Membre fidèle
Messages : 264
Appréciations reçues : 13
Inscrit le : 26 juin 2016
Version d'Excel : 365

Message par Ergotamine » 25 janvier 2019, 19:10

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

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 !!
E
Ergotamine
Membre fidèle
Membre fidèle
Messages : 264
Appréciations reçues : 13
Inscrit le : 26 juin 2016
Version d'Excel : 365

Message par Ergotamine » 9 février 2019, 10:52

Up ?

Désolé pour le triple post ..
Avatar du membre
i20100
Passionné d'Excel
Passionné d'Excel
Messages : 4'278
Appréciations reçues : 184
Inscrit le : 16 mars 2017
Version d'Excel : 2010 sur PC

Message par i20100 » 10 février 2019, 03:33

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
1 membre du forum aime ce message.
Si le problème est résolu, pensez au clic sur le bouton
isabelle
E
Ergotamine
Membre fidèle
Membre fidèle
Messages : 264
Appréciations reçues : 13
Inscrit le : 26 juin 2016
Version d'Excel : 365

Message par Ergotamine » 10 février 2019, 08:59

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 !
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message