Utilité de Select case face à IF? [Résolu]

BIOoOAG123 - 4 avril 2013 à 15:09 - Dernière réponse :  BIOoOAG123
- 4 avril 2013 à 17:04
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? :)
Afficher la suite 

Votre réponse

6 réponses

Utilisateur anonyme - 4 avril 2013 à 16:19
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Utilisateur anonyme
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 4 avril 2013 à 16:25
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ucfoutu
0
Utile
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
Commenter la réponse de BIOoOAG123
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 4 avril 2013 à 16:13
0
Utile
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.
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 4 avril 2013 à 16:43
0
Utile
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.
Commenter la réponse de ucfoutu
0
Utile
Oki donc au final ça change pas grand chose et le If est pas si mal! :)
Commenter la réponse de BIOoOAG123

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.