Générer un mot de passe aléatoire, Excel VBA
Voici un code VBA détaillé pour générer un mot de passe aléatoire avec une explication.
Objectif :
Nous souhaitons générer un mot de passe aléatoire à l’aide de VBA dans Excel. Ce mot de passe comportera un mélange de lettres majuscules, de lettres minuscules, de chiffres et de caractères spéciaux. Vous pourrez aussi spécifier la longueur du mot de passe.
Étapes du Code VBA pour Générer un Mot de Passe
1. Configuration du Code VBA :
- Tout d’abord, ouvrez le classeur Excel où vous souhaitez créer la macro de génération de mot de passe.
- Appuyez sur Alt + F11 pour ouvrir l’éditeur VBA.
- Dans l’éditeur VBA, cliquez sur Insertion > Module pour ajouter un nouveau module.
2. Code VBA Explication :
Sub GeneratePassword() ' Définir les variables Dim passwordLength As Integer Dim i As Integer Dim password As String Dim charSet As String Dim randomIndex As Integer ' Définir l'ensemble de caractères autorisés dans le mot de passe ' Lettres majuscules, lettres minuscules, chiffres et caractères spéciaux charSet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()_-+=<>?" ' Demander à l'utilisateur la longueur du mot de passe passwordLength = InputBox("Entrez la longueur du mot de passe", "Longueur du mot de passe", 12) ' Vérifier que l'utilisateur a saisi un nombre valide If passwordLength < 1 Then MsgBox "Veuillez entrer une longueur de mot de passe valide (supérieure à 0).", vbExclamation Exit Sub End If ' Initialiser la variable du mot de passe à une chaîne vide password = "" ' Générer le mot de passe For i = 1 To passwordLength ' Générer un index aléatoire à partir de l'ensemble de caractères randomIndex = Int((Len(charSet) * Rnd) + 1) ' Ajouter le caractère sélectionné aléatoirement à la chaîne du mot de passe password = password & Mid(charSet, randomIndex, 1) Next i ' Afficher le mot de passe généré MsgBox "Votre mot de passe généré est : " & password, vbInformation, "Mot de passe généré" End Sub
Explication Détail du Code :
1. Déclaration des Variables :
- passwordLength : Cela stocke la longueur du mot de passe que l’utilisateur va fournir.
- i : Un compteur utilisé pour faire défiler le processus de génération du mot de passe.
- password : C’est la chaîne finale du mot de passe qui sera construite.
- charSet : Une chaîne qui contient tous les caractères qui peuvent être utilisés pour le mot de passe (lettres majuscules, lettres minuscules, chiffres et caractères spéciaux).
- randomIndex : Un index aléatoire utilisé pour sélectionner un caractère dans charSet.
2. Définition de l’Ensemble de Caractères :
- charSet contient tous les caractères possibles pour le mot de passe, y compris :
- Lettres majuscules : ABCDEFGHIJKLMNOPQRSTUVWXYZ
- Lettres minuscules : abcdefghijklmnopqrstuvwxyz
- Chiffres : 0123456789
- Caractères spéciaux : !@#$%^&*()_-+=<>?
- Vous pouvez modifier cette variable charSet pour inclure ou exclure certains caractères selon vos besoins.
3. Demande à l’Utilisateur de la Longueur du Mot de Passe :
- La fonction InputBox demande à l’utilisateur de saisir la longueur souhaitée du mot de passe.
- La valeur par défaut est définie sur 12, mais l’utilisateur peut la modifier.
- Nous nous assurons également que la longueur du mot de passe est supérieure à 0. Si l’utilisateur entre un nombre inférieur à 1, un message d’erreur s’affiche et le programme se termine.
4. Boucle de Génération du Mot de Passe :
- La boucle For s’exécute de 1 à la longueur du mot de passe définie par l’utilisateur.
- À l’intérieur de la boucle, nous générons un index aléatoire en utilisant la fonction Rnd.
- Rnd génère un nombre aléatoire entre 0 et 1. En le multipliant par la longueur de charSet (Len(charSet)), on obtient un nombre qui correspond à l’intervalle des indices de la chaîne.
- Int() arrondit le résultat vers le bas pour garantir que l’index soit dans les limites de charSet.
- Mid(charSet, randomIndex, 1) sélectionne le caractère à la position randomIndex dans charSet et l’ajoute à la chaîne password.
5. Affichage du Mot de Passe :
- Une fois la boucle terminée, le mot de passe est complètement généré.
- Une boîte de message (MsgBox) affiche le mot de passe généré à l’utilisateur.
Comment le Code Fonctionne :
- Lorsque vous exécutez la macro GeneratePassword, une boîte de dialogue s’affiche pour demander la longueur du mot de passe.
- Après avoir saisi la longueur (par exemple, 12), la macro génère un mot de passe composé de caractères aléatoires provenant de l’ensemble charSet.
- Le mot de passe généré s’affiche ensuite dans une boîte de message.
Personnalisation Supplémentaire :
- Personnalisation de l’Ensemble de Caractères : Vous pouvez modifier la chaîne charSet pour inclure ou exclure certains caractères selon les exigences spécifiques pour votre mot de passe. Par exemple, si vous souhaitez exclure les caractères spéciaux, il vous suffit de les supprimer de charSet.
- Complexité du Mot de Passe : Si vous souhaitez imposer certaines règles au mot de passe (par exemple, au moins une lettre majuscule, une lettre minuscule, un chiffre et un caractère spécial), vous pouvez modifier le code pour vérifier si le mot de passe respecte ces critères et le régénérer si nécessaire.
Exemple d’Amélioration :
Pour imposer la complexité du mot de passe, vous pouvez ajouter une fonction qui vérifie si le mot de passe respecte les critères. Si ce n’est pas le cas, le mot de passe est généré à nouveau.
Function IsPasswordValid(password As String) As Boolean Dim hasUpper As Boolean, hasLower As Boolean Dim hasNumber As Boolean, hasSpecial As Boolean Dim i As Integer ' Initialiser les indicateurs hasUpper = False hasLower = False hasNumber = False hasSpecial = False ' Boucler à travers les caractères du mot de passe For i = 1 To Len(password) If Mid(password, i, 1) Like "[A-Z]" Then hasUpper = True If Mid(password, i, 1) Like "[a-z]" Then hasLower = True If Mid(password, i, 1) Like "[0-9]" Then hasNumber = True If Mid(password, i, 1) Like "[!@#$%^&*()_-+=<>?]" Then hasSpecial = True Next i ' Retourner True si toutes les conditions sont remplies IsPasswordValid = hasUpper And hasLower And hasNumber And hasSpecial End Function
Vous pouvez ensuite appeler cette fonction IsPasswordValid à l’intérieur de la boucle de génération du mot de passe pour vous assurer que le mot de passe respecte vos critères de sécurité.
Conclusion :
Ce code VBA offre une méthode simple et efficace pour générer des mots de passe aléatoires dans Excel. Il est facilement personnalisable en fonction de l’ensemble de caractères, de la longueur du mot de passe, et des exigences de complexité. En comprenant comment fonctionne l’index aléatoire et la sélection de caractères, vous pouvez adapter ce code à des besoins plus complexes.