Voir aussi
Distinguer entre aperçu avant impression et imprimer en VBA
Dans mon classeur j'ai une macro qui se lance avant l'impression. Quand je clique sur impression, ma macro s'exécute parfaitement. MAIS, quand je clique sur aperçu avant impression, au lieu d'imprimer, j'obtiens bien l'aperçu, mais Excel est planté .
Une possibilité serait d'essayer de distinguer si la procédure BeforePrint a été
appelée en cliquant sur Aperçu avant impression (dans ce cas ne rien faire) ou
sur Impression (dans ce cas exécuter ton code actuel.

Il n'y a aucune possibilité "intégrée" de savoir laquelle des deux commandes (ou
bouton) a été cliquée mais Léo Heuser a proposé en mai dernier sur le forum
anglophone une petite bidouille pour y arriver. Le code est ci-dessous, avec la
traduction des explications et commentaires de l'auteur. Ça va peut-être te
décoincer.

'Pour autant que je sache, il n'est pas possible de distinguer,
'dans l'événement BeforePrint, s'il a été appelé par un clic sur
'le bouton Impression ou sur Aperçu avant impression.
'Mais il est possible d'empêcher le lancement du code si c'est
'un aperçu avant impresion qui a été demandé :

'=========dans le module ThisWorkbook du classeur
Private Sub Workbook_Open()
RedefinePrintPreview
End Sub

Private Sub Workbook_BeforePrint(Cancel As Boolean)
If Preview = False Then
MsgBox "Here is your code"
End If
End Sub
'===========================

'=========dans un module standard
Public Preview As Boolean

Sub RedefinePrintPreview()
'leo.heuser@get2net.dk, May 2001
Dim CBar As CommandBar
Dim Found As CommandBarControl

For Each CBar In CommandBars
Set Found = CBar.FindControl(ID:=109, recursive:=True)
If Not Found Is Nothing Then
Found.OnAction = "Pre" ' Set Found.OnAction = "" to return to
default.
End If
Next CBar

Preview = False 'Not necessary but informative :-)

End Sub

Sub Pre()
Preview = True
ActiveSheet.PrintPreview
Preview = False
End Sub
'===========================

'Explication :

'Preview est une variable globale
'
'Dans RedefinePrintPreview :
'
'1 l' ID 109 est celle du bouton Aperçu avant impression
'2 la procédure "Pre" est affectée à la propriété OnAction
' de chaque bouton dont l'ID est 109

'Dans la procédure "Pre"
'
'1 La variable Preview est fixée à Vrai
'2 Ce qui veut dire que le code de BeforePrint ne sera pas exécuté
' puisqu'il ne l'est que si Preview est à Faux
'3 La méthode PrintPreview est appelée puis Preview est refixé à False
'
'Maintenant on peut utiliser le bouton Imprimer et être assuré que
'le code dans BeforePrint sera bien exécuté.
'===============
traduction et explications de Frédéric Sigonneau
Leo Heuser, (N°933)
Lancer un aperçu avant impression par macro
J'ai créé en VBA un code qui lance l'aperçu avant impression. Mais il utilise toutes les ressources système et fait planter le PC. Que faire ?
C'est un problème connu (bug ?) avec l'objet PageSetUp (qui n'est pas un véritable objet)
qu'a beaucoup de mal à causer avec le driver de l'imprimante.

Utilise plutôt cette bonne vieille macro XL4 de John Green (jgreen@enternet.com.au)
Macro =
"Page.Setup(,,.25,.25,.5,.25,,False,True,True,2,1,{1,1},,,,,.25,.25)"
ExecuteExcel4Macro Macro
John Green, (N°932)