VBA: Select Case (mode d’emploi pratique)

L'utilisation des conditions (si X, alors Y, sinon Z…) est une fonctionnalité primordiale dans toute programmation ou automatisation. La structure Select Case est l'une des structures utilisables en VBA pour gérer les conditions. Bien moins connue que la structure If... Then... Else... , elle n'en est pas moins utile et intéressante. Dans de nombreux cas, la structure Select Case est même bien plus appropriée pour l'efficacité et la lisibilité du code que la structure If... Then... Else... . Voici donc un tutorial qui explique pourquoi, quand et comment utiliser cette structure.

Select Case en VBA (Excel)

La structure Select Case en VBA – c'est quoi?

Il s'agit d'une structure de code VAB qui vous permet d'effectuer une action (calcul, formatage, lancement d'une macro etc.) selon si une condition est remplie ou pas. La syntaxe de base est la suivante:

 

 

Si la structure vous semble un peu abstraite, les exemples d'utilisation qui suivront rendront la chose plus claire.

 

Quand utiliser Select Case dans le code VBA?

Même si la structure If... Then... Else... est plus connue et (probablement) plus simple à comprendre, il peut devenir difficile à gérer lorsque le nombre de conditions est plus important, lorsque vous voulez utiliser des "paliers" pour des conditions numériques (par ex. "si valeur se trouve entre 10 et 20") ou lorsque plusieurs conditions textuelles mènent au même résultat (par ex. "si la valeur est 'a' ou 'b' ou 'd' ou 'w', alors le résultat est 10").

Dans ces cas-là, l'utilisation de Select Case rendra votre code VBA beaucoup plus lisible et beaucoup plus court que si l'on utilise If... Else avec de nombreux ElseIf.

 

Select Case en pratique: utilisation avec des conditions numériques

La condition peut être exprimée par une expression numérique (ex. Si x > 60, alors y = "excellent"). Dans ce cas, il est possible d'utilise comme condition une valeur spécifique (si x = 1), plusieurs valeurs spécifiques (si x = 1 ou 6),  une plage de numéros (si x est entre 10 et 25) ou par un opérateur de comparaison (si x > 50)

La syntaxe aura alors les formes suivantes:

 

  • si x = 1  >> Case 1
  • si x = 1 ou 6  >> Case 1, 6
  • si x = est entre 10 et 25  >> Case 10 To 25
  • si x > 50  >> Case Is > 50 (attention, avec les opérateurs numériques tes que <, > ou <> il faut utiliser l'expression Case Is et non seulement Case !)

 

Select Case: Exemple d'utilisation avec des conditions numériques

Voici un exemple d'utilisation pratique. Imaginons que la cellule "A1" contient le résultat  d'un test. On veut afficher un message qui évalue le score du test. Les conditions sont "numériques" (comme le résultat du test est un chiffre) ce qui implique qu'il est possible d'utiliser les opérateurs comme cela vient d'être expliqué plus haut…

 

 

Remarqueattention au choix des extrémités des paliers que vous utilisez. L'exemple précédent fonctionnera pour les numéros entiers mais si vous l'essayez avec "30,5", le résultat sera "Il y a un problème avec votre score…" car le chiffre 30,5 ne remplit ni la condition "0 To 30", ni "31 To 70"!

Il faut veiller à ce qu'il n'y ait pas des "trous" entre vos paliers. Sinon, vous risquez d'obtenir des résultats erronés. Il est donc important de couvrir les valeurs qui se situent à l'extrémité de chaque palier avec les opérateurs >= ou <= plutôt qu'uniquement > et <.

 

Select Case en pratique: utilisation avec des conditions textuelles

Voici maintenant des explications concernant les conditions "textuelles". Tout comme l'habituel If x = "test" Then ..., avec Select Case, on peut également utiliser le texte comme condition. L'avantage par rapport à If... Then... Else... si situe dans le fait que l'on peut utiliser plusieurs expressions textuelles dans une seule condition sans que le code devient difficile à lire.

 

Select Case: Exemple avec conditions textuelles

Et encore une fois, un exemple concret pour illustrer ce à quoi ressemble le code VBA:

 

 

Le code VBA suivant montre l'utilisation de plusieurs expressions textuelles dans une condition:

 

Remarque:

  • il est également possible d'utiliser une "plage de chaînes de caractères" comme condition. Dans ce cas-là, le syntaxe à utiliser sera: Case "anaconda" To "buffle" . Cette condition sera VRAI pour toute expression qui se situe, dans l'ordre alphabétique, entre le mot "anaconda" et le mot "buffle". Par exemple "baleine" tombera donc dans cette catégorie.
  • Et pour pousser les possibilités encore plus loin, les opérateurs de comparaisons sont disponibles également pour le texte! Ainsi Case Is < "c" sera VRAI pour tout expression qui se situe avant la lettre "c" dans l'alphabet…

 

Astuces pratiques pour l'utilisation optimale de Select Case

Maintenant que l'on voit l'utilité de Select Case, voici encore quelques conseils pour son utilisation optimale.

 

Ordre des conditions

De manière générale, l'ordre de conditions n'a pas d'importance – votre code VBA fonctionnera. Si vous n'avez pas besoin de traiter des volumes importants de données et si vous ne tenez pas à une efficacité maximale de votre code VBA, je vous conseillerais de privilégier la lisibilité de votre code. Écrivez-le comme c'est le plus confortable pour vous. Le VBA est assez flexible pour cela.

De l'autre côté, si vous voulez obtenir "la vitesse maximale" de vos macros, il y a une logique à respecter. Cette logique consiste à classer les conditions selon la probabilité de leurs réalisation. Si vous avez une variable MaCouleur qui peut être égale soit à "blanc" ( Case MaCouleur = "blanc" ) soit à "noir" ( Case MaCouleur = "noir" ) il est préférable de placer en premier celle qui a plus de chances d'être vrai. Ceci est valable, bien sûr, dans le cas où vous avez une idée de la répartition des résultats. Si vous pouvez distinguer des réponses probable des réponses exceptionnelles, c'est déjà bien – commencez alors par les probables et gardez les exceptionnelles pour la fin du Select Case.

En structurant votre code ainsi, vous gagnerez en vitesse (une fois que le code trouve la condition qui est VRAI, il exécute les instructions et ne se préoccupe pas des autres résultats possibles. Vu que la réponse VRAI a déjà été trouvée, les autres ne peuvent qu'être FAUX – alors le code ne les teste même pas).

Dans notre exemple, si on doit tester 100 valeurs ("blanc" ou "noir") et si le résultat "blanc" est probable à 70% alors:

 

  • en plaçant Case MaCouleur = "blanc" en premier, le code VBA exécutera 130 vérifications
  • en plaçant  Case MaCouleur = "noir" (qui est probable à 30%) en premier et seulement ensuite le Case MaCouleur = "blanc" , le code VBA devra exécuter 170 vérifications

 

130 vérifications à la place de 170 pour obtenir le même résultat – et cela uniquement pour 100 valeurs et 2 réponses possibles. Imaginez la différence de temps d'exécution pour par ex. 150.000 valeurs avec 7 possibilités!

Donc, rien qu'en changeant l'ordre des conditions, on peut grandement influencer la vitesse du code.

 

Utilité de Case Else

On pourrait être tentés de "laisser tomber" la ligne Case Else dans le code VBA en se disant qu'elle ne sert à rien. Grande erreur! Cette instruction permet de gérer les cas des valeurs que l'on aurait omis d'énumérer. Même si l'on a l'impression d'avoir couvert toutes les possibilités, il suffit que les données d'entrée soit mal encodées (ex. dans l'exemple avec les animaux plus haut, la valeur à tester serait "taup" à la place de "taupe" et vous avez un problème!).

Il est donc judicieux d'ajouter la ligne Case Else de toute façon et d'y attribuer une valeur (par exemple "erreur" ou encore "NA") ou une autre instruction qui permet d'éviter des problèmes. Vous pouvez utiliser par exemple:

 

  • Case Else: Stop – suspend l'exécution du code en cas de valeur inattendue
  • Case Else: MsgBox "Attention - Valeur inattendue" – ouvre une fenêtre avec un message
  • Case Else: LaReponse = "erreur" – le résultat de la fonction sera la mot "erreur"

 

Conclusion de ce tutoriel

Vous voici donc familiarisés avec la structure Select Case. J'espère que ce tutoriel a pu vous aider à rendre votre travail plus efficace et votre code VBA plus lisible.

Suite de ce tutoriel >>> VBA: Select Case (utilisation avancée)

La suite de ce tutoriel aborde les sujets suivants:

  • Select Case imbriqués
  • utilisation de l'opérateur Like
  • comparaison de vitesse avec If... Then... Else
  • Select Case en mode concis

 

Pour aller plus loin en VBA

Vous pouvez consulter la page Microsoft dédiée à "Select Case". Et voici d'autres articles de Excel-Malin.com qui pourraient également vous intéresser…

 

 

Laissez un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

4 commentaires sur “VBA: Select Case (mode d’emploi pratique)”