Microsoft 365 Imprimer des fichiers issus d'une liste avec paramêtres imprimante.

Lolote83

XLDnaute Barbatruc
Bonjour à tous,
Je cherche à imprimer les fichiers contenus dans une liste. Le problème est que les différents codes que je trouve parlent de ActiveSheet.PageSetup ou autre mais de fait, cela fait référence au fichier excel en lui même et non pas à un fichier annexe (liste).
Tout est expliqué dans le fichier joint.
Je ne sais pas si c'est réalisable mais bon, c'est on jamais ....
Cordialement
@+ Lolote83
 

Pièces jointes

  • PourForum - Imprimer et changer les paramêtres imprimantes.xlsm
    30.4 KB · Affichages: 26

Phil69970

XLDnaute Barbatruc
Bonjour tous

Essaye ce code :
VB:
Option Explicit

#If VBA7 And Win64 Then
    Private Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As LongPtr, ByVal wMsg As Long, ByVal wParam As LongPtr, lParam As Any) As Long
    Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare PtrSafe Function ShellExecute Lib "shell32" 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
#Else
    Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Private Declare Function FindWindow Lib "user32.dll" 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
#End If

Const WM_CLOSE = &H10

Sub ImprimerFichier()

Dim NomFichier As String
NomFichier = [c2] & [b5]

Dim hwnd As Long

ShellExecute FindWindow("XLMAIN", Application.Caption), "print", NomFichier, "", "", 1

Application.Wait (Now + TimeValue("00:00:05")) '==> Attente avant de fermer acrobat sinon acrobat ne se ferme pas

'****************
'Code Pour fermer acrobat
'https://www.mrexcel.com/board/threads/vba-code-to-close-adobe-reader.1020273/

Dim strClassName As String
strClassName = "AcrobatSDIWindow"
hwnd = FindWindow(strClassName, vbNullString)
If hwnd Then
    SendMessage hwnd, WM_CLOSE, 0, ByVal 0&
Else
    MsgBox "Adobe est toujours ouvert !"
End If

'****************

End Sub

@Phil69970
 

patricktoulon

XLDnaute Barbatruc
Bonsoir a tous
on peu largement faire sans api window
d'une part parce que le find windows peut être différent d'un pc a la'autre ainsi que l'application PDF et selon l'app PDF le handle n'est pas accessible
ce qui rend la partie findwindow et sendmessage plus qu' hasardeux

conclusion
mieux vaut connaitre le processus et le killer
exemple
VB:
Function ImprimerFichier(ByVal Fichier As String)
    CreateObject("Shell.Application").Namespace(0).ParseName(Fichier).InvokeVerb ("Print")
    Application.Wait (Now + TimeValue("0:00:03"))
    Shell "Taskkill /im AcroRd32.exe /f", 0    'changer "AcroRd32.exe" pour le nom de ton app qui ouvre tes pdf  pour tuer son processus
End Function

Sub test()
    Dim Fichier$
    Fichier = "C:\Users\polux\DeskTop\Facture toto.pdf"
    ImprimerFichier Fichier
End Sub
;)
 

Lolote83

XLDnaute Barbatruc
Bonjour à tous,
Merci pour vos réponses que je vais tester aujourd'hui.
Cependant, les explications données dans le corps du message ne sont peut être pas complètes et le fichier joint donnait des informations complémentaires.
En fait, je souhaite effectivement imprimer un fichier contenu dans une liste mais en pouvant choisir A4 vs A3, Recto seul vs Recto Verso, Couleur vs Noir et Blanc.
Ce sont ces options que je n'arrive pas à appliquer. Est ce possible ?
Voici la copie d'écran pour ceux qui n'ont pas ouvert fichier joint.
1598508942090.png

Je continue mes recherches mais malgré les recherches, rien de probant pour le moment

En regardant vos codes, vous faites référence à des fichiers PDF alors qu'il se peut que j'ai aussi des fichiers Word ou autres.

@+ Lolote83
 
Dernière édition:

Lolote83

XLDnaute Barbatruc
Bonjour PatrickToulon, Phil69970,
Un petit UP ?
Pas d'idée géniale ?
J'avais mis tant d'espoir dans une solution qui me permettrait d'imprimer les fichiers avec les paramètres.
Je reste sur le fil en espérant que quelqu'un ai le déclic qui pourrait aussi peut être aider la communauté.
Cordialement
@+ Lolote83
 

Phil69970

XLDnaute Barbatruc
Bonjour tous

Pour le papier et la couleur il existe ces paramètres :

Sheets("Feuil1").PageSetup.PaperSize = xlPaperA4 ' ou xlPaperA3
Sheets("Feuil1").PageSetup.BlackAndWhite = True ' Pour N & B et False pour couleur

Pour le recto verso je ne pense pas que vba puisse le faire.
Eventuellement créer une imprimante paramétrer en recto verso.

@Phil69970
 

patricktoulon

XLDnaute Barbatruc
Bonjour
Pour le recto verso je ne pense pas que vba puisse le faire.
Eventuellement créer une imprimante paramétrer en recto verso.
voila la reponse elle est là
il faudra bien évidement modifier provisoirement l'imprimante Window par defaut
je dis bien l'imprimante windows pas celle parametrée dans excel
pour cela vous avec un exemple dans les ressources boites de dialogue épisode 2 sélecteur d'imprimante (chercher avec mon pseudo)
;)
 
Dernière édition:

Lolote83

XLDnaute Barbatruc
Re bonjour à tous.
Effectivement, les paramètres PageSetup décrit au post#6 (Phil69970) fonctionnent bien pour un fichier excel en direct mais la, il s'agit de piloter l'imprimante pour imprimer des fichiers anexes.
J'ai fait des essais avec PageSetup et cela fonctionne bien si j'imprime ma feuille excel, mais cela ne fonctionne pas si j'essais d'imprimer les .PDF, .DOCX ....
Merci Phil69970

PatrickToulon.
Si j'ai bien compris, il faut que je fasse une recherche avec votre Pseudo et l'intitulé " boites de dialogue épisode 2 sélecteur d'imprimante "
Je ne suis pas sur de bien comprendre mais je vais faire mes recherches.
Sur ce site même ? sur un autre site ?
Merci aussi Patrick Toulon

@+ Lolote83
 

Lolote83

XLDnaute Barbatruc
Re bonjour Patrick.
J'ai trouvé ce dont tu parles ici https://www.excel-downloads.com/res...-episode-2-dialog-selecteur-dimprimante.1120/
Cependant, ce n'ai pas le choix de l'imprimante qui me pose problème car j'avais d'éja trouvé un code qui me permet de lister toutes les imprimantes. Ici, l'imprimante utilisée est celle par défaut, mais je ne sais pas choisir A4/A3, RS/RV et ou CO/NB pour imprimer mes fichiers contenus dans la listes jointes à l'intérieur du fichier excel.
Comme dis plus haut, si j'utilise le code PageSetup, cela pilote bien l'imprimante et l'onglet excel qui sera imprimé le sera en fonction des paramètres.
VB:
Sub ParamImprimante()
    Application.PrintCommunication = False
    With ActiveSheet.PageSetup
        .Orientation = xlPortrait                   'Portrait
        .PaperSize = xlPaperA4                      'Format A3=xlPaperA3 ou A4=xlPaperA4
        .BlackAndWhite = True                       'Couleur=False ou NoirBlanc=True
        .Zoom = 100                                 'Zoom 141 pour A3
    End With
End Sub
par contre l'imprimante ne garde pas cela en mémoire si j'utilise le code ci-dessous pour imprimer les .PDF ou .DOCX
Code:
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()
    '---------------------------------------------------------------------------------------
    '                           https://excel.developpez.com/faq/?page=Impression#ImprimePDF
    '---------------------------------------------------------------------------------------

    'Permet d'imprimer un fichier dont le chemin est en C2 (Listing) et le fichier en B5
    
    Dim NomFichier As String
    Dim x As Long
    x = FindWindow("XLMAIN", Application.Caption)
    NomFichier = [c2] & [b5]
    ShellExecute x, "print", NomFichier, "", "", 1
End Sub
Merci tout de même, je continue mes recherches .....
@+ Lolote83
 

Phil69970

XLDnaute Barbatruc
Re

Je pense que lorsque tu lances l'impression d'un document qui se trouve sur ton DD à travers excel il passe la main à ton driver d'impression (celui déclaré dans windows) et imprime avec les paramètres du driver.

Au contraire quand tu crée un document que tu exportes au format pdf, doc .... avec excel, il se sert de son "imprimante" celle déclarée dans excel et LA tu peux lui passer tous les parametres que tu veux...

@Phil69970
 

Lolote83

XLDnaute Barbatruc
Re bonjour Phil69970,
Je comprends bien ta réponse
Au contraire quand tu crée un document que tu exportes au format pdf, doc .... avec excel, il se sert de son "imprimante" celle déclarée dans excel et LA tu peux lui passer tous les parametres que tu veux...
mais les fichiers sont déjà au format PDF ou DOCX et sont stockés dans un dossier A-Imprimer. Une autre personne doit alors les imprimer.
J'avais donc imaginer récupérer la liste sur excel des documents à imprimer, leur affecter les paraètres A4/A3, RS/RV et ou CO/NB et lancer en boucle mes impressions.
Il n'y a donc pas d'exportation au format PDF ou DOCX au préalable via excel.
Merci pour cette réponse
@+ Lolote83
 

Phil69970

XLDnaute Barbatruc
Re
mais les fichiers sont déjà au format PDF ou DOCX et sont stockés dans un dossier A-Imprimer. Une autre personne doit alors les imprimer.
Donc on est dans le 1er cas :
lorsque tu lances l'impression d'un document qui se trouve sur ton DD à travers excel il passe la main à ton driver d'impression (celui déclaré dans windows) et imprime avec les paramètres du driver.

@Phil69970
 

Lolote83

XLDnaute Barbatruc
Re bonjour,

Patrick Toulon,
Si j'ai fais appel au forum, c'est que mes connaissances sont certainement plus limitées que les tiennes (notamment Api, Wmi, network) et de fait, j'ai fais appel à la communauté pour une aide. Sache que tu parles bien français comme moi.

Phil69970,
Comme tu les dis :
Je pense que lorsque tu lances l'impression d'un document qui se trouve sur ton DD à travers excel il passe la main à ton driver d'impression (celui déclaré dans windows) et imprime avec les paramètres du driver.
C'est bien la le problème et je n'arrive donc pas à modifier les paramètres du driver

@+ Lolote83
 

Discussions similaires

Statistiques des forums

Discussions
312 164
Messages
2 085 872
Membres
103 007
dernier inscrit
salma_hayek