Médiaforma

VBA Excel – Tests

Print Friendly, PDF & Email

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

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
Vous avez aimé cet article ? Partagez-le avec vos réseaux...
 
Comments

No comments yet.