Valider la saisie des données, Excel VBA
Voici une explication détaillée et un code pour valider la saisie des données dans Excel en utilisant des UserForms et VBA.
Objectif :
Le but de ce projet est de créer un UserForm dans Excel VBA qui permet à l’utilisateur de saisir des données. Le formulaire va valider les données pour s’assurer qu’elles respectent certains critères (par exemple, ne pas laisser de champs vides, vérifier que les valeurs sont numériques là où cela est requis, etc.). Si les données sont invalides, le formulaire affichera un message d’erreur et empêchera l’utilisateur de soumettre le formulaire.
Étapes :
1. Créer un UserForm :
- Ouvrez Excel.
- Appuyez sur Alt + F11 pour ouvrir l’éditeur VBA.
- Dans l’éditeur VBA, allez dans Insertion > UserForm pour créer un nouveau formulaire.
- Ajoutez des contrôles (zones de texte, étiquettes, boutons) pour la saisie des données.
2. Ajouter des contrôles : Pour cet exemple, nous allons utiliser les contrôles suivants dans le UserForm :
- Deux TextBox pour la saisie de données (par exemple, Prénom, Âge).
- Un CommandButton pour soumettre le formulaire.
- Un contrôle Label pour afficher les messages d’erreur.
3. Ajouter le code VBA pour gérer la validation : Le code va vérifier si les champs de saisie sont remplis, s’assurer qu’une valeur numérique est entrée là où c’est nécessaire et afficher un message d’erreur si la validation échoue.
Code VBA :
' Code du UserForm ' Gestionnaire d'événements pour le bouton de soumission Private Sub CommandButtonSubmit_Click() ' Effacer les messages d'erreur précédents LabelError.Caption = "" ' Validation du champ Prénom If TextBoxName.Value = "" Then LabelError.Caption = "Le prénom est obligatoire." TextBoxName.SetFocus Exit Sub End If ' Validation du champ Âge (vérification numérique) If TextBoxAge.Value = "" Then LabelError.Caption = "L'âge est obligatoire." TextBoxAge.SetFocus Exit Sub ElseIf Not IsNumeric(TextBoxAge.Value) Then LabelError.Caption = "Veuillez entrer un nombre valide pour l'âge." TextBoxAge.SetFocus Exit Sub End If ' Si la validation passe, poursuivre avec les actions suivantes (par exemple, stocker les données, fermer le formulaire) MsgBox "Les données sont valides. Le formulaire va maintenant se fermer.", vbInformation ' Exemple : Enregistrer les données dans une feuille de calcul (si nécessaire) Sheets("FeuilleDeDonnées").Range("A1").Value = TextBoxName.Value Sheets("FeuilleDeDonnées").Range("A2").Value = TextBoxAge.Value ' Fermer le formulaire Unload Me End Sub ' Gestionnaire d'événements pour réinitialiser le formulaire (effacer les champs et les messages d'erreur) Private Sub CommandButtonReset_Click() TextBoxName.Value = "" TextBoxAge.Value = "" LabelError.Caption = "" End Sub ' Gestionnaire d'événements pour fermer le formulaire Private Sub CommandButtonClose_Click() Unload Me End Sub
Explication du code :
1. CommandButtonSubmit_Click :
- Cet événement est déclenché lorsque l’utilisateur clique sur le bouton « Soumettre ».
- La première ligne efface tout message d’erreur existant (LabelError.Caption = « »).
- Il vérifie si le champ TextBoxName est vide. Si c’est le cas, un message d’erreur est affiché, et le focus est rétabli sur TextBoxName.
- Ensuite, il vérifie si le champ TextBoxAge est vide ou contient une valeur non numérique. Si l’une de ces conditions échoue, un message d’erreur est affiché, et le focus est rétabli sur TextBoxAge.
- Si les deux champs passent la validation, un message de succès est affiché (MsgBox), et les données sont enregistrées dans une feuille Excel (Sheets(« FeuilleDeDonnées« ).Range(« A1 »).Value).
- Enfin, le formulaire est fermé avec Unload Me.
2. CommandButtonReset_Click :
- Cet événement est déclenché lorsque l’utilisateur clique sur le bouton « Réinitialiser ».
- Il efface toutes les valeurs des champs (TextBoxName et TextBoxAge) et le message d’erreur (LabelError.Caption).
3. CommandButtonClose_Click :
- Cet événement est déclenché lorsque l’utilisateur clique sur le bouton « Fermer ».
- Il ferme simplement le formulaire avec Unload Me.
Validation supplémentaire :
Vous pouvez ajouter d’autres vérifications de validation en fonction des types de données que vous collectez. Voici quelques exemples :
Exemple 1 : Validation de l’email (version simple) :
If Not IsEmailValid(TextBoxEmail.Value) Then LabelError.Caption = "Veuillez entrer une adresse e-mail valide." TextBoxEmail.SetFocus Exit Sub End If
Fonction de validation simple pour l’email :
Function IsEmailValid(ByVal email As String) As Boolean Dim emailPattern As String emailPattern = "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$" IsEmailValid = email Like emailPattern End Function
Exemple 2 : Validation de la date :
If Not IsDate(TextBoxDate.Value) Then LabelError.Caption = "Veuillez entrer une date valide." TextBoxDate.SetFocus Exit Sub End If
Exemple 3 : Validation de la longueur du texte :
If Len(TextBoxName.Value) < 3 Then LabelError.Caption = "Le prénom doit contenir au moins 3 caractères." TextBoxName.SetFocus Exit Sub End If
Conclusion :
Avec cette approche, vous pouvez créer un formulaire de saisie de données robuste et flexible avec validation dans Excel VBA. Vous pouvez facilement étendre les règles de validation pour répondre à vos besoins spécifiques, que ce soit pour collecter du texte, des nombres, des dates, ou même des types de données plus complexes.
Ce formulaire garantit que l’utilisateur saisit des données valides avant de les soumettre, ce qui aide à maintenir l’intégrité des données et à réduire les erreurs dans votre fichier Excel.