Développer des contrôles de validation de données personnalisés, Excel VBA
Voici une explication détaillée et le code pour développer des contrôles de validation de données personnalisés en utilisant Excel VBA. Le code inclut des vérifications pour différents types de données et affiche des messages d’erreur lorsque des données invalides sont saisies.
Objectif :
Nous allons créer une solution de validation de données personnalisée en utilisant VBA dans Excel. Cela inclura :
- Valider différents types de données (par exemple, numérique, date, longueur du texte, formules personnalisées).
- Afficher des messages lorsque des données invalides sont saisies.
- Empêcher les entrées invalides ou les corriger automatiquement.
1. Configuration et préparation :
Avant de commencer avec le code, assurez-vous que les macros sont activées dans Excel et que l’éditeur VBA est ouvert.
Pour ouvrir l’éditeur VBA :
Appuyez sur Alt + F11 pour ouvrir l’éditeur VBA.
Insérez un nouveau module via Insertion -> Module dans l’éditeur VBA.
2. Code VBA pour des contrôles de validation de données personnalisés :
Ce code effectuera les tâches suivantes :
- Valider si une cellule contient une valeur numérique.
- Valider si une cellule contient une date dans une certaine plage.
- Vérifier la longueur du texte dans une cellule.
- Utiliser une validation de formule personnalisée.
Voici le code détaillé :
Sub CustomizedDataValidationChecks()
Dim ws As Worksheet
Dim cell As Range
Dim inputValue As Variant
Dim isValid As Boolean
Dim validationType As String
' Définir la feuille de travail cible
Set ws = ThisWorkbook.Sheets("Feuil1") ' Modifiez selon votre besoin
' Boucle à travers la plage de cellules à valider (vous pouvez ajuster la plage)
For Each cell In ws.Range("A1:A10") ' Modifiez cette plage selon votre besoin
inputValue = cell.Value
isValid = True ' On suppose que la valeur est valide à moins de prouver le contraire
' Ignorer les cellules vides
If IsEmpty(inputValue) Then GoTo ContinueLoop
' Déterminer le type de validation en fonction de la colonne ou d'une autre condition
validationType = DetermineValidationType(cell)
Select Case validationType
Case "Numeric"
' Vérifier si la valeur est numérique
If Not IsNumeric(inputValue) Then
MsgBox "Entrée invalide dans la cellule " & cell.Address & ". Veuillez entrer une valeur numérique.", vbExclamation
cell.ClearContents ' Effacer l'entrée invalide
isValid = False
End If
Case "Date"
' Vérifier si la valeur est une date valide et si elle est dans une plage spécifique
If Not IsDate(inputValue) Then
MsgBox "Date invalide dans la cellule " & cell.Address & ". Veuillez entrer une date valide.", vbExclamation
cell.ClearContents
isValid = False
Else
' Vérifier si la date est dans une plage spécifique (par exemple, entre le 01/01/2020 et le 31/12/2025)
If inputValue < DateSerial(2020, 1, 1) Or inputValue > DateSerial(2025, 12, 31) Then
MsgBox "La date dans la cellule " & cell.Address & " est hors de la plage autorisée. Veuillez entrer une date entre le 01/01/2020 et le 31/12/2025.", vbExclamation
cell.ClearContents
isValid = False
End If
End If
Case "TextLength"
' Vérifier si la longueur du texte est dans une plage spécifique
If Len(inputValue) < 5 Or Len(inputValue) > 20 Then
MsgBox "Le texte dans la cellule " & cell.Address & " doit comporter entre 5 et 20 caractères.", vbExclamation
cell.ClearContents
isValid = False
End If
Case "CustomFormula"
' Utiliser une formule personnalisée pour la validation (par exemple, vérifier si la valeur commence par une lettre spécifique)
If Not inputValue Like "A*" Then
MsgBox "La valeur dans la cellule " & cell.Address & " doit commencer par la lettre 'A'.", vbExclamation
cell.ClearContents
isValid = False
End If
Case Else
' Validation par défaut (si nécessaire)
MsgBox "Aucune règle de validation définie pour la cellule " & cell.Address, vbInformation
End Select
' Passer à la cellule suivante si la validation échoue
ContinueLoop:
Next cell
MsgBox "Vérification de la validation des données terminée !", vbInformation
End Sub
' Fonction pour déterminer le type de validation en fonction de la colonne ou d'autres critères
Function DetermineValidationType(cell As Range) As String
If cell.Column = 1 Then
' La colonne A aura une validation numérique
DetermineValidationType = "Numeric"
ElseIf cell.Column = 2 Then
' La colonne B aura une validation de date
DetermineValidationType = "Date"
ElseIf cell.Column = 3 Then
' La colonne C aura une validation de longueur de texte
DetermineValidationType = "TextLength"
ElseIf cell.Column = 4 Then
' La colonne D aura une validation de formule personnalisée
DetermineValidationType = "CustomFormula"
Else
' Cas par défaut
DetermineValidationType = "Default"
End If
End Function
Explication du code :
1. Configuration de la feuille et de la plage :
- Le code commence par définir la feuille de travail ws où la validation se déroulera.
- La plage Range(« A1:A10″) spécifie que les vérifications de validation s’appliquent aux cellules de cette plage. Vous pouvez modifier cette plage selon vos besoins.
2. Boucle à travers chaque cellule :
- Le code parcourt chaque cellule de la plage définie et récupère la valeur saisie dans la cellule (inputValue).
3. Validation selon la colonne :
- La fonction DetermineValidationType attribue un type de validation spécifique à chaque colonne. Par exemple :
- La colonne 1 (A) aura une validation numérique.
- La colonne 2 (B) aura une validation de date.
- La colonne 3 (C) vérifiera la longueur du texte.
- La colonne 4 (D) appliquera une formule personnalisée pour la validation.
- Cela permet d’avoir une validation flexible pour différentes colonnes.
4. Vérifications de validation des données :
- Validation numérique : Vérifie que la valeur entrée est bien un nombre. Si ce n’est pas le cas, un message d’erreur est affiché et la cellule est vidée.
- Validation de date : Vérifie si la valeur est une date valide et si elle est dans une plage spécifique (par exemple, entre le 01/01/2020 et le 31/12/2025).
- Validation de longueur de texte : Vérifie que la longueur du texte est comprise entre 5 et 20 caractères.
- Validation de formule personnalisée : Dans cet exemple, la règle personnalisée vérifie si la valeur commence par la lettre « A ». Vous pouvez modifier cette formule selon vos besoins.
5. Message d’erreur :
- Si une entrée est invalide, une MsgBox apparaît pour alerter l’utilisateur du type d’erreur.
- Les données invalides sont effacées de la cellule (cell.ClearContents), et l’utilisateur doit les corriger.
Comment exécuter le code :
1. Ouvrir l’éditeur VBA (Alt + F11).
2. Insérer un module (Cliquez sur Insertion -> Module).
3. Coller le code dans le module.
4. Exécuter le code en appuyant sur F5 ou en utilisant le bouton Exécuter dans l’éditeur.
Conseils de personnalisation :
- Modifiez la plage Range(« A1:A10″) pour valider d’autres plages de cellules selon vos besoins.
- Vous pouvez ajuster les règles de validation à l’intérieur du bloc Select Case pour les adapter à vos besoins, par exemple, en ajoutant de nouveaux types de validation.
- Pour la validation de formule personnalisée, remplacez Like « A* » par la condition souhaitée (par exemple, vérifier si la valeur a une longueur spécifique, correspond à une expression régulière, etc.).
Cette approche fournit une méthode flexible et robuste pour gérer des contrôles de validation de données personnalisés dans Excel via VBA.