Bouton imprimer / Printpreview
Bonjour.
J'ai crée un bouton imprimer dans un outil au format applicatif.
Pour le simplifier, j'ai caché les en têtes les marges etc.
Voici le code du bouton d'impression :
Private Sub CommandButton1_Click()
Dim plage As String
plage = "$a$3:$m$35"
ActiveSheet.PageSetup.PrintArea = plage
PrintPreview
ActiveSheet.PageSetup.PrintArea = ""Il marche très bien.
Problème : Ies fonctionalités d'impression n'apparaissent pas dans l'aperçu d'impression. Si les en tetes ne sont pas cachées, c'est génial. Mais par soucis d'estétique, elles le sont.
L'idée c'est de créer un bouton imprimer qui permet quand même de choisir son imprimante.
Si je met juste printout, l'impression est lancée sur l'imprimante par défaut...
Printpreview est génial, mais inutile si les entetes sont cachées... Comment faire?
Je pense avoir une solution. Je progresse mais j'ai quand même besoin d'aide :
J'ai trouvé sur un site ceci :
If Application.Dialogs(xlDialogPrinterSetup).Show = True Then Feuil1.printOutCa marche.... mon problème est sur le Feuil1.printOut
Il faut remplacer le Feuil1 par ma sélection... J'y arrive pas. Mon code :
Private Sub CommandButton1_Click()
Dim plage As String
plage = "$a$3:$m$35"
ActiveSheet.PageSetup.PrintArea = plage
If Application.Dialogs(xlDialogPrinterSetup).Show = True Then ActiveSheet.PageSetup.PrintArea = plage
PrintOut
ActiveSheet.PageSetup.PrintArea = ""
End SubEdit : Si ça marche avec ce code... C'est juste très long... pourquoi? Je ne sais pas...
Bon. La solution était bonne. Excel avait juste besoin d'un petit refresh. Fermeture réouverture et tout est fluide. Résolu !
Enième Edit...
En réalité la fonction que j'ai trouvé est une boite de dialogue pour choisir l'imprimante... rien de plus.
Admettons que l'on clique par erreur sur le bouton "imprimer"... la boite de dialogue apparait...
Si l'utilisateur clique sur "annuler"... la suite du code se lance quand même et imprime systématiquement.
C'est du détail... mais dans l'idéal il faudrait insérer une condition du style "si boite de dialogue = false : ne rien faire.
J'ai saisi le truc, mais je manque de compétences pour le réaliser.
Si quelqu'un a le courage de me dire si c'est relativement simple, ou bien trop complexe à réaliser (auquel cas j'abandonnerai l'idée...)
merci d'avance
Bonjour,
ça va tout seul ?
Il faut que tu fasses un If sur plusieurs lignes :
If Application.Dialogs(xlDialogPrinterSetup).Show = True Then ' rien d'autre après le Then !
Feuil1.printOut
'suite des instructions à exécuter si choix imprimante fait
End If
'instructions toujours exécutées
'...eric
Je suis pas sure de bien saisir ...
En reprenant mon code :
Private Sub CommandButton1_Click()
Dim plage As String
plage = "$a$3:$m$35"
If Application.Dialogs(xlDialogPrinterSetup).Show = True Then ActiveSheet.PageSetup.PrintArea = plage
PrintOut
ActiveSheet.PageSetup.PrintArea = ""
End SubCa c'est le code de base. Petite question... la partie
ActiveSheet.PageSetup.PrintArea = plageJe peux la mettre avant mon If, pour faciliter la lecture non?
Bon si j'avance, d'après tes dire je dois donc faire :
Private Sub CommandButton1_Click()
Dim plage As String
plage = "$a$3:$m$35"
ActiveSheet.PageSetup.PrintArea = plage
' 1er IF... si la boite de dialogue apparait... alors rien
If Application.Dialogs(xlDialogPrinterSetup).Show = True Then ""
'2nd if... Je met quoi là. le premier If dis qu'il imprime RIEN. J'imagine qu'il faut changer le .show par autre chose... mais quoi?
If Application.Dialogs(xlDialogPrinterSetup).Show = True Then "insérer quoi ici. Printout je suppose?"
ActiveSheet.PageSetup.PrintArea = ""
End SubCa marche comme ça :
Private Sub CommandButton1_Click()
Dim plage As String
plage = "$a$3:$m$35"
ActiveSheet.PageSetup.PrintArea = plage
ActiveSheet.PageSetup.PrintArea = ""
If Application.Dialogs(xlDialogPrinterSetup).Show = True Then
PrintOut
Else
End If
End SubSi il ya plus optimisé, je prend... mais ça marche alors
Bonjour,
le but est que tu mettes toutes les instructions concernées entre le If et le End If :
Private Sub CommandButton1_Click()
Dim plage As String
plage = "$a$3:$m$35"
If Application.Dialogs(xlDialogPrinterSetup).Show = True Then
ActiveSheet.PageSetup.PrintArea = plage
PrintOut
ActiveSheet.PageSetup.PrintArea = ""
End If
End SubTu peux aussi mettre plage en constante au début vu qu'elle est fixe :Const plage As String = "$a$3:$m$35"
eric