Si vous savez quel est le mot de passe, allez-y et ouvrez le document Excel. Cliquez ensuite sur Fichier> Enregistrer sous. À gauche du bouton Enregistrer se trouve une petite liste déroulante intitulée Outils. Cliquez dessus, puis cliquez sur Options générales. Supprimez-y les entrées de mot de passe et cliquez sur OK. Enregistrez le document.
Si vous ne savez pas quel est le mot de passe, vous pouvez utiliser VBA pour le trouver. Si je devais deviner, votre utilisateur n'a probablement pas utilisé un mot de passe super fort, nous pourrions donc utiliser une méthode de type force brute pour le trouver. Le code ci-dessous est approximatif, mais il m'a aidé à trouver un mot de passe faible et perdu sur plusieurs documents de mes utilisateurs. Il vérifie les mots de passe de n'importe quelle longueur avec les caractères ASCII de 1 à z. Vous devez l'appeler depuis la fenêtre immédiate et attendre plusieurs minutes comme ceci:
? GetPassword("D:\mywkbk.xlsx")
-
Public Function GetPassword(ByRef sFileName As String) As String
On Error Resume Next
Dim pw As String
pw = ""
Do
VBA.Err.Clear
pw = GenerateNextPassword(pw)
Application.Workbooks.Open sFileName, False, True, , pw, pw
VBA.DoEvents
Loop While VBA.Err.Number = 5408
GetPassword = pw
End Function
Public Function GenerateNextPassword(ByRef sCurrentPassword As String) As String
Const MAX_CHAR = 122
Const MIN_CHAR = 49
Dim sCurrentPasswordMax As String
Dim sNewPassword As String
Dim i As Long
sCurrentPasswordMax = String(Len(sCurrentPassword), Chr(MAX_CHAR))
If sCurrentPassword = sCurrentPasswordMax Then
'do an increment that changes the length
sNewPassword = String(Len(sCurrentPassword) + 1, Chr(MIN_CHAR))
Debug.Print Now(); ": "; sNewPassword
ElseIf Asc(Right(sCurrentPassword, 1)) = MAX_CHAR Then
'do an increment that changes multiple characters
sNewPassword = Left(sCurrentPassword, Len(sCurrentPassword) - 1) & Chr(MIN_CHAR)
For i = Len(sCurrentPassword) - 1 To 1 Step -1
sNewPassword = Left(sNewPassword, i - 1) & Chr(Asc(Mid(sNewPassword, i, 1)) + 1) & Mid(sNewPassword, i + 1)
If Asc(Mid(sCurrentPassword, i, 1)) <> MAX_CHAR Then
Exit For
End If
Next i
Else
'do an increment on the rightmost character
sNewPassword = Left(sCurrentPassword, Len(sCurrentPassword) - 1) & Chr(Asc(Right(sCurrentPassword, 1)) + 1)
End If
GenerateNextPassword = sNewPassword
End Function
decrypt xls
ou quelque chose de similaire.