Empêcher certains utilisateurs d'enregistrer un fichier Exce

Bonjour à toutes et à tous,

Voilà, je vous expose mon problème.

J’ai réalisé un fichier Excel que j’ai mis en réseau.

Tous les utilisateurs d’Excel peuvent consulter ce fichier.

J’aimerais protéger ce fichier de la façon suivante :

Tous les utilisateurs peuvent consulter ce fichier mais, le droit d’enregistrement doit être donné seulement à certains.

Les autres utilisateurs ne pourront ni enregistrer ni enregistrer sous.

Le nom d’utilisateur est affiché en haut à droite du fichier Excel (prénom nom).

Après plusieurs recherches j’ai pu voir que l’on peut bloquer l’enregistrement, mais comment autoriser certains utilisateurs ?

Je vous remercie par avance

Baltazard

Bonjour,

Révision --> Permettre la modification des plages

Cordialement,

Sinon tu mets le code suivant en évènementiel dans ton classeur, en remplaçant "bonjour" par le mot de passe de ton choix.

Ensuite tu fournis le mot de passe aux utilisateurs qui sont autorisés.

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

mdp = InputBox("Quel est le mot de passe ?")
If mdp <> "Bonjour" Then
    Cancel = True
    MsgBox "Mot de passe incorrect"
End If

End Sub

Bonjour,

Tester lors de l'enregistrement si l'utilisateur (affiché selon tes dires à un endroit précis) est autorisé à enregistrer. Si ce n'est pas le cas : annuler l'opération.

Variante : fermer le classeur sans enregistrer.

Cordialement.

NB- Un fichier illustrant les éléments du problème et leur positionnement permettrait une réponse plus précise.

Ou alors tu vérifies que l'utilisateur fait partie d'une liste d'utilisateurs autorisés avant d'autoriser la sauvegarde.

Pour récupérer le nom de l'utilisateur il faut utiliser Environ("Username"). Tu peux ainsi le stocker dans une variable :

NomUtilisateur=Environ("Username")

L’idéal est de combiner la solution de MFerrand et de melch .

Tester lors de l'enregistrement si l'utilisateur (affiché selon tes dires à un endroit précis) est autorisé à enregistrer. Si ce n'est pas le cas : annuler l'opération.

Le nom de l’utilisateur est dans le bandeau à côté de la touche « réduire la fenêtre ».

Du coup il faut combiner avec la solution de melch

Ou alors tu vérifies que l'utilisateur fait partie d'une liste d'utilisateurs autorisés.

Avez-vous une méthode pour réaliser cette action, un code VBA… ?

Ci joint un imprimé écran du fichier montrant l'emplacement du nom.

Le fichier est enregistré dans un dossier quelconque

Merci bien

36doc9.pdf (312.60 Ko)

Pour cela il faudrait que sur ton fichier tu ais une feuille dédiée qui contiendrais tous les noms d'utilisateurs qui sont autorisés à enregistrer le fichier (cette feuille pourra être masquée).

De plus, Environ("Username") renvoie le nom d'utilisateur de la session Windows en cours, je ne sais pas si c'est le même qui est affiché en haut à droite de ton pdf.

Ok pour créer une feuille avec les noms des utilisateurs autorisés.

Le nom de la session Windows en cours et le nom du fichier Excel sont et seront toujours les mêmes.

Par contre je ne sais pas où ni comment intégrer Environ("Username") dans la macro qui me permettrais d’enregistrer ou non le fichier.

Si t’as un code à me proposer se serait génial

Exemple : tu as une liste de noms d'utilisateurs qui sont autorisés, la liste se trouve dans les cellules A2 et suivantes de la feuille "liste_utilisateurs" :

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Dim utilisateurAutorise As Boolean
Dim derLig As Long
utilisateurAutorise = False
derLig = Sheets("liste_utilisateurs").Cells(Rows.Count, 1).End(xlUp).Row

For i = 2 To derLig
    If Sheets("liste_utilisateurs").Cells(i, 1) = Environ("Username") Then utilisateurAutorise = True
Next

If utilisateurAutorise = False Then
    Cancel = True
    MsgBox "Fichier non enregistré."
End If

End Sub

Bonjour melch

J'ai mis en place le code dans "ThisWorkbook", j'ai créé la liste des utilisateurs.

Ensuite je clic sur la disquette pour enregistrer, la macro se déclenche mais s’arrête sur la ligne : For i = 2 To derLig

Une fenêtre s'ouvre : erreur de compilation variable non définie

Il bloque sur la variable i.

Je ne sais pas comment faire pour définir cette variable, bon j'avoue je ne suis pas très fort en VBA ^^

Merci por ton aide

Chez moi ça fonctionne

essaie :

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Dim utilisateurAutorise As Boolean
Dim derLig As Long
Dim i As Long
utilisateurAutorise = False
derLig = Sheets("liste_utilisateurs").Cells(Rows.Count, 1).End(xlUp).Row

For i = 2 To derLig Step 1
    If Sheets("liste_utilisateurs").Cells(i, 1) = Environ("Username") Then utilisateurAutorise = True
Next

If utilisateurAutorise = False Then
    Cancel = True
    MsgBox "Fichier non enregistré."
End If

End Sub

Essaie le fichier en exemple :

  • Essaie d'enregistrer, ca ne fonctionnera pas
  • Marque ton nom d'utilisateur en colonne A puis enregistre, ça fonctionnera
66test-baltazard.xlsm (17.03 Ko)

Merci tou le monde pour votre aide !!!!

Rechercher des sujets similaires à "empecher certains utilisateurs enregistrer fichier exce"