Imprimer depuis un module VBA
RésoluBonjour à tous,
J'ai créé un classeur Excel dans lequel j'ai un module Vba pour l'impression. Ce classeur est à la disposition de plusieurs dizaines d'utilisateurs. Il fonctionne très bien et il est apprécié de tous. Cependant on me demande de l'améliorer en permettant de choisir l'imprimante (dans le cas ou plusieurs imprimantes sont reliées à l'ordinateur) ou de choisir la qualité d'impression. Pour cela je souhaiterais que dans ma macro impression ci-dessous faire appel et afficher la boîte de dialogue «Imprimer» mais je n'y parviens pas !
Sub ImpressionTableau()
Dim p As Integer
'Application.ScreenUpdating = False ' Bloque le rafraîchissement de l'écran.
'Application.EnableEvents = False ' Arrêt de la scrutation.
If Sheets("Bordereau").Range("A28").Value = "" Then ' Test si la 1ere cellule utilisée, A28.
MsgBox ("Le Tableau n'a pas été rempli !" & vbCrLf & " " & vbCrLf & "Il n'y a donc rien à imprimer."), vbCritical, "Fédération Trucmuche"
Exit Sub
End If
'Définit la zone complète
Sheets("Tableau").PageSetup.PrintArea = "$A$1:$N$235" ' Partie de la feuille utilisée.
p = Nb_LigneBdx ' Saut à la fonction Nb_LigneBdx
p = Nb_PagesBdx(p) ' Saut à la fonction Nb_PagesBdxN2
With Sheets("Tableau")
.Visible = True
.PrintOut from:=1, To:=p
.Visible = False
End With
Application.ScreenUpdating = True ' Rétablis le rafraîchissement de l'écran.
Application.EnableEvents = True ' Remise en service de la scrutation.
End Sub
' Calcule et renvois le N° de la dernière ligne non vide.
Function Nb_LigneBdx() As Integer
Dim I As Integer
For I = 28 To 235
If Sheets("Tableau").Range("A" & I).Value = "" Then Exit For ' Test la première cellule vide de la colonne A.
Next I
Nb_LigneBdx = I - 1
End Function
' Calcule et renvois le Nb de page.
Function Nb_PagesBdx(Lignes As Integer) As Integer
Select Case Lignes
Case 1 To 58: Nb_PagesBdx = 1
Case 59 To 110: Nb_PagesBdx = 2
Case 111 To 162: Nb_PagesBdx = 3
Case 163 To 214: Nb_PagesBdx = 4
Case Is > 214: Nb_PagesBdx = 5
End Select
End Function
Indépendamment de cette modification le classeur et l'impression fonctionnent très bien.
Pouvez-vous m'aider ?
D'avance merci.
Mistral
37 réponses
Le problème porte sur l'affichage de la boîte de dialogue Imprimer via une macro VBA afin de choisir l'imprimante et la qualité d'impression lorsque plusieurs périphériques sont connectés. Des réponses recommandent d'abandonner l'impression silencieuse et d'utiliser le dialogue natif via Application.Dialogs(xlDialogPrint).Show pour laisser l'utilisateur régler les options comme le choix de l'imprimante et les paramètres couleur. La solution testée consiste à remplacer le PrintOut par l'ouverture du dialogue d'impression et, si nécessaire, à ajuster les paramètres directement dans le code afin d'éviter les impressions non désirées. Des échanges indiquent aussi qu'il peut être utile de vérifier les paramètres d'impression manuels et de tester pas à pas la macro pour confirmer que la sélection de l'imprimante et les modes couleur fonctionnent.
-
Bonjour Le Pingou,
Les tests que j'ai fait chez moi se sont bien déroulés, je peux changer la qualité d'impression sans problème. Je dois encore contrôler le choix de l'imprimante sur un autre ordinateur, ou il y a plusieurs imprimantes, mais je pense que ça marchera car s'était déjà bon avant.
Je vais laissé le sujet ouvert quelque temps encore et, si tu le permet, je reviendrais vers toi en cas de problème.
En attendant un grand merci à toi pour ton aide et le temps que tu y a consacré.
Cordialement.
Mistral -
Re,
A permière vue semble semble correcte. MERCI!!!
Je vais pousser tous mes tests pour verifier le bon, fonctionnenement.
Je te eins au courant.
Cordialement.
Mistral -
Bonjour,
Le bloc `With' avec l'instruction ''If ` qui fonctionne, j'ai testé :With Sheets("Tableau") .Visible = True .Activate ' ***** définir configuration imprimante If Application.Dialogs(Excel.XlBuiltInDialog.xlDialogPrinterSetup).Show = True Then .PrintOut from:=1, To:=p ', ActivePrinter:=Nom End If .Visible = False 'A remettre dans la version difinitive. End With -
Effectivement il s'agit de supprimer l'ordre d'impression et rien de plus.
Il est bien evident que si on veur choisir une imprimante ou une qualité d'impression il faudra passer par cette boite et valider avant de sortir.
La suppression est indispensable pour eviter de gâcher du papier et de l'encre. -
Bonjour,
Il faut se mettre d'accord, lorsque vous cliquer sur `Annuler ` dans le choix de l'imprimante, cela signifie que vous gardez l'imprimante par défaut et ou l'imprimante choisie mais avec la configuration par défaut. Donc l'impression se déroule normalement.
Peut - être que vous désirez tout simplement annuler l'ordre d'impression, se qui est différent !
Merci de le préciser, la modification est très simple.
Note: l'important est que les différents choix de configuration fonctionnent correctement... -
Bonjour,
J'ai fait un rapide test hier au soir que j'ai arreté car dans votre solution on ne prend plus en compte le bouton annuler de la fenêtre "Choix de l'imprimante".
Par contre il semblerait en effet que cela fonctionne correctement pour ce qui est de la qualité d'impression.
Ne pouvant pas mettre de test "IF" dans l'instruction "With" je vais refaire des tests de la qualité d'impression sans l'instruction "With" de manière à reprendre le test sur le bouton "Annuler".
Ou avez-vous une autre idée?
Cordialement
Mistral -
Bonjour,
Je vous laisse essayer avec votre matériel, votre fichier avec une modification du code : https://www.cjoint.com/?3efsaAmxaOZ
J'espère que se sera bon ... !
-
Bonjour,
Eh bien je pense avoir mis le doigt sur la petite gentillesse.
Je fais encore des tests en fin de journée et je vous donnerai des nouvelles.
-
Bonjour,
Cela me rassure car vraiment je commencé à douter de moi...
Dans tout les cas un grand merci à vous.
Cordialement
Mistral -
Bonjour,
Merci pour vos informations, à première vue tout semble correct.
Par contre de mon côté à la suite d'un nouveau test plus poussé, je viens de réussir à reproduire la faute sur mon imprimante.
La recherche de la correction est pour demain. -
Bonjour,
Je n'ai trouvé votre message que ce matin ce qui explique ma réponse tardive.
J'ai donc refait deux essais un en couleur et l'autre en N&B. J'ai veillé également à la superposition des fenêtres pour bine mettre en évidence les conditions des captures d'ecran.
http://www.cijoint.fr/cjlink.php?file=cj201104/cijydQgd9B.doc
En esperant que cette fois-ci vous pourrez en déduire quel que chose.
Cordialement
Misstral -
Bonjour,
Excusez-moi d'insister, le pas à pas n'est pas le même que celui que j'ai mis comme modèle, il manque la phase après configuration de l'imprimante, vous devez revoir le boite de dialogue et valider par OK .... !
Essayer de suivre le modèle point par point et rien d'autre! -
Bonjour Le Pingou,
Vous trouverez avec le lien ci-dessous ce que vous m'avez demandé
http://www.cijoint.fr/cjlink.php?file=cj201104/cijkxWCX7U.pdf
Je précise que j'ai fais tous mes essais avec la même configuration de départ de mon imprimante. En effet entre chaque essais je remettais mon imprimante en Couleur et Normal qui est la configuration standard, et je faisais une impression de contrôle qui elle était bonne.
Le problème semble se produire que dans un cas précis, c'est quand je demande une impression N&B et en brouillon.
Je ne comprends vraiment pas pourquoi!
Je voudrais encore vous remercier de me consacrer du temps pour m'aider, un grand merci à vous.
Cordialement
Mistral -
Bonjour,
Merci pour l'information.
A première vue tout semble correct sauf un petit détail qui me manque. Voir la pièce jointe.
https://www.cjoint.com/?3dFu6xEHNgz -
Vous trouverez ci-dessous un lien vers ce que vous m'avez demandé.
J'espere avoir bien compris votre demande.
http://www.cijoint.fr/cjlink.php?file=cj201103/cijJt3UcZd.pdf -
Bonjour,
Vous est-il possible, lors de l'exécution de votre macro pas à pas, de faire une copie d'écran pour chaque pas et de mettre les images sur un document Word et ensuite de le poster !
Ainsi j'aurai une vue du déroulement et peut-être une change de ... !
-
Re,
Oui j'ai contrôlé ma macro en pas à pas, et je dirais même que je ne fais que ça...
Ou alors je m'y prends mal!
Mais tu n'as pas l'apparition des pointillés sur la feuille Menu après avoir modifié la configuration et fait l'impression?
Quand j'imprime manuellement, Fichier/Imprimer je fais ce que je veux de mes impression ce qui pour moi mets l'imprimante hors de cause.
Mais d'ou viens le problème quand j'utilise les macros? -
Bonjour,
Tout fonctionne correctement chez moi.
Avez-vous contrôlé votre macro pas à pas ?
Essayez aussi de désactiver l'événement : `EnableEvents' !
-
Bonjour L e Pingou,
Je reviens à la charge car ça ne fonctionne toujours pas. J'ai réinstallé mon imprimante est elle fonctionne normalement. Si je fais des essais d'impression manuellement par Fichier/Imprimer j'imprime bien en N&B ou en couleur selon mes choix. Idem pour la qualité d'impression Normal/Brouillon.
Par contre quand je fais des tests en utilisant la macro j'ai deux problèmes (A ce moment là l'imprimante est configurée couleur/Normal) :
1er essais : Je lance l'impression avec le bouton et je valide le choix par OK sans rien changer. L'impression est en N&B alors que l'imprimante était en couleur et qu'elle y est restée ! Pourquoi ?
2iem essais : Je lance l'impression et je configure l'impression en N&B puis je valide par OK. L'impression se fait bien en N&B (l'imprimante est OK vérification par Fichier/Imprimer) mais apparaît le 2iem problème, a savoir j'ai deux trait pointillé qui apparaissent sur le bord droit des cellules des colonnes G et N. Pourquoi ?
3iem essais : Je lance l'impression et je configure l'impression en Couleur puis je valide par OK. L'impression se fait en N&B alors que l'imprimante est bien passée en couleur (l'imprimante OK vérification par Fichier/Imprimer) !!!
Tous ces essais ont été fait sur le classeur dont le lien est ci-dessous :
http://www.cijoint.fr/cjlink.php?file=cj201103/cij3nbfyED.xls
Pouvez-vous m'aider car je n'y comprends vraiment plus rien.
Merci d'avance.
Cordialement
Mistral -
Bonjour,
La partie qui touche l'imprimante est correcte.
Pour éviter le [GoTo Line1] j'écrirais de cette manière :If Application.Dialogs(Excel.XlBuiltInDialog.xlDialogPrinterSetup).Show = True Then Nom = ActivePrinter With Sheets("Tableau") .Visible = True .PrintOut from:=1, To:=p, ActivePrinter:=Nom '.Visible = False 'A remettre dans la version difinitive. End With End If
Note: pour votre imprimante, assurez-vous que la modification des paramètres soit prise en compte directement sans passé par la procédure VBA.
- 1
- 2