Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Récupérer l'imprimate active de VBE

7 réponses
Avatar
Gadget
Bonjour.
Comment récupérer le nom de l'imprimante active de VBE, celle sur laquelle
s'imprimera les UFs ? Je sais changer celle-ci, avec
CreateObject("Wscript.Network").SetDefaultPrinter, mais je ne connais pas le
nom de la propriété qui pourrait s'appeler .defaultprinter (mais c'est pas
ça...).
D'ailleurs, ou puis-je trouver en ligne une liste de ces utilitaires bien
utiles (ce qui est la moindre des choses pour un utilitaire...), avec leurs
arguments ?
Merci à tous.

7 réponses

Avatar
Jacques93
Bonjour Gadget,

Avec WMI ?

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!" _
& strComputer & "rootcimv2")
Set colInstalledPrinters = objWMIService.ExecQuery _
("Select * from Win32_Printer Where Default = True")
For Each objPrinter In colInstalledPrinters
MsgBox objPrinter.Name
Next

plus de détails :

<http://msdn.microsoft.com/en-us/library/aa394363.aspx>

NB : La propriété 'Default' n'est pas disponible sous NT4 et W2K

Gadget a écrit :
Bonjour.
Comment récupérer le nom de l'imprimante active de VBE, celle sur laquelle
s'imprimera les UFs ? Je sais changer celle-ci, avec
CreateObject("Wscript.Network").SetDefaultPrinter, mais je ne connais pas le
nom de la propriété qui pourrait s'appeler .defaultprinter (mais c'est pas
ça...).
D'ailleurs, ou puis-je trouver en ligne une liste de ces utilitaires bien
utiles (ce qui est la moindre des choses pour un utilitaire...), avec leurs
arguments ?
Merci à tous.






--

Cordialement,

Jacques.
Avatar
Gadget
Merci, ça marche.

"Jacques93" a écrit dans le message de news:
%
Bonjour Gadget,

Avec WMI ?

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!" _
& strComputer & "rootcimv2")
Set colInstalledPrinters = objWMIService.ExecQuery _
("Select * from Win32_Printer Where Default = True")
For Each objPrinter In colInstalledPrinters
MsgBox objPrinter.Name
Next

plus de détails :

<http://msdn.microsoft.com/en-us/library/aa394363.aspx>

NB : La propriété 'Default' n'est pas disponible sous NT4 et W2K

Gadget a écrit :
Bonjour.
Comment récupérer le nom de l'imprimante active de VBE, celle sur
laquelle s'imprimera les UFs ? Je sais changer celle-ci, avec
CreateObject("Wscript.Network").SetDefaultPrinter, mais je ne connais pas
le nom de la propriété qui pourrait s'appeler .defaultprinter (mais c'est
pas ça...).
D'ailleurs, ou puis-je trouver en ligne une liste de ces utilitaires bien
utiles (ce qui est la moindre des choses pour un utilitaire...), avec
leurs arguments ?
Merci à tous.






--

Cordialement,

Jacques.


Avatar
Jacques93
Merci du retour. Ou avec l'API :

Private Const ERROR_INSUFFICIENT_BUFFER = 122&
Private Declare Function GetDefaultPrinter Lib "winspool.drv" Alias _
"GetDefaultPrinterA" (ByVal pszBuffer As String, _
ByRef pcchBuffer As Long) As Long

Private Sub CommandButton1_Click()
Dim lResult As Long, BufLen As Long
Dim PrinterName As String

BufLen = 0
' Récupère la taille nécessaire pour le nom
lResult = GetDefaultPrinter(PrinterName, BufLen)
' Alloue le buffer pour le nom
PrinterName = String(BufLen, 0)
lResult = GetDefaultPrinter(PrinterName, BufLen)
' Supprime le zéro binaire de fin
PrinterName = Left(PrinterName, InStr(PrinterName, Chr$(0)) - 1)
MsgBox PrinterName
End Sub

Gadget a écrit :
Merci, ça marche.





--

Cordialement,

Jacques.
Avatar
Gadget
Merci pour ça aussi.
Et où peut-on trouver la liste de ces appels WMI, API et autres, avec leur
fonction, leur syntaxe sous VBA et leurs paramètres, le tout en ligne ?

"Jacques93" a écrit dans le message de news:
%
Merci du retour. Ou avec l'API :

Private Const ERROR_INSUFFICIENT_BUFFER = 122&
Private Declare Function GetDefaultPrinter Lib "winspool.drv" Alias _
"GetDefaultPrinterA" (ByVal pszBuffer As String, _
ByRef pcchBuffer As Long) As Long

Private Sub CommandButton1_Click()
Dim lResult As Long, BufLen As Long
Dim PrinterName As String

BufLen = 0
' Récupère la taille nécessaire pour le nom
lResult = GetDefaultPrinter(PrinterName, BufLen)
' Alloue le buffer pour le nom
PrinterName = String(BufLen, 0)
lResult = GetDefaultPrinter(PrinterName, BufLen)
' Supprime le zéro binaire de fin
PrinterName = Left(PrinterName, InStr(PrinterName, Chr$(0)) - 1)
MsgBox PrinterName
End Sub

Gadget a écrit :
Merci, ça marche.





--

Cordialement,

Jacques.


Avatar
Jacques93
Pour WMI, sur MSDN :

<http://msdn.microsoft.com/en-us/library/aa394582(VS.85).aspx>

tu ouvre l'arborescence de gauche, attention y'a du monde
et comme les Api's sont également pléthoriques tu peux chercher sur
MSDN, mais il faut savoir quoi chercher ...

Pour les plus courantes, il y par exemple :

<http://allapi.mentalis.org/agnet/apiguide.shtml>

Bonne lecture :-)

Gadget a écrit :
Merci pour ça aussi.
Et où peut-on trouver la liste de ces appels WMI, API et autres, avec leur
fonction, leur syntaxe sous VBA et leurs paramètres, le tout en ligne ?




--

Cordialement,

Jacques.
Avatar
Modeste
Bonsour® Gadget avec ferveur ;o))) vous nous disiez :
Comment récupérer le nom de l'imprimante active de VBE, celle sur
laquelle s'imprimera les UFs ?



MsgBox Application.ActivePrinter

pour manipuler les imprimantes installées sur ton poste

Sub Change_printer()
printerold = Application.ActivePrinter
MsgBox "L'imprimante active actuelle est : " & " >>>>> " & printerold

dlganswer = Application.Dialogs(xlDialogPrinterSetup).Show
If dlganswer = True Then
'------ ceci n'est qu'une seule instruction
reponse = MsgBox("L'imprimante active était : " _
& Chr(10) & " ====> " & printerold _
& Chr(10) & " elle sera maintenant : " _
& Chr(10) & " ====> " & Application.ActivePrinter _
& Chr(10) & "Voulez vous confirmer ?", _
vbQuestion + vbYesNo, _
"Changement d'imprimante")
'------
If reponse = vbYes Then
MsgBox "L'imprimante active actuelle devient : " _
& Chr(10) & " ====> "& Application.ActivePrinter
Exit Sub
End If
Else
Application.ActivePrinter = printerold
MsgBox "L'imprimante active reste : " _
& Chr(10) & " ====> "& printerold
End If
End Sub





--
--
@+
;o)))
Avatar
Jacques93
Bonjour Modeste,

Effectivement, imprimante VBE ...
Avec WMI ou l'API, cela change l'imprimante défaut du système.

Mais difficile de mixer les deux : Applcation.ActivePrinter inclut le
nom du port.

Modeste a écrit :
Bonsour® Gadget avec ferveur ;o))) vous nous disiez :
Comment récupérer le nom de l'imprimante active de VBE, celle sur
laquelle s'imprimera les UFs ?



MsgBox Application.ActivePrinter

pour manipuler les imprimantes installées sur ton poste

Sub Change_printer()
printerold = Application.ActivePrinter
MsgBox "L'imprimante active actuelle est : " & " >>>>> " & printerold

dlganswer = Application.Dialogs(xlDialogPrinterSetup).Show
If dlganswer = True Then
'------ ceci n'est qu'une seule instruction
reponse = MsgBox("L'imprimante active était : " _
& Chr(10) & " ====> " & printerold _
& Chr(10) & " elle sera maintenant : " _
& Chr(10) & " ====> " & Application.ActivePrinter _
& Chr(10) & "Voulez vous confirmer ?", _
vbQuestion + vbYesNo, _
"Changement d'imprimante")
'------
If reponse = vbYes Then
MsgBox "L'imprimante active actuelle devient : " _
& Chr(10) & " ====> "& Application.ActivePrinter
Exit Sub
End If
Else
Application.ActivePrinter = printerold
MsgBox "L'imprimante active reste : " _
& Chr(10) & " ====> "& printerold
End If
End Sub









--

Cordialement,

Jacques.