Me revoilà, c'était pas très long mais je n'avais pas trop le temps en ce moment...
Ci-joint le fichier avec:
-- affichage de la macro verrouillé (code "toto") - dans VBA / outils / propriétés de VBA / onglet "protection": tu coches et rentres le code de ton choix (à ta place je mettrai le même que pour vérouiller les cellules, histoire de ne pas en avoir 3000...)
- -cellules verrouillées en écriture (code "toto") - dans le code: dans thisworkbook, c'est le "toto" associé à mdp_plongée qui à chaque ouverture du fichier est automatiquement ajouté. Pour l'enlever car tu veux éditer le texte: révisions/oter la protection / toto (ou le code que t'auras mis dans thisworkbook). si tu l'enlèves, il se remettra automatiquement quand tu ré-ouvre ce fichier.
- -bouton pour verrouiller/déverouiller la fonction "Editer le matériel":
si tu cliques sur le cadenas si un code est de longueur nulle ça te demande d'en créer un, s'il en existe déjà un ça te demande quel est le code, et si tu rentres le bon ça dévérouille.
S'il existe un code, à chaque fois que tu cliqueras sur editer le matériel, ça te le demandera, et ne lancera la userform que si tu tapes le bon code.
Pour le code utilisé, il est dans module/verrouillage, et je ne pense pas que ce soit plus complexe que le tien...:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| Option Explicit
Dim code1, code As String
Sub Verrouillage_()
code1 = GetSetting("Excel", "Module_de_Code", "code_")
If Len(code1) = 0 Then 'lancement de la macro si aucun code de verrouillage n'a été rentré
code = InputBox("Entrer le code de verrouillage") 'La variable reçoit la valeur entrée dans l'InputBox pour verrouiller les macros
If Len(code) = 0 Then 'si aucun code de taper
MsgBox "Aucun code n'a été rentré"
Else
SaveSetting "Excel", "Module_de_Code", "code_", code
MsgBox "le code de verrouillage/dé-verrouillage est le : " & code 'rappel du code tapé
End If
Else
code = InputBox("Entrer le code pour dé-verrouiller") 'La variable reçoit la valeur entrée dans l'InputBox pour dé-verrouiller les macros
If code = code1 Then
code = ""
SaveSetting "Excel", "Module_de_Code", "code_", code
Else
MsgBox "Mauvais code"
End If
End If
End Sub |
ça c'est pour le module de verrouillage/dévérouillage, et pour vérrouiller une macro, bah je place les lignes suivantes autour de la macro sensible (code VBA: feuil1 (accueil)):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
Private Sub CmdEditMat_Click()
Dim code1 As String
code1 = GetSetting("Excel", "Module_de_Code", "code_")
If Len(code1) = 0 Then 'lancement de la macro si aucun code de verrouillage n'a été rentré
' Lance le formulaire pour retirer/ajouter/modifier du matériel
Usf_Edit_matériel.StartUpPosition = 2
Usf_Edit_matériel.Show
Else
MsgBox "Macro verrouillée"
code = InputBox("Entrer le code pour dé-verrouiller") 'La variable reçoit la valeur entrée dans l'InputBox pour dé-verrouiller les macros
If code = code1 Then 'si on tape le bon code
' Lance le formulaire pour retirer/ajouter/modifier du matériel
Usf_Edit_matériel.StartUpPosition = 2
Usf_Edit_matériel.Show
Else
MsgBox "Mauvais code"
End If
End If
End Sub |
En gros, si un code existe, alors on verrouille le lancement de cette macro et demande de taper le code, si c'est le bon on lance la macro, sinon non
En revanche, si un code n'existe pas (via le cadenas lock/unlock) la macro peut être lancée easy...
les lignes ci-dessous permettent d'enregister et récupérer (respectivement) une variable dans ton fichier excel, et ce même après la ferméture (plutôt pratique pour un code, ou des fichiers plus complexes...)
SaveSetting "Excel", "Module_de_Code", "code_", code
GetSetting("Excel", "Module_de_Code", "code_")
PS/ le tutoriel pour plus tard
PPS: quand tout sera fini, tu pourras m'envoyer ton fichier (en MP si tu préfères), par curiosité de voir le produit finit ?
Partager