Création d’un système d’authentification des utilisateurs, Excel VBA
Voici une explication détaillée de la création d’un système d’authentification des utilisateurs dans Excel à l’aide de VBA.
1. Vue d’ensemble du système d’authentification des utilisateurs
Un système d’authentification d’utilisateur typique comprend :
- Un formulaire de connexion où l’utilisateur saisit ses identifiants (nom d’utilisateur et mot de passe).
- Un mécanisme permettant de valider ces identifiants contre un jeu de données stocké (par exemple, une base de données ou une liste dans Excel).
- Un accès restreint à certaines parties du classeur selon l’authentification réussie.
2. Préparation du classeur Excel
Avant de commencer à coder, nous allons configurer un système simple :
1. Feuille1 : Cette feuille contiendra une liste de noms d’utilisateurs et de mots de passe.
- Dans Feuille1, créez un tableau avec les colonnes suivantes : Nom d’utilisateur et Mot de passe.
- Vous pouvez remplir ce tableau avec quelques utilisateurs et mots de passe à des fins de test.
Exemple :
| Nom d’utilisateur | Mot de passe |
|——————-|————–|
| admin | admin123 |
| user1 | password1 |
| user2 | password2 |
2. Feuille2 : Ce sera une feuille protégée où seuls les utilisateurs authentifiés pourront accéder à certaines informations ou fonctionnalités.
3. Création du formulaire de connexion
Nous allons créer un formulaire de connexion de base avec deux champs : Nom d’utilisateur et Mot de passe.
Étapes :
1. Ouvrez l’éditeur VBA en appuyant sur ALT + F11.
2. Dans l’éditeur, allez dans Insertion > UserForm. Un nouveau formulaire apparaîtra.
3. Ajoutez les contrôles suivants au formulaire :
- Deux contrôles TextBox (un pour le Nom d’utilisateur et un pour le Mot de passe).
- Deux contrôles Label (un pour le Nom d’utilisateur et un pour le Mot de passe).
- Un CommandButton (pour la connexion).
- Optionnellement, un contrôle Label pour afficher des messages (par exemple, Label3 pour les erreurs).
Le formulaire devrait ressembler à ceci :
- Nom d’utilisateur [TextBox1]
- Mot de passe [TextBox2] (définir la propriété PasswordChar sur * pour masquer l’entrée)
- Se connecter [CommandButton]
4. Rédaction du code VBA pour l’authentification
Maintenant que nous avons créé le formulaire, nous allons écrire le code pour vérifier le nom d’utilisateur et le mot de passe saisis par rapport aux données de Feuille1.
Explication du code :
1. Validation de la connexion de l’utilisateur : Nous allons parcourir la liste des utilisateurs (nom d’utilisateur et mot de passe) stockée dans Feuille1 et comparer ces informations avec celles saisies. Si une correspondance est trouvée, nous authentifions l’utilisateur et lui donnons accès. Sinon, nous afficherons un message d’erreur.
2. Code pour l’authentification des utilisateurs : Voici le code VBA qui va dans l’événement Click du bouton CommandButton (le bouton de connexion) pour effectuer l’authentification :
Private Sub CommandButton1_Click() Dim ws As Worksheet Dim lastRow As Long Dim username As String Dim password As String Dim i As Long Dim validUser As Boolean ' Récupérer le nom d'utilisateur et le mot de passe saisis dans le formulaire username = TextBox1.Value password = TextBox2.Value ' Vérifier si les champs nom d'utilisateur et mot de passe sont remplis If username = "" Or password = "" Then MsgBox "Veuillez entrer un nom d'utilisateur et un mot de passe.", vbExclamation Exit Sub End If ' Définir la référence à la feuille où sont stockés les utilisateurs (Feuille1) Set ws = ThisWorkbook.Sheets("Feuille1") ' Trouver la dernière ligne de données dans la feuille (pour la liste des utilisateurs) lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row ' Initialiser la variable pour vérifier la validité de l'utilisateur validUser = False ' Parcourir chaque ligne de la feuille et comparer avec les identifiants saisis For i = 2 To lastRow ' On commence à la ligne 2 (en supposant que la ligne 1 est l'en-tête) If ws.Cells(i, 1).Value = username And ws.Cells(i, 2).Value = password Then validUser = True Exit For ' Quitter la boucle si une correspondance est trouvée End If Next i ' Si l'utilisateur est valide, accorder l'accès ; sinon, afficher un message d'erreur If validUser Then MsgBox "Connexion réussie ! Accès accordé.", vbInformation ' Optionnellement, vous pouvez cacher le formulaire de connexion et afficher la zone protégée Me.Hide Sheets("Feuille2").Visible = True ' Afficher la feuille protégée Else MsgBox "Nom d'utilisateur ou mot de passe invalide.", vbCritical End If End Sub
Explication du code :
1. Variables :
- ws est utilisé pour référencer Feuille1, où sont stockés les noms d’utilisateurs et mots de passe.
- lastRow permet de déterminer le nombre de lignes dans la liste des utilisateurs pour pouvoir boucler dessus.
- username et password contiennent les valeurs saisies par l’utilisateur dans le formulaire.
- validUser est un indicateur qui permet de savoir si la connexion est réussie.
2. Validation des entrées : Le code vérifie d’abord si les champs nom d’utilisateur et mot de passe sont vides et affiche un message si c’est le cas.
3. Boucle de vérification : Il parcourt toutes les lignes de Feuille1 pour comparer les identifiants saisis avec ceux stockés. Si une correspondance est trouvée, l’utilisateur est authentifié.
4. Accorder l’accès : Si l’utilisateur est valide, un message de réussite est affiché et le formulaire est caché, tandis que la feuille protégée (Feuille2) devient visible.
5. Gestion des erreurs : Si aucun utilisateur valide n’est trouvé, un message d’erreur s’affiche.
5. Ajouter une sécurité à la feuille protégée
Une fois l’utilisateur authentifié, nous pouvons protéger Feuille2 en la cachant au départ et en la montrant après une authentification réussie.
Vous pouvez protéger une feuille en définissant sa propriété Visible à xlSheetVeryHidden, et une fois l’utilisateur authentifié, vous pouvez la rendre visible avec le code suivant :
Sheets("Feuille2").Visible = xlSheetVeryHidden ' Cacher la feuille initialement
6. Lancer l’authentification
Pour que le système d’authentification se lance automatiquement au démarrage du classeur, ajoutez le code suivant dans le module ThisWorkbook de l’éditeur VBA :
Private Sub Workbook_Open() ' Afficher le formulaire de connexion lors de l'ouverture du classeur UserForm1.Show End Sub
Cela affichera automatiquement le formulaire de connexion dès que le classeur sera ouvert, forçant l’utilisateur à s’authentifier.
7. Améliorations et considérations
1. Hashage des mots de passe : Ce système utilise des mots de passe en clair, mais dans un scénario réel, il est préférable de hacher les mots de passe pour les protéger.
2. Ajout de délai d’expiration : Vous pourriez ajouter une limite de temps ou un nombre maximal de tentatives de connexion échouées.
3. Journalisation des tentatives : Pensez à enregistrer les tentatives de connexion échouées pour des raisons de sécurité.
4. Sécurité par niveaux : Vous pourriez étendre ce système pour gérer différents rôles d’utilisateur (par exemple, Administrateur, Utilisateur) et afficher des niveaux d’accès différents en fonction du rôle.
Conclusion
Ce code fournit une méthode simple mais efficace pour implémenter un système d’authentification des utilisateurs dans Excel à l’aide de VBA. En personnalisant ce système, vous pouvez ajouter des fonctionnalités supplémentaires comme la gestion des rôles, le cryptage des mots de passe, et bien plus encore.