Exécution d’une macro une fois l’impression terminée (Microsoft Excel)
Franklin a une macro qui masque certaines lignes dans une feuille de calcul, puis imprime la feuille de calcul. Pour ce faire, il utilise le gestionnaire d’événements BeforePrint. Le problème est que Franklin souhaite afficher automatiquement les lignes une fois l’impression terminée. Il ne sait pas comment faire cela dans sa macro.
Il existe plusieurs façons d’aborder cela. La première consiste à utiliser le gestionnaire d’événements BeforePrint et à l’utiliser pour masquer les lignes souhaitées, puis pour spécifier une macro à exécuter via la méthode OnTime. Voici à quoi ressemblerait le gestionnaire d’événements:
Private Sub Workbook_BeforePrint(Cancel As Boolean) ' Code here to hide rows desired Application.OnTime Now, "AfterPrint" End Sub
Vous devrez ajouter à ce gestionnaire d’événements le code pour masquer les lignes que vous souhaitez masquer. (Franklin a dit qu’il avait un tel code fonctionnant; il les a dévoilés après l’impression qu’il avait des problèmes avec.) Notez que la macro appelée via OnTime est celle appelée AfterPrint. Cette macro doit être placée dans un module normal, pas dans le même module que celui où sont placés les gestionnaires d’événements. Cela peut être encore plus simple que le gestionnaire d’événements:
Sub AfterPrint() ' Code here to unhide rows Cells.Select Selection.EntireRow.Hidden = False End Sub
Vous pouvez également, si vous le souhaitez, contourner complètement le besoin de la méthode OnTime (et de la macro AfterPrint). Cela impliquerait cette approche:
Private Sub Workbook_BeforePrint(Cancel As Boolean) Cancel = True ' Code here to hide rows desired Application.EnableEvents = False ActiveSheet.PrintOut Application.EnableEvents = True ' Code here to unhide rows End Sub
La macro fonctionne car elle annule l’impression qui a déclenché l’événement BeforePrint, masque les lignes, imprime la feuille de calcul active, puis affiche les lignes.
L’inconvénient d’une telle approche basée sur un gestionnaire d’événements est qu’elle limite ce que l’utilisateur peut imprimer. En d’autres termes, l’utilisateur ne peut imprimer que ce que vous lui permettez d’imprimer, et non ce qu’il souhaite réellement imprimer. Pour contourner cette limitation assez importante, vous devrez abandonner complètement l’approche BeforePrint. Au lieu de cela, créez une macro régulière qui gère l’impression:
Sub PrintWS() ' Code here to hide rows desired Application.EnableEvents = False ActiveSheet.PrintOut Application.EnableEvents = True ' Code here to unhide rows End Sub
Vous remarquerez qu’il s’agit, essentiellement, des entrailles de la deuxième approche BeforePrint: vous masquez les lignes, imprimez la feuille de calcul, puis affichez les lignes. Cette macro PrintWS pourrait alors être liée à une touche de raccourci ou à quelque chose sur la barre d’outils d’accès rapide afin qu’elle puisse être appelée facilement.
À propos, si vous décidez d’utiliser l’une des approches BeforePrint, il a été signalé que cela ne fonctionnait pas correctement dans toutes les versions d’Excel. (Cela semble très difficile à retracer.) Ce qui se passe, c’est que dans certaines versions, ce qu’Excel imprime est « gravé dans la pierre » avant que le gestionnaire d’événements BeforePrint ne soit appelé. Cela signifie que toutes les lignes que vous masquez dans le gestionnaire d’événements sont ignorées lorsque la feuille de calcul est réellement imprimée, c’est donc comme si vous ne masquiez jamais les lignes dans la macro. Le seul moyen de contourner ce fait très frustrant est de gérer vous-même l’impression, directement, soit par le biais du deuxième exemple BeforePrint ci-dessus, soit par l’approche macro PrintWS.
ExcelTips est votre source pour une formation Microsoft Excel rentable.
Cette astuce (13624) s’applique à Microsoft Excel 2007, 2010, 2013, 2016, 2019 et Excel dans Office 365.