Karen cherche un moyen d’imprimer un classeur entier, même si un utilisateur choisit d’imprimer une seule feuille de calcul. En d’autres termes, elle cherche un moyen d’imprimer soit le classeur entier, soit rien du tout – il ne devrait y avoir aucune option «intermédiaire».

La seule façon de gérer cela consiste à utiliser une macro. VBA vous permet de créer des macros qui sont lancées lorsque certains événements se produisent. Un des événements qui peuvent déclencher des macros est l’événement « print ». Quand quelqu’un demande à imprimer ou choisit d’afficher un aperçu avant impression, l’événement BeforePrint de l’objet Workbook est déclenché. Vous pouvez créer votre propre macro qui s’exécute lorsque l’événement est déclenché.

Private Sub Workbook_BeforePrint(Cancel As Boolean)

Dim sht As Variant     Dim bPreview As Boolean     Dim iResponse As Integer     On Error GoTo ErrHandler

iResponse = MsgBox(prompt:="Do you want to Print Preview?", _         Buttons:=vbYesNoCancel, Title:="Preview?")



Select Case iResponse         Case vbYes             bPreview = True         Case vbNo             bPreview = False         Case Else             GoTo ExitHandler     End Select     Application.EnableEvents = False     For Each sht In Sheets         If sht.Visible Then             sht.PrintOut Preview:=bPreview         End If     Next

ExitHandler:

Application.EnableEvents = True     Cancel = True     Exit Sub

ErrHandler:

MsgBox Err.Description     Resume ExitHandler End Sub

Chaque fois qu’Excel se prépare à imprimer ou chaque fois que l’aperçu avant impression est appelé, l’événement BeforePrint est déclenché et cette macro s’exécute. La macro demande d’abord à l’utilisateur s’il souhaite effectuer un aperçu avant impression. Une structure Select Case est utilisée pour définir la variable bPreview en fonction de la réponse à la question. Le paramètre de bPreview contrôle alors ce qui se passe.

Si l’utilisateur a cliqué sur Annuler lorsqu’il a été interrogé sur l’aperçu, la macro est quittée et l’impression est annulée. Dans le cas contraire, chaque feuille de calcul du classeur est examinée pour impression ou aperçu. Si la feuille de calcul est visible, elle est imprimée et la propriété Aperçu est définie comme égale à bPreview (True signifie que la feuille de calcul est prévisualisée; False signifie qu’elle est réellement imprimée).

Notez que la macro définit la propriété EnableEvents sur False. Ceci est fait pour qu’aucun autre événement ne puisse se déclencher pendant l’impression ou la prévisualisation.

Si EnableEvents est laissé « on », alors chaque fois que la méthode PrintOut est utilisée, tout l’événement BeforePrint est à nouveau déclenché – l’utilisateur se retrouverait dans une boucle sans fin si la gestion des événements n’était pas désactivée.

Notez également que l’une des dernières choses à se produire avant de quitter la macro est que la propriété Cancel est définie sur True. Cette opération est effectuée afin que la demande d’impression ou d’aperçu avant impression d’origine qui a généré l’événement BeforePrint soit annulée. Il n’y a, après tout, aucun besoin de compléter cette demande, car la macro a fait toute la gestion d’impression pour l’utilisateur.

Il y a bien sûr une mise en garde à l’utilisation de cette approche d’impression: si les macros ne sont pas activées, le gestionnaire ne s’exécutera pas et l’utilisateur pourra imprimer comme il le souhaite. (Maintenir Shift lors de l’ouverture du classeur désactive les macros et l’utilisateur se voit le plus souvent demander s’il souhaite activer les macros.) D’autres problèmes de ExcelTips ont abordé ce fait.

_Note: _

Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites ExcelTips), j’ai préparé une page spéciale qui comprend des informations utiles.

lien: / excelribbon-ExcelTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur].

ExcelTips est votre source pour une formation Microsoft Excel rentable.

Cette astuce (11629) s’applique à Microsoft Excel 2007, 2010, 2013 et 2016.

Vous pouvez trouver une version de cette astuce pour l’ancienne interface de menu d’Excel ici: link: / excel-Printing_All_or_Nothing [Printing All or Nothing].