Je cherche à insérer un mot de passe sur un onglet Excel, exemple, j'ai mon fichier "Kynes" qui comprend les Feuille1, Feuille2, Feuille3. Pour des questions de confidentialité je veux que seulement Mr "A" accède à la Feuille1, que Mr "B" accède à la feuille2, que Mr "C" accède à la feuille3...Voila, j'ai + ou - 30 onglets à créer car 30 personnes dans mon groupe de travail.
Bien d'accord, on peut toujours "casser" les mots de passe, mais ça devient du vice
Pour terminer en ce qui me concerne (je sors ce soir), et pour éviter qu'on affiche les feuilles par une macro extérieure, il faut protéger (par mot de passe...) le classeur :
Code:
Private Sub Workbook_Open()
Dim U As String, flag As Boolean, s As Object
U = InputBox("Entrez votre nom d'utilisateur :", "Utilisateur")
If U = "" Then flag = True: GoTo 1
On Error Resume Next
[COLOR="Red"]ThisWorkbook.Unprotect "mdp" 'adapter le mot de passe[/COLOR]
If U = "kynes" Then
For Each s In Sheets
s.Visible = True 'affiche la feuille
Next
Else
Sheets(U).Visible = True 'affiche la feuille de l'utilisateur
If Err Then
MsgBox "Utilisateur non répertorié..."
flag = True
Else
Sheets(1).Visible = xlVeryHidden 'masque la 1ère feuille ("Accueil")
End If
End If
[COLOR="red"]ThisWorkbook.Protect "mdp", True, False 'protège les structures du classeur[/COLOR]
ThisWorkbook.Saved = True 'évite le message à la fermeture du fichier s'il n'y a plus de modifications
1 If flag Then If Workbooks.Count = 1 Then Application.Quit Else ThisWorkbook.Close
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUi As Boolean, Cancel As Boolean)
Dim n As Byte
Application.ScreenUpdating = False
[COLOR="red"]ThisWorkbook.Unprotect "mdp" 'adapter le mot de passe[/COLOR]
Sheets(1).Visible = True 'affiche la 1ère feuille ("Accueil")
For n = 2 To Sheets.Count
Sheets(n).Visible = xlVeryHidden 'masque les autres feuilles
Next
[COLOR="red"]ThisWorkbook.Protect "mdp", True, False 'protège les structures du classeur[/COLOR]
Application.EnableEvents = False
ThisWorkbook.Save
Application.EnableEvents = True
If Workbooks.Count = 1 Then Application.Quit Else ThisWorkbook.Close
End Sub
Pour mettre les choses dans le contexte (ce que je n'avais pas fait initialement) ce fichier doit me permettre de travailler en world wide (Brésil, UK, belgique... , avec une population de 30 personnes qui devront renseigner des infos. infos elles mêmes consolidées en central. J'ai bien essayé de concevoir une liste avec un formulaire sur un espace Sharepoint mais je n'ai pas pu utiliser les fonctionnalités (vraiment trés compliquées) de liste Sharepoint qui me permettait une transparence totale de confidentialité, je me suis donc rabattu sur un fichier Excel que je mettrai à disposition sur un portail Sharepoint que j'ai déjà paramétré.
Merci encore une fois pour toutes vos réponses et suggestions réellement passionnantes et pertinentes.
S'il y a soucis de confidentialité, pourquoi ne pas remettre une feuille unique à chaque utilisateurs puis utiliser un nouveau classeur pour la compilation de données une fois celles-ci toutes entrées?
Exactement, tu fais un classeur source pour compiler tes données que tu gardes dans ton ordino que le nommera "source"
Tu envois à chaque membre de ton groupe un nouveau classeur contenant qu'une seule feuille soit, leur nom d'utilisateur, nom ou peut importe mais qque chose d'unique. Ensuite, à travars une macro dans ton fichier central, au simple clic d'un bouton tu peux importer les données pertinentes.
Au clic du bouton dans ton classeur central tu dois faire 3 choses. Créer une nouvelle feuille, affecter le nom de cette nouvelle feuille à une variable puis avec un inputbox affecter le nom unique de la feuille source à une autre variable. Il sera ensuite un jeux d'enfant de copier ces feuilles dans ton classeur central à mesure qu'elles arrivent.
C'est selon moi la seule façon d'assurer une confidentialité à 100%
1) Créez une 1ère feuille "Accueil" (elle sera protégée, avec votre mot de passe) sur laquelle vous écrivez en gros :
SEUL UN UTILISATEUR REPERTORIE PEUT UTILISER CE FICHIER
LES MACROS DOIVENT ÊTRE ACTIVEES
2) Donnez aux onglets suivants le nom (Windows) de chaque utilisateur (y compris vous).
3) Allez dans VBA (Alt+F11) et dans ThisWorkbook entrez les 2 macros :
Code:
Private Sub Workbook_Open()
On Error Resume Next
Sheets(Environ("Username")).Visible = True 'affiche la feuille de l'utilisateur
If Err = 0 Then Sheets(1).Visible = xlVeryHidden 'masque la 1ère feuille ("Accueil")
ThisWorkbook.Saved = True 'évite le message à la fermeture du fichier s'il n'y a plus de modifications
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUi As Boolean, Cancel As Boolean)
Dim n As Byte
Application.ScreenUpdating = False
Sheets(1).Visible = True 'affiche la 1ère feuille ("Accueil")
For n = 2 To Sheets.Count
Sheets(n).Visible = xlVeryHidden 'masque les autres feuilles
Next
Application.EnableEvents = False
ThisWorkbook.Save
Application.EnableEvents = True
If Workbooks.Count = 1 Then Application.Quit Else ThisWorkbook.Close
End Sub
Notez que le fichier se ferme dès qu'on enregistre les modifications.
4) Dans VBA, menu Outils => Propriétés de VBAProject => Protection => votre mot de passe.
Bonjour Job 75
Ce post est assez vieux mais il est parfait pour mon utilisation, et mes pauvres capacités en VBA.
Moi j'ai me cette version avec le username qui fonctionne très bien.
Est il possible d'ajouter dans ce code une option pour un ou plusieurs utilisateur d'avoir accès à toutes les feuilles ?
Merci