Validation des données, Excel VBA
Voici le code détaillé en VBA pour la validation des données dans Excel, avec des explications.
Scénario :
Nous voulons valider les données entrées dans une feuille Excel, en particulier dans la colonne « A », où l’utilisateur peut entrer :
- Un nombre supérieur à 0.
- Une date valide dans la colonne « B » (au format « jj/mm/aaaa »).
- Un texte dans la colonne « C » qui doit être une chaîne non vide de 3 caractères minimum.
- Une adresse email valide dans la colonne « D » (par exemple « utilisateur@example.com »).
Code VBA :
Sub ValiderSaisie() Dim ws As Worksheet Dim derniereLigne As Long Dim i As Long Dim celluleA As Range, celluleB As Range, celluleC As Range, celluleD As Range Dim valide As Boolean ' Définir la référence de la feuille de travail Set ws = ThisWorkbook.Sheets("Feuil1") ' Trouver la dernière ligne avec des données dans la colonne A derniereLigne = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row ' Boucle sur chaque ligne de la ligne 2 à derniereLigne For i = 2 To derniereLigne ' Définir les références pour chaque colonne de la ligne actuelle Set celluleA = ws.Cells(i, 1) ' Colonne A : Validation du nombre Set celluleB = ws.Cells(i, 2) ' Colonne B : Validation de la date Set celluleC = ws.Cells(i, 3) ' Colonne C : Validation du texte Set celluleD = ws.Cells(i, 4) ' Colonne D : Validation de l'email ' Initialiser le drapeau de validité à True valide = True ' Valider le nombre dans la colonne A (doit être supérieur à 0) If Not IsNumeric(celluleA.Value) Or celluleA.Value <= 0 Then celluleA.Interior.Color = RGB(255, 0, 0) ' Fond rouge pour entrée invalide valide = False Else celluleA.Interior.Color = RGB(255, 255, 255) ' Réinitialiser à fond blanc End If ' Valider la date dans la colonne B (doit être une date valide) If Not IsDate(celluleB.Value) Then celluleB.Interior.Color = RGB(255, 0, 0) ' Fond rouge pour date invalide valide = False Else celluleB.Interior.Color = RGB(255, 255, 255) ' Réinitialiser à fond blanc End If ' Valider le texte dans la colonne C (doit être non vide et d'au moins 3 caractères) If Len(Trim(celluleC.Value)) < 3 Or Trim(celluleC.Value) = "" Then celluleC.Interior.Color = RGB(255, 0, 0) ' Fond rouge pour texte invalide valide = False Else celluleC.Interior.Color = RGB(255, 255, 255) ' Réinitialiser à fond blanc End If ' Valider l'email dans la colonne D (vérification du format) If Not EstEmailValide(celluleD.Value) Then celluleD.Interior.Color = RGB(255, 0, 0) ' Fond rouge pour email invalide valide = False Else celluleD.Interior.Color = RGB(255, 255, 255) ' Réinitialiser à fond blanc End If ' Si l'entrée n'est pas valide, afficher un message et arrêter la boucle If Not valide Then MsgBox "La saisie est invalide à la ligne " & i, vbExclamation Exit Sub End If Next i MsgBox "Toutes les saisies sont valides !", vbInformation End Sub ' Fonction pour vérifier si l'email est valide Function EstEmailValide(ByVal email As String) As Boolean Dim patternEmail As String Dim regEx As Object ' Modèle simple pour une adresse email patternEmail = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$" ' Créer un objet RegExp (expression régulière) Set regEx = CreateObject("VBScript.RegExp") regEx.IgnoreCase = True regEx.Global = True regEx.IgnoreCase = True regEx.Pattern = patternEmail ' Retourner si l'email correspond au modèle EstEmailValide = regEx.Test(email) End Function
Explication :
1. Référence de la feuille et plage de données :
- Set ws = ThisWorkbook.Sheets(« Feuil1 ») définit la feuille de travail où se fait la saisie des données (ici « Feuil1 »).
- derniereLigne est calculée pour déterminer la dernière ligne avec des données dans la colonne A. Cela permet de ne traiter que les lignes qui contiennent des données.
2. Boucle sur les lignes :
- La boucle For i = 2 To derniereLigne permet de passer en revue chaque ligne à partir de la ligne 2 (en supposant que la ligne 1 contient des en-têtes).
- À chaque itération, les variables celluleA, celluleB, celluleC et celluleD sont définies pour correspondre aux cellules de la ligne actuelle dans les colonnes A, B, C et D respectivement.
3. Validation des données :
-
- Colonne A (Validation du nombre) :
- If Not IsNumeric(celluleA.Value) Or celluleA.Value <= 0 vérifie que la valeur dans la colonne A est bien un nombre et qu’elle est supérieure à 0. Si ce n’est pas le cas, la cellule est colorée en rouge avec celluleA.Interior.Color = RGB(255, 0, 0).
- Colonne B (Validation de la date) :
- If Not IsDate(celluleB.Value) vérifie que la valeur dans la colonne B est une date valide. Si ce n’est pas le cas, la cellule est également colorée en rouge.
- Colonne C (Validation du texte) :
- If Len(Trim(celluleC.Value)) < 3 Or Trim(celluleC.Value) = « » s’assure que le texte dans la colonne C contient au moins 3 caractères et qu’il n’est pas vide.
- Colonne D (Validation de l’email) :
- Une fonction personnalisée EstEmailValide est utilisée pour vérifier si le texte dans la colonne D correspond à un format d’email valide. Cette fonction utilise une expression régulière pour vérifier le format de l’email.
- Colonne A (Validation du nombre) :
4. Gestion des erreurs :
- Si une des validations échoue pour une ligne, la cellule concernée est colorée en rouge, et une boîte de message apparaît pour indiquer la ligne avec des données invalides.
- Exit Sub est utilisé pour arrêter le traitement dès qu’une erreur est trouvée.
- Si toutes les entrées sont valides, un message de succès est affiché à la fin de la boucle.
5. Validation de l’email avec une expression régulière :
- Un objet RegExp (expressions régulières) est utilisé pour valider le format de l’email. Le modèle simple utilisé ici vérifie les éléments de base d’une adresse email (cela peut être amélioré pour plus de rigueur).
Comment utiliser le code :
1. Ouvrez votre classeur Excel où vous souhaitez appliquer la validation des données.
2. Appuyez sur Alt + F11 pour ouvrir l’éditeur VBA.
3. Insérez un nouveau module en cliquant sur Insertion > Module.
4. Copiez et collez le code VBA dans ce module.
5. Appuyez sur F5 ou exécutez la macro ValiderSaisie pour valider les données de votre feuille Excel.
Améliorations possibles :
- Vous pouvez améliorer la validation de l’email en utilisant un modèle d’expression régulière plus complexe.
- Vous pourriez ajouter des vérifications supplémentaires pour les types numériques (par exemple, s’assurer que les nombres sont des entiers ou qu’ils se situent dans un certain intervalle).
- L’interface utilisateur peut être améliorée en utilisant des messages MsgBox pour mettre en évidence toutes les lignes invalides après la validation complète, au lieu de s’arrêter à la première ligne invalide.