Validation des données, Excel VBA

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ù lutilisateur 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.

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.
Facebook
Twitter
LinkedIn
WhatsApp
Email
Print
0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x