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.printOut

Ca 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 Sub

Edit : 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 Sub

Ca c'est le code de base. Petite question... la partie

ActiveSheet.PageSetup.PrintArea = plage

Je 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 Sub

Ca 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 Sub

Si 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 Sub

Tu peux aussi mettre plage en constante au début vu qu'elle est fixe :
Const plage As String = "$a$3:$m$35"
eric

Rechercher des sujets similaires à "bouton imprimer printpreview"