Imprimer les PDF d'un dossier depuis Excel

Résolu
cyrga11 Messages postés 48 Statut Membre -  
cyrga11 Messages postés 48 Statut Membre -
Bonjour tout le monde,

Voila mon problème j'ai dans "Mes Documents" un dossier dont le chemin est le suivant :

D:\Session_Cyril\Mes documents\Facture Travail\

J'enregistre dans ce dossier toutes mes factures depuis Excel en PDF. Je souhaiterais savoir s'il m'est possible d'avoir un bouton qui enverrai automatiquement tout le contenu du dossier (donc des fichier PDF) à l'imprimante ?

J'ai trouvé le code suivant sur internet, j'y ai inséré mon chemin d'accès vers mon dossier, mais comme dirait Thierry Lhermite "Le temps passe et rien ne se passe, on est dans l'impasse" :D

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 ImprimerFichier()
Dim NomFichier As String
Dim x As Long

x = FindWindow("XLMAIN", Application.Caption)
NomFichier = "D:\Session_Cyril\Mes documents\Facture Travail.pdf"

ShellExecute x, "print", NomFichier, "", "", 1
End Sub

Alors je ne sait pas si ce code est fonctionnel ou pas, mais moi quand je clique sur le bouton qui y est associé, rien ne se passe. Si quelqu'un peux m'aider ce sera avec plaisir, merci.

36 réponses

  • 1
  • 2
  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    ce code marche tres bien, ai ajoute boucle sur les fichiers PDF du dossier

    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 ImprimerFichier()
    Dim x As Long, Chemin_Fichier As String, Nom_Fichier As String

    Chemin_Fichier = "D:\Session_Cyril\Mes documents\"
    x = FindWindow("XLMAIN", Application.Caption)
    Nom_Fichier = Dir(Chemin_Fichier & "*.PDF")
    'boucle nom de fichier PDF
    Do While Nom_Fichier <> ""
    ShellExecute x, "print", Chemin_Fichier & Nom_Fichier, "", "", 1
    Nom_Fichier = Dir
    Loop

    End Sub
    0
  2. cyrga11 Messages postés 48 Statut Membre
     
    Bonjour f894009 et merci pour ta réponse.

    Alors effectivement, en mettant le code que tu ma donné, cela fonctionne. En revanche, cela m'ouvre aussi Adobe Rearder.

    Est il possible que les fichiers aille à l'imprimante (cela fonctionne merci à toi) sans s'ouvrir ?
    0
  3. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,

    En revanche, cela m'ouvre aussi Adobe Rearder. Surprenant car pas chez moi !!!!!!!!! Vous n'auriez pas pdfcreator en imprimante ???????
    0
  4. cyrga11 Messages postés 48 Statut Membre
     
    Non je n'ai même pas PDF CREATOR du tout.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. cyrga11 Messages postés 48 Statut Membre
     
    J'ai :

    Adobe Rearder IX
    Adobe Shockwave Player 12.0
    Adobe Flash Player 11 Plugin
    Adobe Air
    Adobe Flash Player 10 ActiveX
    Acrobat.com

    Si'il y a quelque chose de là que je doit virer je le fait. Mais je ne sais pas quoi
    0
  7. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,

    Rectification, ca ouvre bien Adobe Reader. Je regarde.

    A+
    0
  8. cyrga11 Messages postés 48 Statut Membre
     
    Merci à toi a+
    0
  9. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,

    A titre d'info, si vous imprimez un .docx, Word s'ouvre mais se referme tout seul.
    0
  10. cyrga11 Messages postés 48 Statut Membre
     
    Re, effectivement, là le fichier s'ouvre et se ferme tout seul. Cela ne pourrait t'il pas venir de ce qui permet d'ouvrir les PDF sur le PC ?
    0
  11. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,

    ce qui permet d'ouvrir les PDF sur le PC Oui, mais adobe est oblige de s'ouvrir pour imprimer le fichier
    0
  12. cyrga11 Messages postés 48 Statut Membre
     
    Donc il ne pourras se fermer automatiquement comme word ?

    Parce que à la limite je m'en fiche qu'il s'ouvre s'il se ferme seul. Ne peux ton pas programmer qu'il se ferme tout seul alors ?
    0
  13. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,

    C'est ce que je cherche, qu'il se ferme tout seul. Ai trouve quelques codes, mais pas marche.

    Je continue
    0
  14. cyrga11 Messages postés 48 Statut Membre
     
    merci je cherche aussi de mon coter si je trouve avant je te préviens :)
    0
  15. cyrga11 Messages postés 48 Statut Membre
     
    J'ai trouver ce bout de code, mais impossible de le faire fonctionner avec le reste

    Sub Ferme_Pdf()
    Const WM_SYSCOMMAND& = &H112, SC_CLOSE& = &HF060
    SendMessage Apphwnd, WM_SYSCOMMAND, SC_CLOSE, 0&
    End Sub
    0
  16. cyrga11 Messages postés 48 Statut Membre
     
    alors j'ai trouver ce code qui mentionne bien la fermeture du pdf, mais qui au lieu de me fermer le pdf m'envoie le fichier excel entier a l'imprimante.

    Sub test()
    Dim Wk As Workbook
    Set Wk = Workbooks("MATRICE FIDELIA TVA 101.xlsm")
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _
    Imprimante_AdobePDF, Collate:=True
    Call Fermer_Un_Programme("Acrobat.exe")
    Wk.Activate
    End Sub

    Sub Fermer_Un_Programme(Prog As String)
    Dim StrComputer As String, objWMIService As Object
    StrComputer = "."
    Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & StrComputer & "\root\cimv2")
    Set colProcessList = objWMIService.ExecQuery _
    ("Select * from Win32_Process Where Name = '" & Prog & "'")
    For Each objProcess In colProcessList
    objProcess.Terminate
    Next
    End Sub

    Si tu peux en faire quelque chose de mieux ?
    0
  17. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,

    au lieu de me fermer le pdf m'envoie le fichier excel ben oui, le code est fait pour ca. Je regarde ce que je peux en faire pur la fermeture de adobe reader (ce n'est pas acrobat.exe, mais AcroRd32.exe)

    A+
    0
  18. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,

    devrait aller:

    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

    'imprimer fichier PDF depuis EXCEL
    Sub ImprimerFichier()
    Dim x As Long, Chemin_Fichier As String, Nom_Fichier As String, Acrobat

    Chemin_Fichier = "D:\Session_Cyril\Mes documents\"
    x = FindWindow("XLMAIN", Application.Caption)
    Nom_Fichier = Dir(Chemin_Fichier & "*.PDF")
    'boucle nom de fichier PDF
    Do While Nom_Fichier <> ""
    ShellExecute x, "print", Chemin_Fichier & Nom_Fichier, "", "", 1
    'attente
    Application.Wait (Now + TimeValue("0:00:01"))
    Call Fermer_Un_Programme("AcroRd32.exe")
    Nom_Fichier = Dir
    Loop

    End Sub

    Sub Fermer_Un_Programme(Prog As String)
    Dim StrComputer As String, objWMIService As Object, objProcess, colProcessList

    StrComputer = "."
    Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & StrComputer & "\root\cimv2")
    Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process Where Name = '" & Prog & "'")
    For Each objProcess In colProcessList
    objProcess.Terminate
    Next
    End Sub


    A+
    0
  19. cyrga11 Messages postés 48 Statut Membre
     
    Si j'ai bien compris tout ce code remplace aussi celui qui imprime les pdf qui se trouvent dans le dossier.

    Seulement cela m'affiche une erreur d'exécution '-2147217406 (80041002)':

    Non trouvé

    et quand je clique sur débogage, ça m'envoie dans Visual Basic et la phrase suivante est surligné en jaune :

    objProcess.Terminate
    0
  20. cyrga11 Messages postés 48 Statut Membre
     
    Si j'augmente le TimeValue :

    Application.Wait (Now + TimeValue("0:00:50"))

    ça marche, mais quand le pdf se ferme, l'erreur de débogage apparaît et un seul fichier sur deux est envoyer a l'imprimante.

    Désolé je voie bien que c'est pas évident et merci encore pour l'aide apporté
    0
  • 1
  • 2