VBA: Select Case (mode d’emploi pratique)

La logique conditionnelle (par exemple, si X, alors Y, sinon Z…) est une fonctionnalité essentielle dans tout processus de programmation ou d'automatisation. En VBA, la structure Select Case est l'un des outils disponibles pour gérer les conditions. Bien qu'elle soit moins connue que la traditionnelle instruction If...Then...Else, Select Case offre des avantages significatifs en termes d'efficacité et de lisibilité du code.

Ce tutoriel vous expliquera pourquoi, quand et comment utiliser la structure Select Case en VBA, notamment dans les situations où elle peut grandement simplifier une logique de prise de décision complexe. Que vous gériez un grand nombre de conditions, que vous deviez traiter plusieurs résultats possibles, ou que vous souhaitiez améliorer la maintenabilité de votre code VBA, Select Case pourrait être la solution idéale.

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"

 

Les erreurs courantes à éviter avec Select Case

Même si Select Case est une structure puissante et souvent plus claire que If…Then…Else, il est important de connaître les erreurs les plus fréquentes afin de les éviter. Voici quelques-unes des erreurs les plus courantes rencontrées lors de l'utilisation de Select Case en VBA…

Cliquez pour afficher cette section
  1. Oublier l’instruction “Case Else” : Beaucoup de développeurs négligent d’inclure l’instruction Case Else, pensant que toutes les possibilités sont déjà couvertes. Cependant, il suffit qu’une valeur inattendue soit rencontrée (erreur de saisie, données non conformes, etc.) pour que le code échoue. L’ajout de Case Else permet de gérer les valeurs non prévues, garantissant ainsi une meilleure robustesse du code.
  2. Conditions qui se chevauchent : Une autre erreur courante est de définir des conditions qui se chevauchent, surtout lorsqu’on travaille avec des plages de valeurs. Par exemple, si vous utilisez Case 1 To 5 et Case 5 To 10, la valeur 5 est présente dans les deux conditions, ce qui peut provoquer des résultats inattendus. Assurez-vous que chaque Case couvre une plage distincte.
  3. Mauvais usage des opérateurs de comparaison : Lors de l’utilisation d’opérateurs comme <, >, <=, >=, il faut impérativement utiliser l’expression Case Is. Par exemple, Case Is > 50 est correct, tandis que Case > 50 ne l’est pas. Ne pas suivre cette règle peut entraîner des erreurs dans la logique du code.
  4. Ne pas tenir compte des types de données : Lorsque vous comparez des valeurs de types différents, comme des chaînes de caractères et des nombres, cela peut entraîner des erreurs imprévues. Il est crucial de vérifier que les types de données correspondent bien avant de les comparer avec Select Case.
  5. Ordre inefficace des conditions : Bien que l’ordre des Case n’ait généralement pas d’impact sur le fonctionnement du code, il peut influer sur la performance. Pour maximiser l’efficacité, placez en premier les conditions qui ont le plus de chances de se réaliser, afin de réduire le nombre de comparaisons nécessaires.
En évitant ces erreurs courantes, vous rendrez votre code VBA plus robuste, plus lisible, et moins sujet aux bugs.

Ces erreurs sont fréquentes, même chez les programmeurs expérimentés, mais les éviter vous permettra de gagner en qualité et en efficacité. En tenant compte de ces pièges potentiels, vous pourrez utiliser Select Case de manière optimale, tout en minimisant les risques d'erreurs.

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)”