Accueil | Ce site | CV | Excel | Livre dor | Macros XL4 | Modèles | VBA
Expression est le principal argument de la fonction Controle.
Dans un UserForm, quelle que soit linformation attendue de lutilisateur, la vérification que cette information a été fournie repose sur un schéma constant :
Il est possible dexprimer par une expression booléenne ce qui, selon le développeur, constitue une anomalie. Voici quelques exemples :

Fig. 1 - UserForm contenant seulement
(à part les boutons) un TextBox
Pour un TextBox, si la propriété .Value est égale à une chaine vide, cest quaucune information na été entrée (figure 1). Si la proprété Name du TextBox est TNom, lexpression à tester est :
TNom = ""
Outre la présence de linformation attendue, il faut également souvent en tester la validité. Par exemple, si linformation est une date, un test est nécessaire en utilisant la fonction IsDate.

Fig. 2 - UserForm avec 2 TextBox
destinés à la sisie de dates.
Sil y a une date de début et une date de fin (figure 3), il faut vérifier également leur cohérence : la date de début ne doit pas être postérieure à la date de fin. Avec 2 TextBox nommés TDebut et TFin, voici les expressions à tester, correspondant chacune à une anomalie possible :
TDebut.Name = "" TFin.Name = "" Not (IsDate(TDebut)) Not (IsDate(TFin)) CDate(TFin) < CDate(TDebut)
La particularité des boutons options est que dans un groupe, un seul peut être sélectionné à la fois : un clic sur lun des boutons désectionne tout autre bouton sélectionné.

Fig. 3 - Exemple de UserForm avec 2 boutons options.
NB - Aucun nest présélectionné, cest important.
Pour des OptionButton, il est vivement conseillé de nen présélectionner aucun à louverture du UserForm (figure 3). Cela présente 2 avantages :

Fig. 4 - Aspect que doit avoir le UserForm lorsque lutilisateur clique sur le bouton OK
En loccurrence, pour le UserForm des figures 3 et 4, il suffit dinitialiser la variable "Ville" comme étant une chaine vide, et de lui donner ensuite comme valeur "Paris" ou "Genève" selon le bouton pour lequel survient l'événement Click. Cela se fait ainsi :
Private Sub UserForm_Initialize() Choix = "" End Sub
Private Sub OGeneve_Click() Choix = "Genève" End Sub
Private Sub OParis_Click() Choix = "Paris" End Sub
Lors de la validation, il suffit alors de tester lexpression suivante :
Choix = ""
En effet, si cette expression est vraie, cela signifie qu'aucune des procédures OParis_Click et OGenève_Click na été exécutée, et donc que le UserForm na pas été modifié et correspond encore à la figure 3.
Contrairement aux boutons option, les boutons radio (ou cases à cocher) peuvent être cochés indépendamment les uns des autres. Chacun a pour valeur True sil est sélectionné, False sinon.
Pour un groupe de 3 CheckBox, CGeneve, CMilan et CParis, sil est nécessaire quils ne soient pas tous décochés, lexpression à tester sera :
Not (CheckBox1) And Not (CheckBox2) And Not (CheckBox3)
Pour les zones de liste, lexpression à utiliser pour contrôler linformation dépend de la propriété MultiSelect.
Celle-ci peut prendre 3 valeurs, 0, 1 ou 2 ou les constantes correspondantes :
fmMultiSelectSingle (ou 0) est la valeur par défaut. Seul un élément de la liste peut être sélectionné. Cliquer sur un élément change la sélection.
fmMultiSelectMulti (ou 1) permet de sélectionner plusieurs éléments. Cliquer sur un élément lajoute à la sélection.
fmMultiSelectExtended (ou 2) permet également une sélection multiple. À partir dun élément sélectionné, la combinaison de la touche majuscule et des flèches de déplacement permet détendre la sélection.
Dans la situation par défaut, la propriété ListIndex donne la position de lélément sélectionné (0 pour le 1er élément, , N - 1 pour le ènième). Si aucun élément nest sélectionné, ListIndex a pour valeur -1. Pour une zone de liste nommée LNoms, lexpression à utiliser est donc :
LNoms.ListIndex = -1
Si une sélection multiple est possible, ListIndex ne peut être utilisée. Il faut recourir à la propriété Selected, qui est un tableau de booléens indiquant pour chaque élément sil est sélectionné (True) ou non (False). Avant deffectuer un contrôle, une étape préalable est nécessaire qui consiste à déterminer le nombre déléments du tableau ayant True comme valeur. Voici un exemple de code :