Cet article va vous montrer comment effectuer des tests en VBA.
If Then Else
Il est parfois nécessaire d’exécuter une ou plusieurs instructions lorsqu’une condition est vérifiée, et éventuellement une ou plusieurs autres instructions dans le cas contraire. Pour cela, vous utiliserez une instruction If Then Else.
La syntaxe de l’instruction If Then Else
Voici la syntaxe de l’instruction If Then Else:
If condition Then ' Une ou plusieurs instructions Else ' Une ou plusieurs instructions End If
Le bloc Else ne sera pas nécessaire si une ou plusieurs instructions ne doivent pas être exécutées lorsque la condition n’est pas vérifiée. L’instruction se simplifie :
If condition Then ' Une ou plusieurs instructions End If
Voici un exemple de code :
Dim entier As Integer entier = 6 If entier = 5 Then MsgBox "entier vaut 5" Else MsgBox "entier est différent de 5" End If
Ici, on définit la variable Integer entier et on lui affecte la valeur 6. Par la suite, on teste si sa valeur est égale à 5 avec une instruction If Then Else. Comme ce n’est pas le cas, une boîte de message s’affiche et indique « entier est différent de 5 ».
Les opérateurs de comparaison utilisables dans un test
L’opérateur « = » n’est pas le seul utilisable dans un test If Then Else. Le tableau dresse la liste des opérateurs utilisables.
Opérateur | Signification | Exemple |
= | Test d’égalité | If a = 12 |
< | Test inférieur à | If a < 12 |
<= | Test inférieur ou égal à | If a <= 12 |
> | Test supérieur à | if a > 12 |
>= | Test supérieur ou égal à | If a >= 12 |
<> | Test différent de | if a <> 12 |
Ces opérateurs peuvent être appliqués sur :
- des nombres (Byte, Integer, Long, Currency, Single ou Double) ;
- des chaînes (String) ;
- des dates (Date).
Voici quelques exemples :
Dim n As Integer, s As String, d As Date n = 1.2545 s = "Un peu de texte" d = "12/08/2110" If d > "10/05/2020" Then MsgBox "pas tout de suite…" End If If n = 1.2545 Then MsgBox "n est bien égal à 1.2545" End If If s > "Un peu" Then MsgBox "Au delà de Un peu" End If
Si vous exécutez ce code, vous serez peut-être surpris, car il affiche les boîtes de dialogue suivantes :
La première boîte de dialogue est facile à comprendre. En effet, la date 12/08/2110 est postérieure à 10/05/2020. Le test If d > « 10/05/2020 » Then est donc vérifié et le message s’affiche.
Par contre, que devrait donner le test If n = 1.2545 Then selon vous ? Etant donné que n a été initialisé à 1.2545 un peu plus haut, le message « n est bien égal à 1.2545 devrait s’afficher. Eh bien non !
Pourquoi d’après vous ?
Tout simplement parce que la variable n a été définie en tant qu’Integer. Lors de son affectation, la valeur décimale a purement et simplement été supprimée.
Remplacez Integer par Single dans cette expression et le test devrait aboutir :
Dim n As Integer, s As String, d As Date
Que pensez-vous du troisième test ? Comment deux chaînes pourraient être comparées avec l’opérateur « > » ? Est-ce que « Un peu de texte » > « Un peu » ?
Selon VBA, oui !
La comparaison de deux chaînes se fait selon un ordre alphabétique. Ainsi :
A < B < E < Z
Mais aussi :
A < Abc < Bcd < Be < Htzert < Huv
Notez que l’instruction Option Compare peut changer les choses lorsque vous comparez des chaînes.
Après cette instruction :
Option Compare Binary
Les caractères sont comparés par rapport à leur représentation binaire. Ainsi :
A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø
Après cette instruction :
Option Compare Text
Les caractères sont comparés sans distinctions entre les majuscules et les minuscules :
(A=a) < (À= à) < (B=b) < (E=e) < (Ê= ê) < (Ø = ø) < (Z=z)
Comparaison de chaînes avec l’opérateur Like
L’opérateur Like est très puissant. Il permet de comparer une variable String et un modèle. La syntaxe générale de cette instruction est la suivante :
b = s Like modèle
Où b est une variable Boolean, s est une variable String et modèle est le modèle à appliquer à la chaîne s. Si la variable s correspond au modèle, la variable b est initialisée à True. Elle est initialisée à False dans le cas contraire.
Le modèle peut contenir un ou plusieurs caractères quelconques (des lettres, des chiffres ou des signes), mais aussi des caractères de remplacement :
Caractère de remplacement | Signification |
? | Un caractère quelconque |
* | zéro, un ou plusieurs caractères quelconques |
# | Un chiffre quelconque |
[A-Z] | Une lettre majuscule quelconque |
[A-CT-Z] | Une lettre majuscule comprise entre A et C ou entre T et Z |
[A-Za-z0-9] | Une lettre majuscule ou minuscule quelconque ou un chiffre |
[!G-J] | Une lettre majuscule différente de G, H, I et J |
Par exemple, pour tester si la cellule B5 contient un nombre composé de 5 chiffres, vous utiliserez le modèle « #####« . Voici ce que vous pourriez écrire :
Dim n As Integer n = Range("B5") MsgBox n If n Like "#####" Then MsgBox "Vous avez bien entré un nombre à 5 chiffres" Else MsgBox "Vous n'avez pas entré un nombre à 5 chiffres" End If
Opérateurs logiques
Pour compléter vos tests, vous pouvez également utiliser des opérateurs logiques :
Opérateur logique | Signification | Exemple |
And | Et logique | If a=5 And b<12 Then |
Or | Ou logique | If a=5 Or b<12 Then |
Not | Non logique | If Not (a = 6) Then |
Is | Comparaison de deux objets VBA | If Worksheets(1) Is Worksheets(2) |
Test multiple Select Case
Supposons qu’une variable v puisse prendre plusieurs valeurs et que vous deviez effectuer un traitement spécifique pour chaque valeur. Dans ce cas, l’instruction If Then Else n’est pas appropriée. Vous utiliserez plutôt cette instruction :
If v = valeur1 Then ' Traitement 1 ElseIf v = valeur2 Then ' Traitement 2 ElseIf v = valeur3 Then ' Traitement 3 ElseIf v = valeur4 Then ' Traitement 4 ElseIf v = valeur5 Then ' Traitement 5 Else ' Traitement 6 End If
Si vous devez tester trois ou plus de trois valeurs, je vous conseille d’utiliser une instruction Select Case à la place du If Then ElseIf. Le test précédent devient donc :
Select Case v Case valeur1 ' Traitement1 Case valeur2 ' Traitement2 Case valeur3 ' Traitement3 Case valeur4 ' Traitement4 Case valeur5 ' Traitement5 Case Else ' Traitement6 End Select
Voici quelques exemples de l’instruction Case :
Case 5 'La valeur numérique 5 Case 10 To 20 'Entre 10 et 20 Case Is > 20 'Supérieur à 20 Case "a" 'La chaîne "a" Case "a", "b", "c" ' La chaîne "a", "b" ou "c"
Attention
Avec les opérateurs <, > et <>, vous devez utiliser un Case Is et non un Case.
Les traitements peuvent être des instructions VBA quelconques. Par exemple :
a = 5 ' Affectation de la valeur 5 à la variable a MsgBox "texte" ' Affichage d'une boîte de message Sheets("Feuil2").Activate 'Activation de la feuille Feuil2
Vous pouvez également utiliser une instruction pour faire une pause dans l’exécution ou pour l’arrêter :
Stop ' Arrêt sur cette instruction End ' Fin du code