VBA: Select Case (utilisation avancée)


Ce tutoriel explique l'utilisation avancée de la structure VBA Select Case: optimalisation du code VBA, utilisation de l'opérateur Like, utilisation des Select Case imbriqués et d'autres informations utiles. Il est donc destiné plutôt aux utilisateurs avancés de VBA.

Il s'agit de la suite du tutoriel VBA: Select Case (mode d'emploi) qui explique les bases et qui s'adresse principalement aux débutants et aux personnes souhaitant découvrir cette structure.

 

Select Case en mode concis

Si vous êtes un adepte du code VBA aussi concis que possible (comme moi), j'ai une bonne nouvelle pour vous: grâce au signe : la structure Select Case se prête à merveille à un encodage de la condition et des actions à exécuter en une seule ligne. La lisibilité n'en est qu'encore meilleure. Jugez par vous-mêmes dans l'exemple suivant:

 

 

Plus le nombre de conditions augmente, plus le besoin de garder le code facilement lisible devient important.

 

Select Case est-il plus rapide que If… Then… Else…?

Dans des macros qui traitent des volumes de données importantes ou ceux dont la vitesse d'exécution est primordiale, le choix de la méthode peut dépendre de sa vitesse plutôt que de son "lisibilité". On peut donc se poser la question: laquelle de ces deux méthodes est la plus rapide? Le seul moyen d'en avoir le cœur net est de faire quelques tests réels avec, de préférence, suffisamment d'itérations pour que la différence soit perceptible.

J'ai donc exécuté quelques tests de vitesse (mesurés à la milliseconde près) et voici les résultats:

 

  1. 250.000 itérations, 2 conditions & Else, conditions numériques: Select Case est de 9,7% plus rapide que If/Then/Else
  2. 250.000 itérations, 4 conditions & Else, conditions numériques: Select Case est de 34% plus rapide que If/Then/Else
  3. 250.000 itérations, 3 conditions & Else, conditions "textuelles": Select Case est de 5% plus rapide que If/Then/Else
  4. 350.000 itérations, 5 conditions & Else, conditions "textuelles": Select Case est de 13% plus rapide que If/Then/Else

 

Ce test n'a pas une prétention scientifique mais comme vous pouvez constater, la méthode Select Case semble plus rapide – surtout s'il s'agit des conditions numériques. Le choix de la méthode peut être justifié par une préférence personnelle tant que les volumes restent relativement faibles. Mais plus le volume des données augmente, plus la structure Select Case devient intéressante.

 

Select Case imbriqués

Parfois, on se retrouve devant une situation où on fait face à plusieurs conditions successives. D'après le résultat de la première condition, le code doit gérer la condition suivante qui dépend du résultat de la première. Comme illustrations, prenons l'exemple d'une centrale téléphonique (ou un helpdesk): chaque question/réponse implique une question/réponse suivante jusqu'à ce que l'on obtient la bonne personne à qui parler.

Si on a des conditions simples (par exemple avec deux possibilités de réponse), il est possible d'utiliser la construction des If imbriqués. Mais à partir d'un certain volume de possibilités, les conditions If deviennent difficilement lisibles. Et c'est là que Select Case peut faire l'affaire sans complexifier le code VBA outre mesure.

Dans l'exemple suivant, on cherche l'adresse email appropriée selon la combinaison des variables "PaysOrigine" et "TypeUtilisateur". On fait alors appel à deux Select Case imbriqués (un dans l'autre). Sachez qu'il est possible d'aller encore en profondeur de l'imbrication si nécessaire.

 

 

Comme vous pouvez constater dans l'exemple, avec deux Select Case imbriqués, nous avons pu couvrir 49 combinaisons possibles de "PaysOrigine" et "TypeUtilisateur" tout en gardant le code VBA tout à fait lisible et relativement court (35 lignes). Je vous laisse imaginer ce à quoi ressemblerait la même fonction qui utiliserait la structure If... Then... Else...

 

Utilisation de "Like" comme opérateur dans la condition

Si vous avez besoin d'utiliser l'opérateur VBA Like, sachez que la structure Select Case ne permet pas son utilisation directe. Cependant, avec un peu de créativité, on peut obtenir le même résultat.

Le "truc" consiste à remplacer la variable à tester par la valeur True et ensuite faire la comparaison entre la valeur testé et le "masque".

Donc, à la place de la structure "habituelle" (mais qui ne fonctionne pas pour Like):

 

Le code VBA doit ressembler à ceci:

 

 Le résultat du test avec cette syntaxe sera correct.

 

Ceci est bien utile, à nouveau en comparaison avec If... Then... Else... , si on veut utiliser plusieurs "masques" en même temps. Pour cela, il suffit simplement d'énumérer les masques en les séparant par une virgule.  Le code VBA pourrait ainsi ressembler par exemple à ceci:

 

De plus, il est assez facile de transformer ce code en une Function avec le mot à tester comme argument et un Boolean (VRAI/FAUX – TRUE/FALSE) come résultat. Une fonction semblable pourrait alors être utilisée dans de nombreuses circonstances.

Conclusion

J'espère que ce tutoriel vous a apporté des informations utiles ou des idées supplémentaires pour vos macros en VBA. La structure Select Case  est un très bon exemple que l'on peut aller toujours plus loin en VBA et que le VBA ne sert pas seulement à "automatiser le coloriage des tableaux Excel" comme le pensent certains!

Si vous connaissez une autre astuce ou une autre utilisation intéressante de Select Case, n'hésitez pas à la partager via les commentaires. Toute contribution est bienvenue.

 

Pour aller plus loin en VBA

Je vous propose les articles sur VBA suivants (sur Excel-Malin.com) qui pourraient également vous intéresser…

 

2 0

Pourrait vous intéresser

Partagez cette page...
Share on FacebookShare on Google+Share on LinkedInTweet about this on TwitterShare on RedditShare on TumblrDigg thisEmail this to someone

Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée.