Accueil | Ce site | CV | Excel | Livre d’or | Macros XL4 | Modèles | VBA

 L’argument “Expression” de la fonction Controle

Expression” est le principal argument de la fonction Controle.

Dans un UserForm, quelle que soit l’information attendue de l’utilisateur, la vérification que cette information a été fournie repose sur un schéma constant :

Il est possible d’exprimer par une expression booléenne ce qui, selon le développeur, constitue une anomalie. Voici quelques exemples :

TextBox


Fig. 1 - UserForm contenant seulement
(à part les boutons) un TextBox

Pour un TextBox, si la propriété .Value est égale à une chaine vide, c’est qu’aucune information n’a été entrée (figure 1). Si la proprété Name du TextBox est “TNom”, l’expression à tester est :

TNom = ""

Outre la présence de l’information attendue, il faut également souvent en tester la validité. Par exemple, si l’information 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.

S’il 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)

OptionButton

La particularité des boutons options est que dans un groupe, un seul peut être sélectionné à la fois : un clic sur l’un des boutons désectionne tout autre bouton sélectionné.


Fig. 3 - Exemple de UserForm avec 2 boutons options.
NB - Aucun n’est présélectionné, c’est important.

Pour des OptionButton, il est vivement conseillé de n’en présélectionner aucun à l’ouverture du UserForm (figure 3). Cela présente 2 avantages :


Fig. 4 - Aspect que doit avoir le UserForm lorsque l’utilisateur clique sur le bouton “OK”

En l’occurrence, pour le UserForm des figures 3 et 4, il suffit d‘initialiser 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 l’expression suivante :

Choix = ""

En effet, si cette expression est vraie, cela signifie qu'aucune des procédures OParis_Click et OGenève_Click n’a été exécutée, et donc que le UserForm n’a pas été modifié et correspond encore à la figure 3.

CheckBox

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 s’il est sélectionné, False sinon.

Pour un groupe de 3 CheckBox, CGeneve, CMilan et CParis, s’il est nécessaire qu’ils ne soient pas tous décochés, l’expression à tester sera :

Not (CheckBox1) And Not (CheckBox2) And Not (CheckBox3)

ListBox

Pour les zones de liste, l’expression à utiliser pour contrôler l’information 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 l’ajoute à la sélection.
fmMultiSelectExtended (ou 2) permet également une sélection multiple. À partir d’un é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 n’est sélectionné, ListIndex a pour valeur -1. Pour une zone de liste nommée “LNoms”, l’expression à 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 s’il est sélectionné (True) ou non (False). Avant d’effectuer 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 :