Bonjour à tous,
Comme l'indique le titre du post, j'aimerais comprendre ce que fais Excel (il fait surement ce que je lui demande mais je trouve ça bizarre).
J'ai dans un classeur test écris les fonctions suivantes :
- construire_t qui construit un tableau avec les 26 lettres de l'alphabet en minuscule et en majuscule ainsi que les nombres de 0 à 10.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Function construire_t() As Variant construire_t = Array("", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", _ "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", _ "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z") End Function
- chaine_alea qui construit une chaine de caractères avec les caractères présent dans le tableau que construit la fonction précédant.
La longueur de cette chaine est passée en paramètre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Function chaine_alea(i As Long) As String Dim t: t = construire_t() Randomize Dim j&, k& For k = 1 To i chaine_alea = chaine_alea & t(Application.WorksheetFunction.RandBetween(0, 62)) Next k End Function
Ensuite je protège la feuille active avec un Password aléatoire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Sub protec() Dim mdp$: mdp = chaine_alea(3) ActiveSheet.Protect Password:=mdp MsgBox mdp End Sub
Le but maintenant et d'ôter la protection de la feuille.
Je boucle bêtement sur tous les Password possible et sors de la boucle si la feuille est déverrouillée en affichant le Password qui a déverrouillé la feuille :
Le problème est là, en fait quand je verrouille la feuille j'ai un MsgBox qui me dit avec quel Password, lorsque je déverrouille, j'affiche aussi le Password qui a déverrouille.
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 Sub unprotec() Dim t: t = construire_t() Dim i&, j&, k& On Error Resume Next For i = 0 To 62 For j = 0 To 62 For k = 0 To 62 ActiveSheet.Unprotect Password:=t(i) & t(j) & t(k) If Not ActiveSheet.ProtectContents Then MsgBox t(i) & t(j) & t(k) Exit Sub End If Next k Next j Next i End Sub
Mais ce n'est pas le même
Si quelqu’un sait pourquoi j’ai cette différence, je suis très curieux de savoir
Merci d’avance pour votre intérêt
Partager