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