Bonjour à tous,
Cela fait plusieurs jours que je butte sur ce problème de programmation et je suis sure que au moins une personne du forum va me permettre de débloquer la situation et ouvrir de nouvelles perspectives pour nombreux d’entre nous.

Je travaille sous Excel 2016 MSO Office 365 ProPlus et tente de réaliser un programme de gestion de base de données qui sera utilisée sur le site sur lequel je travaille. La difficulté est que le site est étendu et donc il y a plusieurs imprimantes en réseau qui sont, la plupart des fois, paramétrées en N/B. Le programme sur lequel je travaille permet à différents utilisateurs d’imprimer des fiches environnementales en fonction de données enregistrées dans une BDD. Ces fiches doivent être impérativement imprimées en couleurs et nous ne souhaitons pas que les utilisateurs aient à changer manuellement les paramètres de leur imprimante. J’ai testé plusieurs solutions et je n’arrive pas à récupérer (et afficher dans une userform) et modifier les paramètres des imprimantes.

Je ne souhaite pas passer par la fenêtre « Application.Dialogs(xlDialogPrinterSetup).Show » (instruction utilisée si l’utilisateur souhaite changer d’imprimante) ni utiliser des « sendkeys » et la fonction « ActiveSheet.PageSetup.BlackAndWhite » n’intervient que sur le paramétrage de la feuille et non sur les paramètres de l’imprimante.
De plus l’enregistreur de macro n’enregistre que le lancement de l’impression et rien correspondant au passage de paramètre d’impression N/B à couleur.

J’ai aussi essayé le bout de code suivant (pour tester) qui me donne toujours le même résultat que l'imprimante couleur soit paramétrée en N/B ou en Couleur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
     ImprActive = Application.ActivePrinter
     On Error Resume Next
     strComputer = "."
     Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
     Set colItems = _
     objWMIService.ExecQuery("Select * from Win32_PrinterConfiguration", , 48)
     For Each objItem In colItems
         longImprim = Len(objItem.Name)
         ImprActiveb = Left(Application.ActivePrinter, longImprim)
         If objItem.Name = ImprActiveb Then
              Select Case objItem.Color
                   Case 1: NBouCouleur = "Couleur"
                   Case 2: NBouCouleur = "N&B"
              End Select
         End If
     Next
Je sens que je ne suis pas loin de la solution et personne dans mon entourage, pas même le service info de mon entreprise, n'a pu me venir en aide. J'ai trouvé de nombreux forum avec ce type de requête mais aucun ne nous a permis de trouver une solution.
Je remercie d'avance toutes les personnes qui pourrons apporter une réponse qui, j'en suis sûre, aidera de nombreux programmateurs en herbe.