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à.

Private Sub Workbook_BeforePrint(Cancel As Boolean)

   ' ... votre code ...

End Sub

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).

Private Sub Workbook_BeforePrint(Cancel As Boolean)
    
    Cancel = True
    
End Sub

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:

Private Sub Workbook_BeforePrint(Cancel As Boolean)
    
    MsgBox "Ce Classeur ne peut pas être imprimé..."
    Cancel = True
    
End Sub

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.

Private Sub Workbook_BeforePrint(Cancel As Boolean)
'par Excel-Malin.com ( http://excel-malin.com/ )

    If ActiveSheet.Name = "Résumé" Then
        MsgBox "Cette Feuille ne peut pas être imprimée..."
        Cancel = True
    End If
    
End Sub

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

Private Sub Workbook_BeforePrint(Cancel As Boolean)
'par Excel-Malin.com ( http://excel-malin.com/ )

    Select Case ActiveSheet.Name
        Case "Résumé", "Offre", "Proposition", "Liste des utilisateurs": Cancel = True
        Case Else: Cancel = False
    End Select
        
End Sub

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…

Private Sub Workbook_BeforePrint(Cancel As Boolean)
'par Excel-Malin.com ( http://excel-malin.com/ )

Dim MotDePasse As String
Dim MotDePasseUtilisateur As String

MotDePasse = "AB123" '<-- mot de passe nécessaire pour poursuivre l'impression.

MotDePasseUtilisateur = InputBox("Veuillez saisir le mot de passe pour pousuivre l'impression", "Impression")

If MotDePasseUtilisateur <> MotDePasse Then
    MsgBox "Mot de passe incorrect. l'impression sera abandonnée..."
    Cancel = True
End If

End Sub

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.

2 0



Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée.