Stefano a un problème dans son entreprise où les gens copient souvent un classeur du serveur sur leur propre ordinateur, apportent des modifications au classeur, puis impriment le classeur. Il aimerait faire en sorte que seul le classeur d’origine soit autorisé à être imprimé, il se demande donc s’il existe un moyen d’interdire l’impression à moins que le classeur ne soit celui du serveur.

Il n’existe aucun moyen natif de le faire dans Word. Vous pouvez, si vous le souhaitez, créer une macro qui fait les deux choses suivantes:

  1. Examinez le chemin du document actuel. Si le chemin est autre chose que le chemin de votre serveur, interdisez l’impression

Voici un exemple d’une telle macro. Vous devez placer cette version particulière dans le module ThisWorkbook; il s’exécute automatiquement chaque fois que l’utilisateur choisit d’imprimer.

Private Sub Workbook_BeforePrint(Cancel As Boolean)

Dim sFile As String

sFile = "\\Server.name\folder\path\My file name.xlsm"



If ThisWorkbook.FullName <>  sFile Then         MsgBox "Printing only possible with server copy"

Cancel = True     End If End Sub

Notez que la variable sFile est définie pour contenir le chemin d’accès complet au classeur (où le classeur doit se trouver sur le serveur de l’entreprise). Si le nom du classeur actuel ne correspond pas à cela, l’impression est désactivée.

Il y a un problème potentiel avec ce type de macro, et il a à voir avec le chemin d’accès au fichier. Il est possible que le chemin du serveur diffère d’un utilisateur à l’autre. L’exemple de macro recherche un chemin qui inclut un UNC (Universal Naming Convention), mais tous les chemins ne peuvent pas fonctionner de cette façon. Par exemple, les utilisateurs peuvent avoir le dossier sur le serveur mappé à une lettre de lecteur. Sur un système, le chemin peut être g: / myserver / myfolder / et sur un autre, il peut être z: / myserver / myfolder /.

La macro ne peut pas compenser cela de manière fiable.

Vous pourrez peut-être contourner ce problème avec une approche résolument low-tech. Tout d’abord, placez un petit fichier texte (créé avec le Bloc-notes) dans le même dossier sur le serveur que le classeur. Le contenu du fichier texte n’est pas vraiment important. Ensuite, ajoutez cette macro à votre module ThisWorkbook:

Private Sub Workbook_BeforePrint(Cancel As Boolean)

Dim sPath As String     Dim sFile As String

sPath = ThisWorkbook.Path     sFile = sPath & "\" & "TestFile.txt"



If Dir(sFile) = "" Then         MsgBox "Printing only possible with server copy"

Cancel = True     End If End Sub

Ce que fait la macro est de déterminer le chemin d’accès du classeur actuellement ouvert. Cela est ensuite ajouté au nom du petit fichier texte que vous avez placé dans le même dossier que le classeur. (Dans ce cas, j’ai donné à ce fichier le nom TestFile.txt.) La commande Dir est ensuite utilisée pour voir si le fichier existe. S’il n’existe pas, l’impression est annulée.

Une solution plus globale pourrait consister à utiliser ce que Microsoft appelle IRM (Information Rights Management). Cette solution, bien adaptée à une utilisation dans un environnement d’entreprise, vous permet de contrôler ce que les gens peuvent et ne peuvent pas faire avec vos documents. Un bon endroit pour commencer à apprendre l’IRM est ici:

https://support.office.com/en-us/article/information-rights-management-in-office-c7a70797-6b1e-493f-acf7-92a39b85e30c

ExcelTips est votre source pour une formation Microsoft Excel rentable.

Cette astuce (13526) s’applique à Microsoft Excel 2007, 2010, 2013, 2016, 2019 et Excel dans Office 365.