Accueil | Ce site | CV | Excel | Livre dor | Macros XL4 | Modèles | VBA

Fig. 1 - Exemple de zone de dialogue où une information
est attendue de lutilisateur.
De nombreux développements utilisent au moins un UserForm (ou zone de dialogue, figure 1). Si une information est attendue de lutilisateur, il faut sassurer quelle a été fournie, avant de poursuivre lexécution du programme. Certaines vérifications peuvent être effectuées en temps réel grâce aux événements associés aux contrôles (les objets que contient le UserForm), en particulier les événements Change et BeforeUpdate.
Cependant, ces événements ne peuvent suffire à sassurer quaucune information ne manque. Si un contrôle nest jamais sélectionné par lutilisateur, aucun événement relatif à ce contrôle ne survient, et le code VBA éventuellement associé à ces contrôles nest pas exécuté.
Cest pourquoi jai développé la fonction Controle, à lancer lorsque lutilisateur clique sur le bouton de validation du UserForm, ici le bouton OK. Il sagit du principal composant du module MOutil.
Cette fonction permet de vérifier si toutes les informations attendues dans un UserForm ont été fournies par lutilisateur, et dafficher si nécessaire, le(s) message(s) derreur adapté(s). Elle sert également à vérifier la pertinence et la cohérence de ces informations.
La fonction Controle suffit pour effectuer nimporte quelle vérification, mais elle intervient a posteriori. La bonne approche consiste à combiner les possibilités offertes par la gestion d'événements, et la fonction Controle.
Voici un exemple de UserForm, pour lequel cette combinaison doutils est exploitée.
Une version complète du code de la fonction Controle est reproduit et commenté, ainsi quune version simplifiée.
Quelle que soit linformation devant être entrée par lutilisateur, la vérification à effectuer peut être ramenée à un schéma constant :
Au moment où le UserForm est affiché, tous les contrôles pour lesquels une information est attendue de lutilisateur possèdent des caractéristiques (leurs propriétés) connues.
Pour chaque contrôle, lintervention de lutilisateur, si elle a lieu, modifie au moins lune des propriétés initiales. Lors de la validation, il est donc aisé de tester la valeur de la propriété concernée pour déterminer si une modification est ou non intervenue.
En outre, si modification il y a eu, on peut également sassurer que celle-ci est pertinente :
Chaque anomalie peut être détectée à laide dune expression dont le résultat est un booléen. Si lexpression est vraie, il faut alors :
Quelle que soit lanomalie, il suffit de passer à la fonction Controle l'expression idoine et les arguments relatifs au message à afficher, à la position du curseur et aux caractères à sélectionner pour réaliser les actions ci-dessus.
Deux versions de la version Controle sont présentées sur ce site.
Pour éviter que cette page ne soit trop lourde, leur code et leur fonctionnement sont présentés sur 2 pages distinctes :