Utilité de Select case face à IF?

[Résolu]
Signaler
-
 BIOoOAG123 -
Voila, je n'arrive pas à trouver de réponse à cette question, quelle est la réelle utilité de Select case face à If par exemple ce code.
		Dim note As Integer, commentaire As String 

note = Range("A1")

'Commentaire en fonction de la note 
If note = 6 Then 
commentaire = "Excellent résultat !" 
ElseIf note = 5 Then 
commentaire = "Bon résultat" 
ElseIf note = 4 Then 
commentaire = "Résultat satisfaisant" 
ElseIf note = 3 Then 
commentaire = "Résultat insatisfaisant" 
ElseIf note = 2 Then 
commentaire = "Mauvais résultat" 
ElseIf note = 1 Then 
commentaire = "Résultat exécrable" 
Else commentaire = "Aucun résultat" 
End If

'La variable commentaire sera affichée dans la cellule B1
Range("B1") = commentaire 
End Sub


Comparé à celui là : même résultat.

Select Case note ' <= la valeur à tester (ici, la note)

Case Is = 6 ' <= si la valeur = 6
commentaire = \"Excellent résultat !\"
Case Is = 5 ' <= si la valeur = 5
commentaire = \"Bon résultat\"
Case Is = 4 ' <= si la valeur = 4
commentaire = \"Résultat satisfaisant\"
Case Is = 3 ' <= si la valeur = 3
commentaire = \"Résultat insatisfaisant\"
Case Is = 2 ' <= si la valeur = 2
commentaire = \"Mauvais résultat\"
Case Is = 1 ' <= si la valeur = 1
commentaire = \"Résultat exécrable\"
Case Else ' <= si la valeur n'est égale à aucune des valeurs ci-dessus
commentaire = \"Aucun résultat\"
End Select
'>


Est-ce que l'un est plus rapide que l'autre? ou est-ce qu'ils ont des utilisation différentes sur certains points ou dans certain cas? :)

6 réponses


Bonjour,

C'est probablement plus une question de confort que d'autre chose. Par contre, Select Case est mal adapté quand il faut tester des types de données mélangées du genre vérifier si on a exactement 10 caisses de pommes, 3 caisses de bananes et une caisse de fleurs dans la même livraison. Personnellement, dans l'exemple que tu donnes, je trouve que c'est plus rapide à programmer avec Select Case, d'autant plus que, sans comparaison logique, il n'est pas nécessaire de mettre le is. Ton select case pourrait être utilisé de cette façon:

Dim note As Integer, commentaire As String 
note = Range("A1")
'Commentaire en fonction de la note 
Select Case note ' <= la valeur à tester (ici, la note) 
    Case 6 ' <si la valeur 6 
commentaire = "Excellent résultat !" 
    Case 5 ' <si la valeur 5 
commentaire = "Bon résultat" 
    Case 4 ' <si la valeur 4 
commentaire = "Résultat satisfaisant" 
    Case 3 ' <si la valeur 3 
commentaire = "Résultat insatisfaisant" 
    Case 2 ' <si la valeur 2 
commentaire = "Mauvais résultat" 
    Case 1 ' <si la valeur 1 
commentaire = "Résultat exécrable" 
    Case Else ' <= si la valeur n'est égale à aucune des valeurs ci-dessus 	
commentaire = "Aucun résultat" 
End Select
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Bonjour, cmarcotte.
Oui.
Et dans la foulée, on traite le select case en fonction des plus grandes probabilités.
Dans son cas, je traiterais dans l'ordre case 4, puis case 3 ... et ne mettrais à la fin que les cas les moins "probables" (case 6 et case 1). Encore que ... Je me demande si dans certaines classes, le case 1 ne serait pas le plus fréquent aujourd'hui


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Dim note As Integer, commentaire As String 
note = Range("A1")

'Commentaire en fonction de la note 

Select Case note ' <= la valeur à tester (ici, la note) 

Case Is = 6 ' <= si la valeur = 6 
commentaire = "Excellent résultat !" 
Case Is = 5 ' <= si la valeur = 5 
commentaire = "Bon résultat" 
Case Is = 4 ' <= si la valeur = 4 
commentaire = "Résultat satisfaisant" 
Case Is = 3 ' <= si la valeur = 3 
commentaire = "Résultat insatisfaisant" 
Case Is = 2 ' <= si la valeur = 2 
commentaire = "Mauvais résultat" 
Case Is = 1 ' <= si la valeur = 1 
commentaire = "Résultat exécrable" 
Case Else ' <= si la valeur n'est égale à aucune des valeurs ci-dessus 	
commentaire = "Aucun résultat" 
End Select


Dsl :s
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Bonjour,
Le If Elseif entraîne une vérification systématique à chaque if ou elseif tant que les précédents n'ont pas été vérifiés.
Le Select Case travaille sur une valeur déjà extraite et s'arrête dès que présente.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Pour si peu, je ferais d'ailleurs personnellement ainsi :
commentaires = Array("Aucun résultat", "Résultat exécrable", "Mauvais résultat", _
  "Résultat insatisfaisant", "Résultat satisfaisant", "Bon résultat", "Excellent résultat !")
  Range("B1").Value = commentaires(Val(Range("A1").Text))


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Oki donc au final ça change pas grand chose et le If est pas si mal! :)