salut
non c pas obligatoire que l'index 0 est celui de l'imprimante par defaut
bon so tu veux voici un code qui j'espére t'aide :
dans un module :
' API Windows Function
Private Declare Function GetProfileString Lib "kernel32" Alias _
"GetProfileStringA" (ByVal lpAppName As String, _
ByVal lpKeyName As String, ByVal lpDefault As String, _
ByVal lpReturnedString As String, _
ByVal nSize As Long) As Long
Public Function GetDefaultPrinter() As Printer
'---------------------------------------------------------------
' cette fonction determine l'imprimante par defaut
'---------------------------------------------------------------
Dim strBuffer As String * 254
Dim lngRetValue As Long
Dim strDefaultPrinter As String
Dim strlistDefaultPrinter() As String
Dim objPrinter As Printer
' Information sur l'imprimante par defaut
lngRetValue = GetProfileString("windows", "device", ",,,", _
strBuffer, 254)
strDefaultPrinter = Left(strBuffer, InStr(strBuffer, Chr(0)) - 1)
strlistDefaultPrinter = Split(strDefaultPrinter, ",")
For Each objPrinter In Printers
If objPrinter.DeviceName = strlistDefaultPrinter(0) Then
' succes !
Exit For
End If
Next
' si pas d'imprimante
If objPrinter.DeviceName <> strlistDefaultPrinter(0) Then
Set objPrinter = Nothing
End If
Set GetDefaultPrinter = objPrinter
End Function
Pour tester crée une forme et écris ces quelque ligne pour voir le resultat :
Private Sub Form_Load()
Dim objPrinter As Printer
Set objPrinter = GetDefaultPrinter()
MsgBox "L'imprimante par defaut est: " + objPrinter.DeviceName
MsgBox "Le driver est : " + objPrinter.DriverName
MsgBox "Le port est : " + objPrinter.Port
Set objPrinter = Nothing
End
End Sub