Excel: empêcher l’impression des Feuilles ou du Classeur entier

Dans cette article, je vais vous expliquer comment il est possible d'empêcher l'utilisateur d'imprimer un Classeur Excel ou une partie d'un Classeur.

VBA: empêcher l'impression de document Excel

Parfois, vous voulez laisser un utilisateur pouvoir ouvrir un Classeur, le consulter ou éventuellement le modifier – mais en même temps, vous ne voulez pas qu'il puisse l'imprimer. Est-ce possible? Oui, tout à fait! Avec un peu de VBA, ceci est très simple à mettre en place.

Utiliser l'événement Workbook.BeforePrint en VBA

En VBA, il est possible de déclencher une macro au moment où l'utilisateur clique sur le bouton de l'impression. Ce déclenchement se produit grâce à l'événement BeforePrint placé dans l'Objet ThisWorkbook du Classeur. D'ailleurs n'hésitez pas à consulter la liste complète des événements en VBA, c'est très pratique!

La structure de l'événement BeforePrint

L'événement BeforePrint est déclenché, comme son nom en anglais l'évoque, avant l'impression. Il nous donne donc la possibilité d'exécuter un code à ce moment-là.

Comme vous pouvez le constater, cet événement (Event) contient une variable – Cancel. Cette variable détermine si oui ou non, le code doit abandonner l'impression.

Par défaut, la valeur de Cancel est False et donc l'impression est supposé avoir lieu. Si le contenu de la variable Cancel est changé en True, Excel mettra fin à l'impression avant même son début.

Pour rappel: le code VBA de l'événement doit être placé dans l'Objet ThisWorkbook (voir la capture d'écran, l'Objet est surligné en jaune)…

VBA: empêcher l'impression d'un classeur Excel

Maintenant que l'on sait comment déclencher l'exécution du code VBA avant l'impression, voici les manières possibles d'empêcher l'utilisateur d'imprimer…

Empêcher l'impression du Classeur Excel entier

Une des possibilités est d'interdire l'impression de n'importe quelle partie du Classeur en question. Le code VBA pour ce faire est on ne peut plus simple. Il suffit d'attribuer la valeur True (= Vrai) à la variable Cancel (= abandonner).

Voici donc le code VBA que vous devez coller dans votre classeur (dans l'objet ThisWorkbook).

Résultat: après le clic sur "Imprimer", rien ne se passera. Ni l'impression, ni aucune autre action.

Si vous voulez ajouter un message pour l'utilisateur, le code VBA ressemblera à ceci:

Empêcher l'impression d'une ou plusieurs Feuilles spécifiques

Il est également possible de laisser l'utilisateur imprimer certaines Feuilles mais pas d'autres. Dans ce cas-ci, il faut ajouter une logique conditionnelle dans le code précédent.

Le code VBA qui suit empêche l'utilisateur d'imprimer la Feuille "Résumé". Toutes les autres Feuilles peuvent être imprimées.

Si vous souhaitez interdire l'impression de plusieurs Feuilles (mais pas toutes) , le code qui suit fera l'affaire:

Ce code empêchera l'impression des Feuilles "Résumé", "Offre", "Proposition" et "Liste des utilisateurs". Vous n'avez qu'à adapter cette liste selon vos besoins…

Protéger l'impression par un mot de passe

Si vous voulez, il est également possible de "compliquer" ce code en y ajoutant d'autres fonctionnalités. Une qui me vient à l'esprit est la protection de l'impression par un mot de passe. Ainsi, après avoir lancé l'impression, l'utilisateur est demandé de saisir le mot de passe. S'il est correct, l'impression se poursuit. S'il n'est pas correct, l'impression est abandonnée…

Et voilà…

Remarque finale sur l'utilisation pratique

Pour empêcher l'utilisateur de contourner facilement votre restriction en effaçant votre code VBA, n'oubliez pas de protéger votre code VBA par un mot de passe.

Pour aller plus loin en VBA

Voici une sélection des articles de Excel-Malin.com qui pourraient vous être utiles…

A propos, vous pouvez consulter la page dédiée à l'événement BeforePrint sur le site internet de Microsoft.

Laissez un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Commentaire sur “Excel: empêcher l’impression des Feuilles ou du Classeur entier”