Private Sub Création()
Dim OT As Worksheet 'déclare la variale OT (Onglet Template)
Dim O As Worksheet 'déclare la variale O (Onglet)
Dim Nom As String, Tb
Set OT = Worksheets("Template") 'définit l'onglet OT
If WorksheetFunction.CountA(OT.[A3:C3]) <> 3 Then
OT.[A3:C3].Find(What:="", After:=OT.[C3], LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows).Select
MsgBox "Vous devez renseigner cette cellule !"
Exit Sub 'sort de la procédure
End If
Nom = OT.[A3] 'Nom du contact
On Error Resume Next: Set O = Worksheets(Nom): On Error GoTo 0
If Not O Is Nothing Then
MsgBox "Un onglet portant le nom de " & Chr(34) & Nom & Chr(34) & " exite déjà !"
Exit Sub 'sort de la procédure
End If
OT.Copy After:=Sheets(Sheets.Count): Set O = ActiveSheet: O.Name = Nom: O.Visible = xlSheetVeryHidden
OT.[A3:C3].ClearContents
With Sh02_MdP.ListObjects(1)
Tb = .Range.Offset(1).Resize(.Range.Rows.Count - 1).Value
End With
OK = False
Nom = O.[B3]
For i = 1 To UBound(Tb, 1)
If UCase(Tb(i, 1)) = UCase(Nom) Then OK = True: Exit For
Next i
If Not OK Then
Créer_Mdp Nom
End If
End Sub
Private Sub Créer_Mdp(Nom As String)
Dim Rép, Rép1, Rép2, Lgn As Long
'Demande du mot de passe administrateur
Rép = Application.InputBox(Title:="Ajout d'un contact", Prompt:="Mot de Passe Administrateur :", Type:=2)
If Rép = False Or Rép = "" Or Rép <> MdP_Admin Then
'En cas d'erreur abandon de la création d'un mot de passe
MsgBox "Erreur sur le mot de passe" & vbCrLf & "Il faudra ajouter le mot de passe de " & Nom & "manuellement.": Exit Sub
End If
Rép1 = Application.InputBox(Title:="Mot de passe d'un contact", Prompt:="Mot de passe de " & Nom & " :", Type:=2)
Rép2 = Application.InputBox(Title:="Confirmation", Prompt:="Confirmez le mot de passe de " & Nom & " :", Type:=2)
If Rép2 = False Or Rép2 = "" Or Rép2 <> Rép1 Then
'En cas d'erreur abandon de la création d'un mot de passe
MsgBox "Erreur sur le mot de passe" & vbCrLf & "Il faudra ajouter le mot de passe de " & Nom & "manuellement.": Exit Sub
End If
With Sh02_MdP
'N° de la dernière ligne
Lgn = .Cells(.Rows.Count, 1).End(xlUp).Row
Lgn = Lgn + Abs(.Cells(Lgn, 1) <> "") '(si le tableau et vide cette ligne sinon la suivante)
.Cells(Lgn, 1) = Nom 'Nom
.Cells(Lgn, 2) = Rép2 'Mot de passe
End With
End Sub
Private Sub Masquer()
'Masquer toutes les feuilles
For i = 1 To Sheets.Count
Sheets(i).Visible = xlSheetVeryHidden
Next
End Sub
Private Sub Afficher()
'Afficher toutes les feuilles sauf la 1
For i = 2 To Sheets.Count
[QUOTE="AtTheOne, post: 20489889, member: 358137"]
Bonjour à tous, Bonjour [USER=209912]@Roseline[/USER]
Un exemple de ce qui peut être fait :
[LIST]
[*]Le Projet VBA est verrouillé (et masqué) Mot de Passe Provisoire "MdP"
[*]Une feuille "MdP" contient un tableau structuré avec le nom des accompagnateurs et leur mot de passe, cette feuille est masquée "xlSheetVeryHidden" (elle ne peut pas être affichée par l'interface Excel).
[*]Les feuilles crées par le bouton "Contact" sont masquées de la même façon.
[/LIST]
A l'ouverture du classeur, si le nombre de feuilles est > 2, un formulaire s'affiche :
[ATTACH type="full" alt="1644936454959.png"]1130942[/ATTACH]
Si il y a des feuilles correspondant au couple (Nom, Mot de passe) elles sont affichées (la première est activée).
Sinon seule la feuille "Template" reste visible.
A la fermeture du classeur toutes les feuilles autre que "Template" sont masquées (xlSheetVeryHidden).
Lorsque l'on clique sur le bouton contact, si c'est possible, on crée une nouvelle feuille masquée (xlSheetVeryHidden). Si le mot de passe de l'accompagnateur n'est pas connu, un dialogue s'engage pour le créer.
Le mot de passe Administrateur est stocké dans une constante dans le module
M01_Constantes_Publques :
[CODE]Option Private Module
Public Const MdP_Admin As String = "MdP"