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.

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 l'imprime. 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.

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 de tout le Classeur Excel

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 voulez interdire l'impression de plusieurs (mais pas toutes les) Feuilles, 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 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

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.

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

1 0



Partagez cette page...
Share on FacebookShare on Google+Share on LinkedInTweet about this on TwitterShare on RedditShare on TumblrDigg thisEmail this to someone

Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée.