[VBA][Excel 2016] Changement automatique d'imprimante (pour Denis !!!)

Le
ThierryP
Bonjour le forum,

Il y a quelque temps, l'incontournable Denis (MichD) m'avait concocté =
une macro pour changer automatiquement d'imprimante, avec Excel 2013 et Win=
dows 7.

Aujourd'hui, me voici sous Windows 10 et Excel 2016 et bien sûr, cette=
macro ne fonctionne plus !

Voici le code :

Appel de la macro :

Private Sub Worksheet_Activate()
Travaux.Hide
ActiveSheet.ScrollArea = "A1:Y" & ActiveSheet.Range("A1000").End(xlUp).Ro=
w + 2
'- Changement Imprimante
SonNom = "\VMSERVTS01Copieur_Couleur"
ImprimanteDésirée = Mon_Imprimante(SonNom)
ChangeImprimanteParDéfaut ImprimanteDésirée
End Sub

Sub ChangeImprimanteParDéfaut(Imprimante)
Dim WshNetwork, oPrinters, I, DefPrinter
DefPrinter = Application.ActivePrinter
Set WshNetwork = CreateObject("WScript.Network")
Set oPrinters = WshNetwork.EnumPrinterConnections
For I = 0 To oPrinters.Count - 1 Step 1
If InStr(1, Imprimante, oPrinters.Item(I + 1), vbTextCompare) = 1 The=
n
WshNetwork.SetDefaultPrinter oPrinters.Item(I + 1)
Exit Sub
End If
Next
End Sub

Function Mon_Imprimante(SonNom As String)
Dim A As Integer, Temp As String
Dim objDictionary As Object, strComputer As String
Dim objWMIService As Object, colPrinters As Object
Dim objprinter As Object
Set objDictionary = CreateObject("Scripting.Dictionary")
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\" & strComputer & "ootcimv2"=
)
Set colPrinters = objWMIService.ExecQuery _
("Select * from Win32_Printer")
For Each objprinter In colPrinters
Temp = objprinter.Name & " sur " & objprinter.PortName
If InStr(1, Temp, SonNom, vbTextCompare) > 0 Then
Mon_Imprimante = Temp
Exit For
End If
Next
End Function

La fonction ne renvoie rien, donc la suite plante.

Donc si quelqu'un connaît la syntaxe pour W10 et Excel2016, je suis pr=
eneur !

Merci d'avance,

ThierryP
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
MichD
Le #26520107
Bonjour,
J'ai fait un test rapide le la fonction, elle fonctionne correctement
même sous Windows 10, 64 bits.
Vérifie ces lignes dans ton code :
SonNom = "\VMSERVTS01Copieur_Couleur"
ImprimanteDésirée = Mon_Imprimante(SonNom)
Est-ce que la variable "SonNom" contient un nom d'imprimante présent
dans Windows 10? Pour ce faire, saisis "Imprimante" dans la zone de
recherche près du bouton démarrer, la fenêtre "Imprimantes et Scanneurs"
s'affichera, là, où la liste des noms des imprimantes installées
disponibles.
Si la variable n'est pas bien renseignée, il est normal que la fonction
retourne "".
MichD

Le 26/06/19 à 05:16, ThierryP a écrit :
Bonjour le forum,
Il y a quelque temps, l'incontournable Denis (MichD) m'avait concocté une macro pour changer automatiquement d'imprimante, avec Excel 2013 et Windows 7.
Aujourd'hui, me voici sous Windows 10 et Excel 2016 et bien sûr, cette macro ne fonctionne plus !
Voici le code :
Appel de la macro :
Private Sub Worksheet_Activate()
Travaux.Hide
ActiveSheet.ScrollArea = "A1:Y" & ActiveSheet.Range("A1000").End(xlUp).Row + 2
'---------- Changement Imprimante ---------------
SonNom = "\VMSERVTS01Copieur_Couleur"
ImprimanteDésirée = Mon_Imprimante(SonNom)
ChangeImprimanteParDéfaut ImprimanteDésirée
End Sub
Sub ChangeImprimanteParDéfaut(Imprimante)
Dim WshNetwork, oPrinters, I, DefPrinter
DefPrinter = Application.ActivePrinter
Set WshNetwork = CreateObject("WScript.Network")
Set oPrinters = WshNetwork.EnumPrinterConnections
For I = 0 To oPrinters.Count - 1 Step 1
If InStr(1, Imprimante, oPrinters.Item(I + 1), vbTextCompare) = 1 Then
WshNetwork.SetDefaultPrinter oPrinters.Item(I + 1)
Exit Sub
End If
Next
End Sub
Function Mon_Imprimante(SonNom As String)
Dim A As Integer, Temp As String
Dim objDictionary As Object, strComputer As String
Dim objWMIService As Object, colPrinters As Object
Dim objprinter As Object
Set objDictionary = CreateObject("Scripting.Dictionary")
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\" & strComputer & "rootcimv2")
Set colPrinters = objWMIService.ExecQuery _
("Select * from Win32_Printer")
For Each objprinter In colPrinters
Temp = objprinter.Name & " sur " & objprinter.PortName
If InStr(1, Temp, SonNom, vbTextCompare) > 0 Then
Mon_Imprimante = Temp
Exit For
End If
Next
End Function
La fonction ne renvoie rien, donc la suite plante.
Donc si quelqu'un connaît la syntaxe pour W10 et Excel2016, je suis preneur !
Merci d'avance,
ThierryP
MichD
Le #26520106
Dans la fenêtre "Imprimantes et Scanneurs", je viens de voir qu'il y a
une option "Laisser Windows choisir mon imprimante par défaut". Si cette
case est cochée, peut-on modifier par code l'imprimante par défaut
différent de celle que Windows a identifiée? Cette option n'existait pas
sous les versions antérieures de Windows. Comme je n'utilise plus Excel
beaucoup, je n'ai pas l'occasion de tester ces choses-là!
MichD
ThierryP
Le #26520113
Bonjour Denis,
Pour quelqu'un qui souhaitait prendre un peu de recul, je vois que tu es to ujours aussi présent :-), tant mieux pour nous !!!
Cette option est bien décochée sur mon poste.
ThierryP
Le mercredi 26 juin 2019 13:30:28 UTC+2, MichD a écrit :
Dans la fenêtre "Imprimantes et Scanneurs", je viens de voir qu'il y a
une option "Laisser Windows choisir mon imprimante par défaut". Si c ette
case est cochée, peut-on modifier par code l'imprimante par déf aut
différent de celle que Windows a identifiée? Cette option n'exi stait pas
sous les versions antérieures de Windows. Comme je n'utilise plus Ex cel
beaucoup, je n'ai pas l'occasion de tester ces choses-là!
MichD
MichD
Le #26520115
Et la fonction, ne fonctionne toujours pas?
MichD
Le 26/06/19 à 08:48, ThierryP a écrit :
Bonjour Denis,
Pour quelqu'un qui souhaitait prendre un peu de recul, je vois que tu es toujours aussi présent :-), tant mieux pour nous !!!
Cette option est bien décochée sur mon poste.
ThierryP
Le mercredi 26 juin 2019 13:30:28 UTC+2, MichD a écrit :
Dans la fenêtre "Imprimantes et Scanneurs", je viens de voir qu'il y a
une option "Laisser Windows choisir mon imprimante par défaut". Si cette
case est cochée, peut-on modifier par code l'imprimante par défaut
différent de celle que Windows a identifiée? Cette option n'existait pas
sous les versions antérieures de Windows. Comme je n'utilise plus Excel
beaucoup, je n'ai pas l'occasion de tester ces choses-là!
MichD

ThierryP
Le #26520168
Si si , je te rassure, tout fonctionne maintenant !
ThierryP
Le mercredi 26 juin 2019 15:03:14 UTC+2, MichD a écrit :
Et la fonction, ne fonctionne toujours pas?
MichD
Publicité
Poster une réponse
Anonyme