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.