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.