Bonjour,
Supposons donc que tu récupères la liste des mots de passe sur une feuille Excel en colonne A, A1 contenant un intitulé d'en-tête (les autres colonnes étant vides).
Function ValidPW(pw As String) As Boolean
Dim pwvalid(3) As Integer, i%, k%
If Len(pw) < 8 Then
ValidPW = False
Else
For i = 1 To Len(pw)
k = Asc(Mid(pw, i, 1))
Select Case k
Case 48 To 57
pwvalid(0) = 1
Case 65 To 90, 138, 140, 142, 159, 192 To 214, 216 To 221
pwvalid(1) = 2
Case 97 To 122, 154, 156, 158, 222 To 246, 248 To 255
pwvalid(2) = 4
Case Else
pwvalid(3) = 8
End Select
Next i
Select Case WorksheetFunction.Sum(pwvalid)
Case 7, 11, 13 To 15: ValidPW = True
Case Else: ValidPW = False
End Select
End If
End Function
Sub TestValidPW()
Dim aa, i%
aa = ActiveSheet.Range("A1").CurrentRegion
aa(1, 1) = "Validité"
For i = 2 To UBound(aa)
aa(i, 1) = IIf(ValidPW(aa(i, 1)), "Oui", "Non")
Next i
ActiveSheet.Range("B1").Resize(UBound(aa)).Value = aa
End Sub
Le code ci-dessus, à placer dans un Module Standard et la proc. TestValidPW à lancer, la feuille de mots de passe étant active.
Elle inscrira Oui ou Non selon que le mot de passe est valide ou non selon tes critères.
Si toutefois tu mettais d'autres éléments dans ta feuille et que la colonne mot de passe ne soit pas en A, il conviendrait d'isoler cette colonne de façon qu'elle soit encadrée par deux colonnes vides, et de modifier dans le code de la macro A1 par la colonne où se trouvent les mots de passe, par exemple F1, et B1 par la colonne voisine de la précédente, soit G1...
Remarque : la fonction vérifiant la validité n'exclut aucun caractère de la table ANSI, il s'ensuit que l'espace (caract. 32) de même que les caractères non visibles ou non imprimables demeurent des caractères valides... y compris les caract. antérieurs à 32, dits caractères de contrôle, qui ont toutefois assez peu de probabilité de se trouver dans un mot de passe !
Cordialement.