IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Avis sur select case ou if et or ou and


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé Avatar de GESCOM2000
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 107
    Par défaut Avis sur select case ou if et or ou and
    Bonjour
    Un nouveau poste pour avoir votre avis sur 2 fonction VBA.

    la fonction SELECT CASE Toto Case "blabla1","blabla2"..... et IF "blabla1"=toto OR .....OR.....or or or.... THEN blabla

    Avec le select case je peux en mettre un paquet mais avec OR je peux en mettre autant sans que ca merdouille?

    D'après vous quel est la meilleure des 2 fonctions sans risqué d'avant un bug ou des Ralentissements dans les traitements.

    Merci

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Rien n'empêche tout masochiste de ne pas se servir de ce qui est simple et mille fois plus lisible (Select Case) au "profit" d'une suite d'expressions conditionnelles (bourrées de OR, de ELSE, ELSE IF, etc ...) .... Bien "gérés", hein ...
    Cela devrait parfaitement convenir au pharmacien voisin de ce développeur ou des développeurs qui devraient intervenir pour faire évoluer l'application (vente accrue d'aspirine, etc ...)

  3. #3
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    À l'époque de QuickBasic, (sur MS-DOS, (cela ne me fait pas paraître très jeune)), un fin connaisseur du BASIC avait comparé le résultat de la compilation d'un If then Else et d'un Select Case. Après la compilation, c'était exactement pareil...

    Personnellement, c'est ce qui me semble le plus facile à écrire à ce moment-là.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Si ici l'idée est de faire un sondage entre le select case et les elseif! Je vote select case.

    Les elseif augmente les risques de bug lié au risque de se tromper!

    Les select case reste toujours plus lisible et maintenable!

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 114
    Billets dans le blog
    53
    Par défaut
    Bonjour Clément et Robert,
    Je partage tout à fait ce que vous avez écrit.
    D'ailleurs lorsque je dispense mes formations VBA, j'évoque le ElseIf mais je déconseille son utilisation au profit de Select Case car effectivement la lecture du code est nettement plus simple et ses possibilités de tests sont multiples.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour,

    certaines conditions pouvant être écrites bien plus simplement via Select Case, il suffit juste de lire l'aide VBA …

    ___________________________________________________________________________________________________________
    Je suis Paris, Egypte, Nigeria, New-York, Mogadicio, Barcelone, London, Manchester, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  7. #7
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, à voir si curieux

  8. #8
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Pour tout dire :
    que l'on choisisse la voie Select Case ou la voie If Then Else, la toute première préoccupation du développeur devrait être la détermination de la ou des occurrence(s) les plus probablement fréquentes *****(en fonction du contexte) , de sorte à cesser de tester de la manière la plus optimisée.
    ****** il est par exemple assez clair qu'un modulo = 0 par division par 2 est plus fréquent qu'un modulo = 0 par division par 3 ... . Mais c'est là un exemple assez "simplet". D'autres nécessitent plus de finesse, d'expérience, etc ...

    Ceci dit : une procédure écrite à coups de If Then Else, Elseif, avec en plus des Or et And impliqués :
    - sera plus difficile à lire et à maintenir
    - elle occupera plus d'octets (dans la procédure qui, rappelons-le, a des limites de taille)

    Voilà ...

  9. #9
    Invité
    Invité(e)
    Par défaut
    A l'occasion d'une autre discutions, j'avais publié le code objet compilé. Le nombre de cycle machine étaient en faveur du select case.

    Oui comme le dit UnParia seul l'ordonnancement de la plus forte probabilité à la plus faible peut faire la différence!
    Dernière modification par Invité ; 26/11/2017 à 21h43.

  10. #10
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Par défaut
    bonjour,
    À l'époque de QuickBasic, (sur MS-DOS.....
    effectivement, à cette époque , j'utilisais : "ON n GOSSUB / GOTO 1,2,3,4"
    ce qui ressemble beaucoup à "select case n"

    dans certain cas je préférerai : If then ElseIf .... dans d'autres select case

    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

  11. #11
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Par défaut
    re,
    pour être plus précis,
    je perçois : IF THEN comme une "comparaison" et SELECT CASE comme une "boite de dérivation"

    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

  12. #12
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    En réalité un if elseif fait un branchement court Jump en assembleur,
    Alors qu'un select case fait un branchement long call étiquette en assembleur! C'est un peut comme le if then goto étiquette!

    Un branchement cour fait deux cycle machine alors qu'un branchement long en fait 4!

    On pourrait donc conclure le elseif plus rapide et bien nom car le select est plus optimisé!
    Code select case : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    If  A=Z then toto=1:goto fin
    If A=E then toto=2:goto fin
    Fin:
    Code elseif : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    If A=Z then toto =1 :etiquette1 else  étiquette2 'jump
    Étiquette2:
    If A=E then toto=2:étiquette1 else toto=3
    Étiquette1
    Dernière modification par Invité ; 27/11/2017 à 08h48.

  13. #13
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Dim toto As Integer, deb As Double, k As Long, titi As String
    toto = 10
    deb = Timer
    '----------------------------------------
    For k = 1 To 10000000
      If (toto <= 40 And toto >= 20) Or (toto <= 30 And toto >= 25) Then
         titi = "cas 1"
      ElseIf toto <= 40 And toto >= 22 Then
         titi = "cas 2"
      Else
         titi = "cas 3"
      End If
    Next
    MsgBox Timer - deb & vbCrLf & titi
    '---------------------------------------------------
    deb = Timer
     
    '-------------------------------------------------
    For k = 1 To 10000000
      Select Case toto
        Case 20 To 40, 25 To 30
          titi = "cas 1"
        Case 22 To 40
          titi = "cas 2"
        Case Else
          titi = "cas 3"
      End Select
    Next
    MsgBox Timer - deb & vbCrLf & titi
    '-------------------------------------------

  14. #14
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    En fait (et facilement constatable) :
    Plus est important le nombre de vérifications à faire jusqu'à trouver la bonne occurrence, plus nette est la plus grande agilité de select case par rapport à des If Then Else imbriqués.
    En précisant bien que les vérifications se font bien dans le même ordre dans les deux procédés.
    Et la chose est encore plus nettement visible lorsque sont impliqués de surcroît des OR, des AND, etc ... dans les vérifications d'occurrences.

Discussions similaires

  1. mettre à jour des données sur select case
    Par patmar83 dans le forum VBA Access
    Réponses: 1
    Dernier message: 27/06/2013, 14h00
  2. Problème sur Select Case When
    Par parilla77 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 06/04/2012, 16h11
  3. [UML] Use cases - Votre avis sur un diagramme.
    Par atome dans le forum Cas d'utilisation
    Réponses: 8
    Dernier message: 10/10/2006, 18h22
  4. [Règles de l'art ?] Select Case.. sur 85 case..
    Par jeanchcom dans le forum Access
    Réponses: 6
    Dernier message: 18/09/2006, 15h21
  5. Equivalent "Select Case when then else end" sur Paradoxe
    Par Seuh.m dans le forum Bases de données
    Réponses: 4
    Dernier message: 29/06/2006, 08h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo