Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1701 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Choix imprimante en VB

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Choix imprimante en VB

n°1319206
juans
Posté le 06-03-2006 à 09:21:19  profilanswer
 

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 !  

mood
Publicité
Posté le 06-03-2006 à 09:21:19  profilanswer
 

n°1319572
juans
Posté le 06-03-2006 à 16:27:06  profilanswer
 

Ou une autre solution si vous avez!

n°1319644
tegu
Posté le 06-03-2006 à 17:20:56  profilanswer
 

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

n°1319666
juans
Posté le 06-03-2006 à 17:35:08  profilanswer
 

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?

n°1319837
Epena
Posté le 06-03-2006 à 22:35:32  profilanswer
 

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

n°1319912
juans
Posté le 07-03-2006 à 08:55:36  profilanswer
 

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
'------------------------------  

n°1320685
Epena
Posté le 08-03-2006 à 07:26:07  profilanswer
 

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

n°1322408
regis1973
Posté le 09-03-2006 à 23:55:43  profilanswer
 

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


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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Choix imprimante en VB

 

Sujets relatifs
[général] choix d'un langage pour un traitement de texte simplecheckbox(choix multiple)
Choix de la taille de la police avec imagestringLimiter le choix de SET a quelques caracteres
Formulaire à choix multiple (PHP/SQL)Choix d'un langage
Atterir sur une feuille après choix ds combo box d'un userformChoix imprimante sous JASPER
[VBA PPT2003] Fonction FileDialog(msoFileDialogSaveAs) choix du filter 
Plus de sujets relatifs à : Choix imprimante en VB


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR