Guide Complet sur la Validation des Données, Excel VBA

Guide Complet sur la Validation des Données, Excel VBA
La validation des données dans Excel permet de contrôler ce que les utilisateurs peuvent entrer dans une cellule ou une plage de cellules. En utilisant VBA, vous pouvez automatiser le processus de configuration des règles de validation, garantissant l’intégrité des données et améliorant l’expérience utilisateur.
1. Bases de la Validation des Données en VBA Excel
Les règles de validation des données restreignent le type de données pouvant être saisies dans une cellule. Ces règles incluent :

  • Nombre entier
  • Décimal
  • Liste
  • Date
  • Heure
  • Longueur du texte
  • Formule personnalisée

En VBA, la validation des données est contrôlée par l’objet Validation de la classe Range.
2. Syntaxe pour Ajouter une Validation des Données en VBA
Pour appliquer la validation des données, nous utilisons :
Range("A1").Validation.Add Type, AlertStyle, Operator, Formula1, Formula2
Où :

  • Type : Spécifie le type de validation (par exemple, xlValidateWholeNumber, xlValidateList).
  • AlertStyle : Définit le style d’alerte (xlValidAlertStop, xlValidAlertWarning, xlValidAlertInformation).
  • Operator : Spécifie un opérateur pour la comparaison (xlBetween, xlGreater, xlLess, etc.).
  • Formula1 : Premier paramètre de la validation (par exemple, valeur minimale).
  • Formula2 : Deuxième paramètre (utilisé pour la validation basée sur une plage).

3. Exemples de Code VBA pour Différents Types de Validation des Données
3.1 Validation des Nombres Entiers (Entre 1 et 100)

Sub ValidateWholeNumber()
    With Range("B2").Validation
        .Delete
        .Add Type:=xlValidateWholeNumber, AlertStyle:=xlValidAlertStop, _
             Operator:=xlBetween, Formula1:=1, Formula2:=100
        .InputTitle = "Entrez un Nombre"
        .ErrorTitle = "Entrée Invalide"
        .InputMessage = "Veuillez entrer un nombre entier entre 1 et 100."
        .ErrorMessage = "Seuls les nombres entre 1 et 100 sont autorisés."
        .ShowInput = True
        .ShowError = True
    End With
End Sub
  • .Delete supprime toute validation existante avant d’appliquer les nouvelles règles.
  • .InputTitle et .InputMessage fournissent des instructions lorsque l’utilisateur sélectionne la cellule.
  • .ErrorTitle et .ErrorMessage définissent ce qui apparaît si la validation échoue.

3.2 Validation des Décimaux (Supérieurs à 10,5)

Sub ValidateDecimal()
    With Range("C2").Validation
        .Delete
        .Add Type:=xlValidateDecimal, AlertStyle:=xlValidAlertStop, _
             Operator:=xlGreater, Formula1:=10.5
        .InputTitle = "Entrée Décimale"
        .ErrorTitle = "Décimal Invalide"
        .InputMessage = "Entrez un nombre décimal supérieur à 10,5."
        .ErrorMessage = "La valeur doit être supérieure à 10,5."
    End With
End Sub
  • Assure que seuls les nombres décimaux supérieurs à 10,5 sont autorisés.

3.3 Validation par Liste (Menu Déroulant)

Sub ValidateList()
    With Range("D2").Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
             Operator:=xlBetween, Formula1:="Pomme,Banane,Cerise"
        .InputTitle = "Sélectionner un Fruit"
        .ErrorTitle = "Choix Invalide"
        .InputMessage = "Choisissez un fruit dans la liste déroulante."
        .ErrorMessage = "Seuls Pomme, Banane ou Cerise sont autorisés."
    End With
End Sub
  • Crée une liste déroulante avec des valeurs prédéfinies.

3.4 Validation des Dates (Entre Deux Dates)

Sub ValidateDate()
    With Range("E2").Validation
        .Delete
        .Add Type:=xlValidateDate, AlertStyle:=xlValidAlertStop, _
             Operator:=xlBetween, Formula1:="01/01/2023", Formula2:="12/31/2023"
        .InputTitle = "Entrez une Date"
        .ErrorTitle = "Date Invalide"
        .InputMessage = "Entrez une date entre le 01/01/2023 et le 31/12/2023."
        .ErrorMessage = "La date doit être dans la plage spécifiée."
    End With
End Sub
  • Assure que la date entrée est dans la plage spécifiée.

3.5 Validation par Formule Personnalisée (Seuls les Nombres Pares)

Sub ValidateCustomFormula()
    With Range("F2").Validation
        .Delete
        .Add Type:=xlValidateCustom, AlertStyle:=xlValidAlertStop, _
             Formula1:="=MOD(F2,2)=0"
        .InputTitle = "Seulement des Nombres Pairs"
        .ErrorTitle = "Entrée Invalide"
        .InputMessage = "Veuillez entrer un nombre pair."
        .ErrorMessage = "Seuls les nombres pairs sont autorisés."
    End With
End Sub
  • Utilise une formule personnalisée pour autoriser uniquement les nombres pairs.

4. Effacer la Validation des Données en VBA
Pour supprimer la validation d’une plage spécifique :

Sub ClearValidation()
    Range("A1:F10").Validation.Delete
End Sub

Pour supprimer la validation de l’ensemble de la feuille de calcul :

Sub ClearAllValidation()
    Dim ws As Worksheet
    Set ws = ActiveSheet
    ws.Cells.Validation.Delete
End Sub

5. Vérifier si une Cellule a une Validation des Données
Pour vérifier si une cellule a une validation :

Sub CheckValidation()
    If Range("A1").Validation.Type <> xlValidAlertStop Then
        MsgBox "La Validation des Données est appliquée.", vbInformation, "Vérification"
    Else
        MsgBox "Aucune Validation des Données trouvée.", vbExclamation, "Vérification"
    End If
End Sub

6. Appliquer une Validation des Données à une Plage Dynamique
Cet exemple applique une validation par liste à une plage dynamique :

Sub DynamicValidation()
    Dim lastRow As Long
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row 'Trouver la dernière ligne utilisée dans la colonne A
    With Range("B2:B" & lastRow).Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
             Formula1:="Pomme,Banane,Cerise"
        .InputMessage = "Sélectionnez un fruit."
        .ErrorMessage = "Sélection invalide!"
    End With
End Sub
  • Détecte automatiquement la dernière ligne et applique la validation de manière dynamique.

7. Utiliser des Plages Nommées dans la Validation des Données
Pour utiliser une plage nommée dans la validation par liste :

Sub ValidateNamedRange()
    With Range("G2").Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
             Formula1:="=FruitList" ' FruitList est une plage nommée
        .InputTitle = "Sélectionner un Fruit"
        .InputMessage = "Choisissez un fruit dans la liste."
    End With
End Sub

Assurez-vous que « FruitList » est une plage nommée contenant des valeurs.
Conclusion

VBA permet de facilement automatiser la validation des données dans Excel, garantissant une saisie correcte et améliorant l’expérience utilisateur. Vous pouvez :

✔ Appliquer différents types de validation

✔ Utiliser des plages dynamiques pour la flexibilité

✔ Personnaliser les messages d’erreur et d’entrée

✔ Utiliser des formules pour des validations avancées

Facebook
Twitter
LinkedIn
WhatsApp
Email
Print
0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x