Sur quelle ligne porte l'erreur ?
De mon côté, la fonction marche parfaitement donc je ne sais pas quoi dire...
La fonction sert d'une part à éviter l'imbrication de with qui aurait pu, sait-on jamais, être la cause de l'erreur et également à avoir une petite fonction prête à l'emploi. Il suffit de saisir un mot de l'imprimante en argument pour qu'elle devienne imprimante par défaut.
Je pense qu'il faut regarder du côté de shell.application. Il existe une fonction ShellExecute facilement trouvable sur Internet qui permet d'imprimer sans problème.
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 Imprimer3()
Dim App As Long, i As Long
DefinirImprimante "Print to PDF"
App = FindWindow("XLMAIN", Application.Caption)
For i = 1 To 2
ShellExecute App, "print", Cells(i, 1), "", "", 1
Next i
DefinirImprimante "MG5300"
End Sub
Function DefinirImprimante(MotCle$) 'définit imprimante selon mot clé
With CreateObject("WScript.Network")
For Each pconn In .EnumPrinterConnections
If pconn Like "*" & MotCle & "*" Then .SetDefaultPrinter pconn: exit function
Next pconn
end with
End Function
Cdlt,