[Macro] (xlDialogPrinterSetup) pour une série d'impression

Bonjour à tous,

Je cherche à coder une macro afin de lancer une série d'impression automatiquement.

La macro est lancée à partir d'un classeur Excel "tableau principal.xls", elle ouvre successivement d'autres classeurs ("tableau2.xls", "tableau3.xls" ...), et affiche l'aperçu avant impression de certaines feuilles contenu dans ces classeurs.

Il suffit alors à l'utilisateur de cliquer sur "Imprimer" pour lancer l'impression de ce qu'il voit, et ensuite la macro passe automatiquement à la feuille suivant (ou au classeur suivant).

J'aimerai que l'utilisateur n'est qu'une seule fois besoin de configurer l'impression (particulièrement le choix de l'imprimante et de l'impression couleur ou N&B ?).

Tout au début de la marco, j'ai donc mis : Application.Dialogs(xlDialogPrinterSetup).Show

Une fenêtre de dialogue Excel s'ouvre bien, et je peux sélectionner l'imprimante, et configurer l'impression. Mais alors que la sélection de l'imprimante est bien prise en compte, le choix couleur ou N&B n'est pas respecté. L'impression se fait selon le réglage par défaut de l'imprimante, peut importe mes choix de configuration d'impression.

Une idée d'où cela peut venir ?

Bonjour et bienvenue sur le forum bidoubidou,

Tu peux passer par la propriété BlackAndWhite de PageSetup pour imprimer en noir et blanc. Voici un exemple d'utilisation :

Worksheets("Nom_Feuille").PageSetup.BlackAndWhite = True

True voulant dire que l'impression en noir et blanc est active.

Bonjour vba-new, merci pour ta réponse.

J'imagine alors que PageSetup.BlackAndWhite = False configure l'impression en couleur ?

C'est peut-être bien une solution à mon problème (très simple solution en plus, je te remercie )

Cependant, il serait bon que je laisse le choix à l'utilisateur, s'il souhaite imprimer en N&B ou en couleur. Je sais que je pourrai créer ma propre fenêtre de dialogue, poser la question à l'utilisateur et récupérer sa réponse sous forme de variable booléenne par exemple. Mais (xlDialogPrinterSetup) existant déjà, je m'étais dis autant l'utiliser.

Je pensais également à une boîte de dialogue pour récupérer un booléen. Je ne sais pas comment faire avec le xlDialogPrinterSetup

Malheureusement, la solution ne marche pas

Enfait ça ne sont pas des feuilles de calculs que je cherche à imprimer, mais des feuilles graphique. Et l'aide VB d'Excel m'indique que PageSetup.BlackAndWhite ne s'applique qu'à des feuilles de calculs. Après un test, j'obtiens effectivement une erreur.

Merci quand même pour ta réponse vba-new.

D'autres idées ?

salut à vous

salut vba-news, chapeau pour les codes !

suggestion :

installer une seconde fois l'imprimante sur ton PC (menu démarrer imprimantes de Windows) et la paramétrer en NB, , enregistrer la config par défaut et la renommer MonImprimanteNB

ensuite ta macro va se servir de MonImprimanteNB (tu sais faire)

Salut jmd

Merci pour ton idée, mais elle est inapliquable dans mon cas. Les différents utilisateurs que seront amenés à utiliser ma macro utilisent tous une imprimante réseau différente.

debogage pb excel avec vesrion 2019

personne ne peut installer MonImprimanteNB sur leur PC ou sur le réseau ? (admin réseau ? )

quoique ensuite, ta macro va devoir gérer des noms d'imprimantesNB différents selon les réseaux

et si on demandait à l'admin réseau de donner toujours le même nom (DefaultPrinterBW) quelque soit le réseau ?

Ce n'est malheureusement pas possible dans mon cas. C'est un réseau de plus de 300 machines avec une 40ène d'imprimantes réseaux raccordés. L'admin sys ne peux pas si facilement modifier le nom des imprimantes sans conséquences, ni en installer 40 autres en NB.

et si tu installais une imprimante pdf (cutepdf) en défault en NB ?

(ton admin peut le faire de chez lui avec un peu de chance)

ta macro imprime d'abord un pdf en NB

puis balance ce pdf en NB sur l'imprimante par défaut de chaque PC

J'ai finalement utilisé ta solution jmd

On a installé PDFCreator sur toutes les machines. Les utilisateurs le demandaient depuis pas mal de temps, donc c'était l'occassion rêvée.

Cependant, j'ai maintenant un autre problème qui est apparu. Je n'utilise plus de fenetre de dialogue pour que l'utilisateur configure l'impression, puisque par défaut, notre PDF Creator imprime en couleur, et c'est ce que je cherche. Mais le port de l'imprimante (et donc son nom dans Excel) est différent sur chaque PC

Parfois elle s'appelle "PDFCreator sur Ne00:", ou "PDFCreator sur Ne05:" ... le nombre qui suit "Ne" est différent.

Comment coder une fonction standardisé qui imprime sur une imprimante standard que tous les postes possèdent (PDF Creator), mais avec un numéro de port différent ?

-- 07 Avr 2010, 10:27 --

Solution :

For Port = 0 To 9

        Far_Far_Away_Printer = "PDFCreator sur Ne0" & Port & ":"
        On Error Resume Next
        ActivePrinter = Far_Far_Away_Printer

        If ActivePrinter = Far_Far_Away_Printer Then
            Sheets("FeuilleDeCommande").Select
            ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
            Exit For
        End If
Next

ton code marche effectivement, j'en avais besoin et je viens de tomber dessus ^^ sympa ^^

J'avance petit à petit

J'arrive donc maintenant à imprimer tous les documents en PDF, et je les stock dans un repertoire spécifique.

Ensuite il ne reste plus qu'à tous les imprimer. Pour ce faire, j'utilise la libraire shell32.dll et ainsi intéragir avec l'explorer windows depuis ma macro Excel.J'arrive donc à lancer successivement l'impression de tous les fichiers .pdf de mon dossier grace à cette petite fonction :

Sub imprime_tous_pdf_repertoire()

    Dim Fichier As String
    Dim Chemin As String

    Chemin = "C:\temp\"
    Fichier = Dir(Chemin & "*.pdf")
    'MsgBox Fichier
    Do While Fichier <> ""
    'MsgBox Fichier
    ShellExecute 0, "print", Fichier, vbNullString, Chemin, 0&
    Fichier = Dir()
    Loop

End Sub

Il subsiste un dernier problème, le shell lance l'impression sans aucune configuration (c'est à dire avec l'imprimante par défaut de Windows, et les paramètres par défaut de l'imprimante).

Il faudrait une fenetre de dialogue avec l'utilisateur pour qu'il choissise l'imprimante et la configure avant de lancer toutes les impressions.

Des idées ?

où trouver la commande shell pour ouvrir la boîte de dialogue de l'imprimante par défaut ?

genre http://ss64.com/nt/

Bonjour à tous!

Il est vrai que changer le Ne0X me sera utile... Seulement je ne

Dois pas imprimer un fichier pdf mais juste un classeur et mon code comporte tout plein de exécuteExcel4Macro... Bref, je n'arrive pas à introduire ton code dans le mien...

Serait il possible de m'aider?

Le voici tel quel:

Sheets("THEME1").Select
Application.ActivePrinter = _
               "\\MegaCodeDeOuf sur Ne04:"
Range("X9").FormulaLocal = "1.1"
ExecuteExcel4Macro _
            "PRINT(1,,,1,,,,,,,,2,""\MegaCodeDeOuf sur Ne04:"",,TRUE,,FALSE)"
Range("X9:AA9").Select
Range("X9").FormulaLocal = "1.2"
ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"

Et oui! Il est gros, il est compliqué et j'y comprend à peine la moitié!

Please Help me

Amicalement, Sym

Bonjour sym,

Ta macro ne marche pas ? Que se passe-t-il ?

Que veux-tu imprimer dans ton classeur ?

Si tu pouvais joindre un bout de fichier ce serait peut-être plus explicite.

Bonjour,

J'ai exposé mon problème actuel tout a l'heure sur "liste déroulante avec VBA : https://forum.excel-pratique.com/excel/liste-deroulante-avec-vba-t23902.html

Ce que je veux faire c'est imprimer la feuille après chaque changement dans la liste déroulante.. Mais, avant d'avoir lu cette page du forum, je ne m'étais même pas posé la question de "ne pas pouvoir imprimer a partir de chacun des postes"

Mon code est comme ceci (identique pour chacun des thèmes suivants) :

-- 15 Juin 2011, 08:59 --

Sheets("THEME1").Select
Application.ActivePrinter = _
"\\DIMP0036.atlas.edf.fr\I3-2-RI4500-MN-274175 sur Ne04:"
Range("X9").FormulaLocal = "1.1"
ExecuteExcel4Macro _
"PRINT(1,,,1,,,,,,,,2,""\\DIMP0036.atlas.edf.fr\I3-2-RI4500-MN-274175 sur Ne04:"",,TRUE,,FALSE)"
Range("X9:AA9").Select
Range("X9").FormulaLocal = "1.2"
ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"
Range("X9").FormulaLocal = "1.3"
ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"
Range("X9").FormulaLocal = "1.4"
ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"
Rechercher des sujets similaires à "macro xldialogprintersetup serie impression"