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 :

SELECT CASE sortie multiple


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2019
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2019
    Messages : 41
    Par défaut SELECT CASE sortie multiple
    Salut, voici un petit bout de code fonctionnel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub j()
    Dim r, q As String
    r = InputBox("entrez une valeur")
    Select Case True
        Case r Like "bateau": MsgBox ("Mot bateau")
        Case r Like "velo": MsgBox ("Mot velo")
        Case Left(r, 1) = "f": MsgBox ("commence par la lettre f")
        Case Right(r, 1) = "e": MsgBox ("termine par la lettre e")
        Case Len(r) > 10: MsgBox ("+ 10 lettres")
        Case r Like "*ed*": MsgBox ("contient ed")
        Case Else: MsgBox ("terminado pepito")
    End Select
    Call menu
    End Sub
    Pourriez-vous, je vous prie, m'orienter vers une méthode simple et efficace pour que le programme liste en sortie les cas vérifiés ?

    Par exemple, si l'utilisateur entre la valeur "acfkedmlpse" en entrée, ça doit lui afficher en sortie :

    termine par la lettre e
    + 10 lettres
    contient ed
      0  0

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Select case n'est pas appropriée.
    Utilise des if / then à la suite.
      2  0

  3. #3
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par mercatog Voir le message
    Select case n'est pas appropriée.
    Je rajouterai même que, dans ce cas, l'instruction Select Case n'a aucun intérêt.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim s As String
     
    If r Like "bateau" Then s = s & "Mot bateau" & chr(13)
    If r Like "velo" Then s = s & "Mot velo" & chr(13)
    If Left(r, 1) = "f" Then s = s & "commence par la lettre f" & chr(13)
    If Right(r, 1) = "e" Then s = s & "termine par la lettre e" & chr(13)
    If Len(r) > 10 Then s = s & "+ 10 lettres" & chr(13)
    If r Like "*ed*" Then s = s & "contient ed" & chr(13)
     
    If len(s) > 0 Then MsgBox(s)
      3  0

  4. #4
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2019
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2019
    Messages : 41
    Par défaut
    Salut.

    Merci pour vos réponses.

    Menhir, j'avais pensé faire quelque-chose d'exactement similaire à ce que tu as fait mais je ne pensais pas que c'était valide d'un point de vue syntaxique. Concernant le Select Case, je précise qu'il s'agit d'une demande de notre professeur : ça nous est imposé.

    Par ailleurs, en relisant mon code, je ne comprends même pas comment il se fait que la sortie n'indique pas tous les cas vérifiés — ou alors je ne le comprends que trop bien : le Select Case ignore les Case suivant celui qui s'est avéré positif. Est-ce cela ?
      0  0

  5. #5
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonsoir,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     le Select Case ignore les Case suivant celui qui s'est avéré positif. Est-ce cela ?
    Oui.
    Dès qu'un cas se révèle vérifié, le programme sort du bloc Select Case.
      2  0

  6. #6
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Matthieu_12 Voir le message
    Concernant le Select Case, je précise qu'il s'agit d'une demande de notre professeur : ça nous est imposé.
    Soit ton professeur ne sait pas ce qu'est un Select Case structurellement (ce qui serait étonnant étant donné que c'est une des structures classique de nombreux langage), soit tu as fais erreur dans l'interprétation de l'énoncé tel que tu l'as retranscrit dans ton code.

    ou alors je ne le comprends que trop bien : le Select Case ignore les Case suivant celui qui s'est avéré positif. Est-ce cela ?
    C'est bien ça. Le Select Case ne chope qu'un seul cas.
    A lire : https://docs.microsoft.com/fr-fr/off...case-statement
    Si testexpression correspond à une expressioncasse listeexpressions, les instructions suivantes cette clause casse ** sont exécutées jusqu'à la prochaine clausecasse**, ou pour la dernière clause, jusqu'à fin de la sélection. Le contrôle passe ensuite à l’instruction suivante fin de la sélection. Si testexpression correspond à une expression listeexpressions dans plusieurs clausescasse, seules les instructions qui suivent la première correspondance sont exécutées.
    Ca me semble clair, non ?

    Il faut dire que, théoriquement, il est fait pour tester la valeur d'une seule expression.
    Ecrire un "Select Case True", c'est un peu le dévoyer de son usage conventionnel.
      3  0

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

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    ce que je "vois", moi :
    1) il est en effet (bien que très maladroit et lourd) possible de traiter l'ensemble par une instruction Select. Avec plusieurs variables complémentaires et à définir selon le "Case"
    2) Voilà un enseignant qui me paraît ne pas demander nécessairement à ses élèves d'écrire un code performant, mais de montrer qu'ils savent "faire" avec ce qu'il est demandé de "faire". Et qui attend de voir qui saura "faire" ainsi.
    Il est certain que ces "contraintes" lui permettront de déceler l'"agilité", etc ... ou au contraire, des "gênes".
    3) Je ne doute pas une seule seconde qu'il s'attend plutôt à des gênes et à l'opportunité qui se présentera alors de conduire à la construction d'approches complexes et révélatrices.
    Un tel enseignant ne peut que me plaire et je me garderai donc personnellement de gêner/polluer/troubler sa démarche de vrai pédagogue.
      1  4

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Personnellement, je ne conçois pas que l'on apprenne l'informatique avec des contre-exemples aussi aberrants que celui proposé par Ordonc. Que ce genre de masturbation intellectuelle soit de mise tout à la fin d'un master (et encore) ou durant un doctorat, pourquoi pas? Je doute toutefois que ce soit le cas ici (ça ne se ferait probablement pas en VBA), et je doute sincèrement de la valeur didactique de l'exercice.

    De ma longue expérience de formateur, je retiens qu'il est déjà malaisé pour l'étudiant d'apprendre à coder proprement, en respectant une architecture (quelle qu'elle soit), en produisant un code lisible, compréhensible, maintenable, évolutif. Je pense donc qu'il est contre-productif de lui proposer des exemples à ce point éloignés de la réalité de terrain.

    Ordonc aurait fait comme ceci ou comme cela. Très bien. Perso, j'ai fait à ma sauce, sans doublons par rapport au code de Menhir qui propose la seule bonne approche, à mon sens, si l'on veut produire du code facilement lisible par d'autres, et permettant une compréhension rapide de l'intention sous-jacente au code, à laquelle j'accorde beaucoup d'importance. j'attends d'un Select Case... qu'il passe en revue les valeurs possibles d'une expression, d'une succession de If... EndIf des évaluations d'expressions différentes qui peuvent éventuellement se compléter et d'une construction If... Else If...End If l'évaluation d'expressions différentes qui s'excluent. Je me souviens d'ailleurs que cette construction Select Case True... avait déjà été évoquée sur le forum (preuve s'il en est que la pédagogie/didactique n'avait pas manifestement pas fonctionné), ce qui m'avait amené à rédiger ce billet de blog...

    Je me souviens d'une discussion où l'on évoquait le fait de pouvoir utiliser For [Each]...Next en lieu et place de Do...While, et durant laquelle je mentionnais que l'intention d'un For...Next n'est pas la même que celle d'un Do While. Un For Next prépare à passer sur chaque valeur ou élément (et exclut dont Exit For), du Do While permettant de comprendre l'intention de sortir sur condition (et là aussi, sans Exit Do). Perso, mélanger les constructions, ne pas en comprendre l'intention et la finalité et les utiliser l'une pour l'autre relève pour moi d'une mauvaise programmation. Je doute que les exemples mentionnés ici permettent de comprendre cela.

    Il y a toujours moyen d'utiliser des constructions de manière déviée, mais elles relèvent alors pour moi, sauf accompagnées de très solides arguments, d'une mauvaise programmation qui donnera du fil à retordre en maintenance. Comprendre, dans 6 mois ou un an, une construction telle que celle montrée dans l'exemple de Ordonc amènera le lecteur à se demander pourquoi le code a été écrit comme cela, et sèmera le doute quant à la qualité de l'ensemble du code produit.

    Je pense qu'il n'y a pas besoin d'être une génie en "pédagogie" pour faire comprendre, par deux exemples simples, la différence entre les If... End If et les Select Case et que cela ne vaut pas un exercice masturbatoire tel que ceux présentés ici.

    C'étaient mes 2 cents...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------
      3  0

  9. #9
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 364
    Par défaut La raison n’est-elle pas de croire avoir raison mais de savoir être raisonnable ?
    Re et excuse moi Matthieu pour la pollution ...

    De Pierre (formateur et non étudiant) :
    Je suis curieux de voir ce cas multiple traité avec une instruction SELECT qui pourrait recenser les CASE par lesquels on est passé. Si tu peux éclairer ma lanterne, même avec un code lourd et maladroit
    Désolé, une fois de plus, unparia , d’avoir donné un exemple si peu lumineux avant le tien.
      1  2

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Il n'y a pas de pollution, il y a, normalement, débat.

    Expliquez en quoi votre exemple est si lumineux, en quoi il est didactique, pédagogique, éventuellement préférable à une suite de If... End If ou pas. CA, ça ferait avancer la discussion. La pollution d'une discussion commence à partir du moment où l'on pond un code inepte sans expliquer à quoi il sert, en prod ou sur les bancs de l'école.

    Pour ma part, je n'ai jamais rencontré une construction telle que celle proposée par OrDonc qui n'a aucun sens, ni en programmation "de production", ni sur un quelconque plan didactique ou pédagogique. J'ai amené des arguments pour expliquer mon point de vue. S'ils ne vous plaisent pas, exposez les vôtres et débattons-en. Si le code proposé par Ordonc a du sens pour vous, expliquez en quoi. Alors, il n'y aura pas de pollution, mais un échange de points de vue, duquel on pourrait apprendre quelque chose, et pourquoi pas changer sa façon de voir le choses. A part un intérêt didactique dont vous parlez mais que vous ne détaillez pas, vous n'étayez rien, vous faites juste du vent.

    Discuter avec des avatars qui n'assument pas leur identité réelle et qui critiquent ceux qui, de leur vrai nom, argumentent et expliquent, ça commence à fatiguer.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------
      2  0

  11. #11
    Expert confirmé
    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Par défaut
    Bonjour,

    Moi je suis un peu perdu.
    Soit c'est un piège, soit l'énoncé n'est pas clair ou mal compris.
    Qu'est-il écrit exactement : "n'utiliser que select case et rien d'autre" ?

    Est-ce un exercice parmi d'autres ? Il serait alors vicieux d'y glisser un piège mais pourquoi pas.
    Si c'est le seul exercice c'est moins compréhensible.
    Si on cherche à tester les étudiants, on peut trouver des cas complexes réels comme les fonctions récursives par exemple.

    En tout cas je tiens à féliciter tout de même Matthieu qui ne nous a pas pondu l'énoncé mais a pris la peine d'écrire du code avant de venir ici.
    Maintenant avec une telle demande il faut s'attendre à un débat plus ou moins houleux.
      3  0

  12. #12
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Arkham46 Voir le message
    Soit c'est un piège, soit l'énoncé n'est pas clair ou mal compris.
    Mon hypothèse : mal compris.

    Vous êtes en train de polémiquer en ne connaissant que l'interprétation que le demandeur a fait de son énoncé.
    Perso, j'ai un gros doute que le code du premier message soit une transcription fidèle du problème...
      2  1

  13. #13
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2019
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2019
    Messages : 41
    Par défaut
    Loin de moi la volonté initiale de créer pareil conflit intergalactique !

    Tout d'abord, je vous prie de bien vouloir me croire : je n'ai pas mal compris la demande du professeur !

    Ensuite, non, je ne pense pas que c'était à visée pédagogique car cela a tout naturellement produit l'exact effet inverse : je ne comprends plus rien à l'utilité du Select Case.

    J'ai un contrôle de 3 h demain matin.

    Je sens que je vais bien m'amuser !
      1  0

  14. #14
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2019
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2019
    Messages : 41
    Par défaut
    Par ailleurs, il nous a également été demandé de créer un menu. Je cite :

    Écrire un programme qui va proposer un menu à l’utilisateur afin que ce dernier choisisse quel programme il souhaite lancer*:
    I – Exercice1, ou II - Exercice 2.
    A la fin de l’exécution, le programme retourne sur le menu. Le menu doit bien évidemment proposer un choix permettant de quitter.
    Voici mon humble production, bien évidemment fonctionnelle :

    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
    31
    32
    33
    34
    35
    Sub menu()
    Dim q As String
    q = InputBox("1 = exercice 1" & Chr(13) & "2 = exercice 2" & Chr(13) & "3 = quitter")
    If Val(q) = 1 Then
        MsgBox ("ex1")
        Call j
    ElseIf Val(q) = 2 Then
        MsgBox ("ex2")
        Call k
    Else
        MsgBox ("hasta la vista baby")
        Exit Sub
    End If
    End Sub
     
     
    Sub j()
    Dim r, q As String
    r = InputBox("entrez une valeur")
    Select Case True
        Case r Like "bateau": MsgBox ("Mot bateau")
        Case r Like "velo": MsgBox ("Mot velo")
        Case Left(r, 1) = "f": MsgBox ("commence par la lettre f")
        Case Right(r, 1) = "e": MsgBox ("termine par la lettre e")
        Case Len(r) > 10: MsgBox ("+ 10 lettres")
        Case r Like "*ed*": MsgBox ("contient ed")
        Case Else: MsgBox ("terminado pepito")
    End Select
    Call menu
    End Sub
     
    Sub k()
        MsgBox ("exo 2 aqui")
        Call menu
    End Sub
    Auriez-vous, à tout hasard, non pas des conseils d'optimisation mais des suggestions alternatives de menu ? J'entends par là : une fonction menu ou un procédé bien différent du mien.

    En espérant ne pas déclencher un nouveau conflit intergalactique !
      2  0

  15. #15
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Matthieu_12 Voir le message
    je ne comprends plus rien à l'utilité du Select Case.
    Bin... comme son nom l'indique, ça sert à sélectionner un cas (et un seul).

    La plupart du temps, ça s'utilise ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Select Case MonChoix
    Case 1
        Action1
    Case 2 To 5
        Action2
    Case < 100
       Action3
    Case Else
       Action4
    End Select
    Utiliser Select Case True est une sorte de perversion de ce principe, même si ça reste fonctionnel et syntaxiquement valable.
      2  0

  16. #16
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par Matthieu_12 Voir le message
    [...]
    Ensuite, non, je ne pense pas que c'était à visée pédagogique car cela a tout naturellement produit l'exact effet inverse : je ne comprends plus rien à l'utilité du Select Case.[...]
    Je me doute que ce n'est pas à visée pédagogique, puisque la "pédagogie" est absente de cet exercice inepte.

    Lis mon billet de blog, il explique à quoi sert le Select Case, qui est utilisé pour éviter une suite de If lorsque le test porte sur les valeurs possibles d'une seule expression
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------
      1  0

  17. #17
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 364
    Par défaut
    Pour revenir au sujet, et clore un faux débat que je n’ai pas instauré, est-ce la comparaison que réclamait le prof ?
    Donc, en continuant de jouer à être celui-ci, si elle avait été demandée, j’aurais, plutôt qu’un discours discourtois, proposé comme alternative.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Si()
        Dim R As String, S As String
        R = "If faut placer le velo, sans ses pedales, sur le bateau !"
        If R Like "*bateau*" Then S = S & " - contient le mot bateau" & vbLf
        If R Like "*velo*" Then S = S & " - contient le mot velo" & vbLf
        If R Like "f*" Then S = S & " - commence par la lettre f" & vbLf
        If R Like "*e" Then S = S & " - se termine par la lettre e" & vbLf
        If Len(R) > 10 Then S = S & " - a plus de 10 lettres" & vbLf
        If R Like "*bateau*" Then S = S & " - contient ed" & vbLf
        If S = "" Then S = "ne présente aucun des cas cités !"
       MsgBox "la phrase : " & R & vbLf & S, , "cas rencontrés ..."
    End Sub
    mais d'autres l'avaient déjà fait dans cette discussion !
      0  1

  18. #18
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    C'est juste du blabla. On peut arriver au même résultat, souhaité par Mathieu, avec des if sans dénaturer la construction du Select Case, à moins que tu n'arrives à montrer une solution avec Select que l'on ne pourrait avoir avec des If (dans le cas présent)..

    Select Case est fait pour tester les différentes valeurs d'une même expression. Point. Tout autre utilisation est déviée et relève pour moi d'une mauvaise façon de programmer qui va amener de la confusion au moment de la maintenance et de l'évolution du code. Select Case a été créé uniquement pour éviter de devoir répéter l'expression dont on teste les valeurs. En fait, on peut très bien se passer de Select case qui est juste une construction de confort (et qui permet un "gain" de performances puisque l'expression n'est évaluée qu'une fois, sur la ligne Select.

    Et je précise que c'est une spécificité du VBA que de ne tester les cas que jusqu'au cas valide, en ne passant pas sur les suivants. Dans les autres langages, il faut mettre un Break; pour que les autres cas ne soient pas évalués après le premier validé.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------
      3  0

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

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Du "blabla" ?
    Ah ... Sans doute, mais uniquement si l'on corrige ceci :
    que l'on ne pourrait avoir avec des If
    par
    "que l'on ne pourrait avoir avec des If .. elseif .."
    sauf, bien évidemment, à ne pas se préoccuper du nombre (toujours total) des comparaisons à faire
    Mais alors : -->> si l'on y va à coups de elseifs, on n'échappera pas à la nécessité (idem que pour les case de select case) de bien choisir l'ordre de traitement des clauses. Et si l'on fait harakiri des elseifs, on sombre alors forcément dans la lenteur inhérente à l'examen systématique de tous les cas !

    A ce propos : je ne crois pas avoir vu jusqu'ici une proposition à coups de elseifs ... Me trompe-je ?
      1  4

  20. #20
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par unparia Voir le message
    Du "blabla" ?[...]
    "que l'on ne pourrait avoir avec des If .. elseif .."[...]
    Mathieu veut justement plusieurs cas (et donc pas de If... ElseIf). C'est JUSTEMENT de sa demande de pouvoir/devoir évaluer plusieurs cas avec Select qu'est né ce "débat".

    La demande de Mathieu ne peut être VALABLEMENT rencontrée que par une succession de IF... End If et justement pas par des If... ElseIf... Endif qui ne permet de répondre qu'à une condition rencontrée, tout comme le bloc Select ... End Select, si l'on veut en tout cas utiliser CORRECTEMENT les constructions mises à notre disposition par le langage.

    Mercatog puis Menhir ont donné LA réponse (unique, à mon sens si on veut une solution professionnelle) à la demande de Mathieu tout au début de la discussion. C'est à pleurer, quand même, d'en arriver à autant d'imbécilité dans les réponses proposées.

    Citation Envoyé par unparia Voir le message
    [...]
    A ce propos : je ne crois pas avoir vu jusqu'ici une proposition à coups de elseifs ... Me trompe-je ?
    Comment une réponse sensée pourrait-elle être formulée avec If... ElseIf... End If puisque cette construction NE PERMET PAS de répondre à la question de Mathieu qui veut pouvoir "empiler" les cas possibles. Le cas qu'il a cité est suffisamment explicite, non?

    Toute construction à coup de Select pour se pavaner n'est que pollution du forum. Pauvre de nous!
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------
      3  0

Discussions similaires

  1. select case avec multiple test (variables)
    Par surfeur2 dans le forum ASP.NET
    Réponses: 0
    Dernier message: 13/11/2016, 09h31
  2. Problème SELECT, CASE et Group by
    Par Royd938 dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 03/10/2014, 07h41
  3. [XL-2003] Problème Select Case multiples
    Par Estimea dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/01/2011, 10h29
  4. erreur select case
    Par maximedrouet dans le forum ASP
    Réponses: 4
    Dernier message: 15/05/2006, 14h40
  5. vérification de passage dans un select case
    Par arsgunner dans le forum ASP
    Réponses: 5
    Dernier message: 14/06/2004, 10h05

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