Je ne comprends pas trop ce que tu souhaites réaliser ni l'utilité de la variable publique mdp.
Pourrais-tu expliquer ce que tu souhaites réaliser en français (pas en vba)?
Je ne comprends pas trop ce que tu souhaites réaliser ni l'utilité de la variable publique mdp.
Pourrais-tu expliquer ce que tu souhaites réaliser en français (pas en vba)?
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
Lorsque je livre le fichier, j'ai prévu un mot de passe. Mais le responsable du service souhaite pouvoir changer de mot de passe quand bon lui semble.
C'est pourquoi j'ai créé dans la feuille "INTRO" du fichier un bouton qui permet d'ouvrir un formulaire. Dans ce formulaire, il indique l'ancien mot de passe (mot de passe stocké dans la feuille "Passe" en cellule A1, feuille masquée et rendue inaccessible, puisque l'éditeur de Vba est verrouillé).
Une fois le mot de passe changé, il doit être actif pour chacune des feuilles du fichier (celles concernées par ce mot de passe). Il remplace l'ancien mot de passe.
Donc si je comprend bien le fonctionnement (que j'ai testé, et qui fonctionne dans ton fichier), je dois également supprimer tous les "mdp"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Private Sub Worksheet_Activate() ActiveSheet.Unprotect mdp Dim An2 As Byte, N As Integer An2 = DatePart("ww", Date, 2, 2) An = Year(Now()) Range("F3") = "CLAS" & "-" & "CHV" & "-" & An & "-" & An2 ActiveSheet.Protect mdp, UserInterfaceOnly:=True End Sub
j'avais supprimer mes message parce que j'avais des -1 que je ne comprenais pas la justification!
pas cool pour toi mais pas cool pour moi!
j’accepte les -1 mais quand il devient systématique je ne m'engage plus!
ce n'est pas parce que je suis un mauvais joueur mais par incompréhension!
en fait c'est ce genre se solution que je proposai depuis le début!
dernière mouture!
Dernière modification par Invité ; 13/03/2018 à 15h02.
Je ne mets jamais de -1, car pour moi toute réponse vaut la peine d'être remerciée, même si elle est déplaisante.
J'ai mis en place ton code, mais j'ai un message d'erreur lorsque je clique sur le bouton pour afficher le formulaire de changement de mot de passe - "Erreur de compilation - Variable ou procédure attendue, et non un module"
Après la validation du nouveau mot de passe dans le formulaire, tu dois:
- la déprotéger avec l'ANCIEN mot de passe;
- la protéger avec le nouveau.
Puis tu dois stocker le nouveau mot de passe à la place de l'ancien. Je te propose de t'inspirer de la proc suivante, à laquelle tu passes les deux MDP. Evidemment, si toutes les feuilles ne sont pas protégées, tu devras placer une condition au sein de la boucle
Tu appelles alors cette proc sur le btnValider_Click et tu n'oublies pas de stocker le nouveau MDP à la place de l'ancien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Sub ProtectWithNewMDP(OldMDP As String, NewMDP As String) Dim ws As Worksheet For Each ws In ThisWorkbook ws.Unprotect OldMDP ws.Protect NewMDP, UserInterfaceOnly:=True Next End Sub
Essaie toujours de découper ton code en procédures et fonctions qui n'ont qu'une responsabilité.
Ton userform a la responsabilité de saisir le nouveau mot de passe. Ma proc a la responsabilité de modifier les MDP des feuilles protégées.
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
Bonjour Pierre, bonjour le forum,
Toutes mes excuses d'avoir tardé à te répondre, mais après notre dernière discussion j'ai du partir en réunion et après il était un peu tard.
Pour modifier le mot de passe, j'utilise ce code qui est lié au bouton "Valider" du formulaire. Si j'ai bien compris, je dois faire une compilation du code que tu m'as proposé, modifié bien entendu, et du mien ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 Private Sub CmbValide_Click() Unload Me mdp = Sheets("Passe").Cells(1, 1).Value If AncMdp.Value = mdp Then Sheets("Passe").Cells(1, 1).Value = NouvMdp.Value mdp = NouvMdp.Value Else MsgBox "L'ancien mot de passe n'est pas valable" End If End Sub
Partager