Choix imprimante en VB

Choix imprimante en VB - VB/VBA/VBS - Programmation

Marsh Posté le 06-03-2006 à 09:21:19    

Bonjour,
 
 
Je cherche a installer une UserForm avec une combobox listant les imprimantes disponnibles.
J'ai trouvé le code suivant mais je n'arrive pas a le mettre en application.
 
http://vb.developpez.com/faq/?page=Systeme#selectimp
 
Ce code est il fait pour Visual Basic 6.3  d'Excel 2003?
Si oui, quelle est la procédure?
 
Merci !  

Reply

Marsh Posté le 06-03-2006 à 09:21:19   

Reply

Marsh Posté le 06-03-2006 à 16:27:06    

Ou une autre solution si vous avez!

Reply

Marsh Posté le 06-03-2006 à 17:20:56    

Si tu expliquais les problèmes que tu rencontres au lieu de simplement dire que ça ne marche pas.

Reply

Marsh Posté le 06-03-2006 à 17:35:08    

En fait, je ne comprends pas la procédure suivante :
 
 
***************
Cette méthode consiste à affecter à l'objet Printer le nom d'une des imprimantes installées. Copiez ce code source dans un module standard.
 

Code :
  1. vbPrivate Declare Function GetProfileString Lib "kernel32" Alias "GetProfileStringA" _
  2.                                           (ByVal lpAppName As String, ByVal lpKeyName As String, _
  3.                                           ByVal lpDefault As String, ByVal lpReturnedString As String, _
  4.                                           ByVal nSize As Long) As Long
  5. 'Renvoie l'imprimante par défaut
  6. Public Function ImprimanteParDefaut() As String
  7.     Dim def As String, di As Long
  8.  
  9.     def = String(128, 0)
  10.     di = GetProfileString("WINDOWS", "DEVICE", "", def, 127)
  11.     If di Then ImprimanteParDefaut = Left$(def, di - 1)
  12. End Function
  13. 'Sélectionne une imprimante
  14. Public Function SelectionneImprimante(ByVal UneImprimante As String) As Boolean
  15.     Dim impr As Printer, ok As Boolean
  16.  
  17.     'Il faut chercher dans la boucle l'imprimante correspondante
  18.     'et l'affecter à Printer
  19.  
  20.     For Each impr In Printers
  21.         If impr.DeviceName = UneImprimante Then
  22.             Set Printer = impr
  23.             ok = True
  24.             Exit For
  25.         End If
  26.     Next
  27.  
  28.     SelectionneImprimante = ok
  29. End Function


 
 
La fonction SelectionneImprimante sélectionne l'imprimante dont le nom est passé en paramètre. Maintenant placez un bouton de commande et une ComboBox sur une form et placez le code ci-dessous dans le module de la form.
 

Code :
  1. vbPrivate Sub Form_Load()
  2.     Dim ImpParDefaut As String, IdxImpParDefaut As Integer
  3.     Dim impr As Printer, i As Long, pos As Integer
  4.      
  5.     'Récupère le nom de l'imprimante par défaut
  6.     ImpParDefaut = ImprimanteParDefaut()
  7.  
  8.     'Enlève les informations qui suivent le nom de l'imprimante
  9.     pos = InStr(1, ImpParDefaut, ",", vbTextCompare)
  10.     If pos > 0 Then ImpParDefaut = Left(ImpParDefaut, pos - 1)
  11.  
  12.     'Ajoute dans la combo box les imprimantes
  13.     IdxImpParDefaut = 0
  14.     i = 0
  15.     For Each impr In Printers
  16.         Combo1.AddItem impr.DeviceName
  17.         'Regarde si c'est celle par défaut et si oui retient son index
  18.         If impr.DeviceName = ImpParDefaut Then IdxImpParDefaut = i
  19.         i = i + 1
  20.     Next
  21.     'Sélectionne dans la combo l'imprimante par défaut
  22.     If Combo1.ListCount > 0 Then Combo1.ListIndex = IdxImpParDefaut
  23. End Sub
  24. Private Sub Command1_Click()
  25.     MsgBox "Avant : " & Printer.DeviceName
  26.     SelectionneImprimante Combo1.Text
  27.     MsgBox "Après : " & Printer.DeviceName
  28.  
  29. End Sub


 
La ComboBox contient la liste des imprimantes installées. Au chargement de la form, l'imprimante par défaut est sélectionnée dans la combo.
 
 
********************
 
Je suis débutant en Visual Basic, et je ne sais pas si le code ci-dessus est applicable à VB 6.3 (version Excel)
 
Si ce code est compatible, je n'arrive pas a le faire fonctionner!  Comment faire?

Reply

Marsh Posté le 06-03-2006 à 22:35:32    

Bonsoir,  
 
L'objet Printer n'est pas reconnu en VBA Excel. Application.ActivePrinter renvoie l'imprimante active (par défaut).
Pour obtenir la liste des imprimantes installées, je crois qu'il n'y pas d'autre solution que de passer par l'API et une solution existe sur ce site:
   http://frederic.sigonneau.free.fr/ [...] nibles.txt
 
Bon courage
Epéna

Reply

Marsh Posté le 07-03-2006 à 08:55:36    

J'ai trouvé ce code sinon mais il est envoyé dans une Msgbox
Je n'arrive pas a le renvoyer dans une ComboBox, est-ce possible ?
 
>> Modifier l'imprimante par défaut de windows  
 

 
 
Const HWND_BROADCAST = &HFFFF
Const WM_WININICHANGE = &H1A
 
Private Declare Function GetPrivateProfileString _
Lib "Kernel32" Alias "GetPrivateProfileStringA" _
(ByVal lpApplicationName As String, ByVal lpKeyName _
As Any, ByVal lpDefault As String, _
ByVal lpReturnedString As String, ByVal nSize _
As Long, ByVal lpFileName As String) As Long
 
Private Declare Function GetWindowsDirectory _
Lib "Kernel32" Alias "GetWindowsDirectoryA" _
  (ByVal lpBuffer As String, ByVal nSize _
  As Long) As Long
 
Private Declare Function SendMessage Lib _
"user32" Alias "SendMessageA" _
(ByVal hWnd As Long, ByVal wMsg As Long, _
ByVal wParam As Integer, ByVal lParam As Any) _
As Long
 
Private Declare Function WritePrivateProfileString _
Lib "Kernel32" Alias "WritePrivateProfileStringA" _
(ByVal lpApplicationName As String, ByVal _
lpKeyName As Any, ByVal lpString As Any, _
ByVal lpFileName As String) As Long
 
Dim Chemin As String
Dim NC As Long
Dim Ret As String
 
Sub ChangeImprimanteParDéfaut(Nom As String)
  Chemin = String(260, 0)
  Chemin = Left$(Chemin, GetWindowsDirectory(Chemin, Len(Chemin))) + "\win.ini"
  Ret = String(255, 0)
  NC = GetPrivateProfileString("Devices", Nom, "", Ret, 255, Chemin)
  Ret = Left(Ret, NC)
  WritePrivateProfileString "windows", "device", Nom & "," & Ret, Chemin
  SendMessage HWND_BROADCAST, WM_WININICHANGE, 0, "windows"
End Sub
 
Function ImprimanteParDéfaut() As String
  Chemin = String(260, 0)
  Chemin = Left$(Chemin, GetWindowsDirectory(Chemin, Len(Chemin))) + "\win.ini"
  Ret = String(255, 0)
  NC = GetPrivateProfileString("windows", "device", "", Ret, 255, Chemin)
  Ret = Left(Ret, NC)
  NC = InStr(Ret, "," )
  ImprimanteParDéfaut = Left(Ret, NC - 1)
 
End Function
 
'------------------------------
Sub PourLancerLaProcédureImPrimanteParDéfaut()
 
'HP LaserJet 3200 Series PS = Nom de l'imprimante apparaissant
' dans la fenêtre " imprimante" du panneau de configuration
 
ChangeImprimanteParDéfaut ("HP LaserJet 3200 Series PS" )
 
End Sub
'------------------------------  

Reply

Marsh Posté le 08-03-2006 à 07:26:07    

Bonjour,
Le code suivant va lister les imprimantes installées sur une ComboBox1 :
 
Private Declare Function EnumPrintersA Lib "Winspool.drv" _
  (ByVal flags As Long, ByVal name As String, ByVal Level As Long, _
  pPrinterEnum As Long, ByVal cdBuf As Long, _
  pcbNeeded As Long, pcReturned As Long) As Long
 
Private Declare Function lstrlenA Lib "Kernel32" _
  (ByVal lpString As Any) As Long
 
Private Declare Function lstrcpyA Lib "Kernel32" _
  (ByVal lpString1 As String, ByVal lpString2 As Long) As Long
 
Private Sub UserForm_Initialize()
  Dim PrinterEnum() As Long, Impr() As String
  Dim Needed As Long, Returned As Long, I As Integer
 
  EnumPrintersA 2, vbNullString, 5, 0, 0, Needed, 0
  ReDim PrinterEnum(Needed / 4)
  EnumPrintersA 2, vbNullString, 5, PrinterEnum(0), _
    Needed, Needed, Returned
  ReDim Impr(1 To Returned)
  For I = 1 To Returned
    Impr(I) = Space$(lstrlenA(PrinterEnum(I * 5 - 5)))
    lstrcpyA Impr(I), PrinterEnum(I * 5 - 5)
  Next I
ComboBox1.List = Impr
End Sub
 
Bon courage
 
Epéna

Reply

Marsh Posté le 09-03-2006 à 23:55:43    

c'est du Vba et non du Vb......1000 excuses


Message édité par regis1973 le 10-03-2006 à 08:33:14
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed