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

  1. #1
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    juillet 2019
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : juillet 2019
    Messages : 41
    Points : 43
    Points
    43
    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 sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    Select case n'est pas appropriée.
    Utilise des if / then à la suite.
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.
      2  0

  3. #3
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    juin 2007
    Messages
    16 034
    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 034
    Points : 32 859
    Points
    32 859
    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)
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.
      3  0

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

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : juillet 2019
    Messages : 41
    Points : 43
    Points
    43
    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 éminent
    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 : 65
    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
    Points : 7 150
    Points
    7 150
    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.

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.

      2  0

  6. #6
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    juin 2007
    Messages
    16 034
    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 034
    Points : 32 859
    Points
    32 859
    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.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.
      3  0

  7. #7
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : avril 2016
    Messages : 7 563
    Points : 12 418
    Points
    12 418
    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.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.
      1  4

  8. #8
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    novembre 2003
    Messages
    18 969
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Belgique

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

    Informations forums :
    Inscription : novembre 2003
    Messages : 18 969
    Points : 55 572
    Points
    55 572
    Billets dans le blog
    128
    Par défaut
    Citation Envoyé par unparia Voir le message
    [...]
    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.
    Il ne me viendrait personnellement jamais à l'idée de procéder ainsi. C'est pour moi une démarche d'une stupidité didactique affligeante, et je ne vois pas en quoi il est question ici de pédagogie. C'est d'autant plus contre-productif pour moi que, alors que les autres langages imposent un Break pour ne tester qu'un cas, VBA lui, ne permet d'en valider qu'un seul, sans besoin de Break. Si l'on souhaite un quelconque aspect didactique à cette démarche affligeante, il faut à tout le moins donner les clés à l'étudiant de comprendre le cheminement du code (et donc d'aborder le débogage, seule technique ici de valider le saut des cas suivants celui validé, sauf à le déduire). D'expérience, les participants à mes formations qui ont "subi" ce genre de cours n'ont pas eu de cours de débogage et sont donc forcément paumés, en plus du fait qu'ils ont pris de mauvaises habitudes de codage.

    La construction Select Case... est clairement présente pour évaluer les différentes valeurs possibles d'une même expression, et l'utiliser, même à titre "pédagogique" () avec la constante True est tout sauf productif.

    Soit le prof est c**, soit l'étudiant n'a pas compris l'exercice, ou a justement loupé les explications sur le débogage qui auraient permis à l'exercice de revêtir une très relative dimension didactique.

    My two cents.



    Citation Envoyé par unparia Voir le message
    [...]
    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"[...]
    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 ...
    "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 expérimenté Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    décembre 2017
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : décembre 2017
    Messages : 724
    Points : 1 454
    Points
    1 454
    Par défaut
    Bonjour à tous, si vous me permettez d'intervenir dans ce "débat"?
    Je pense qu'avant de disserter longuement sur le "sexe des anges", il serait plus important de demander a ce cher @Mathieu_12, quel est la demande exact de l'enseignant, concernant l'utilisation du "Select Case".
    Doit-il être le lien entre toutes les propositions?
    Peut-il y avoir plusieurs "Select Case" imbriqués suivant les "familles d'affirmations"? (exemple ( c'est ou bateau ou vélo, mais pas les deux, par ailleurs bateau ou vélo n'entrent dans aucun des critères qui suivent) etc etc).
    Bon, Enfin moi ce que j'en dit?
    Cordialement
    On a deux vies, la deuxième commence quand on se rend compte qu'on n'en a qu'une.
    Confucius
      1  0

  10. #10
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : avril 2016
    Messages : 7 563
    Points : 12 418
    Points
    12 418
    Par défaut
    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
    Pour mémoire :
    je me garderai donc personnellement de gêner/polluer/troubler sa démarche
    Je veux dans ces conditions bien y revenir, mais très clairement pas sans avoir laissé passer suffisamment de temps pour que ce devoir en reste un et puisse être noté de manière pure.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.
      2  2

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    mai 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2008
    Messages : 364
    Points : 350
    Points
    350
    Par défaut
    Bonjour …
    unparia, je me vois mal donner un avis quant au travail d’un enseignant sans savoir quel est son public et quels sont ses objectifs.
    Pierre,
    « Soit le prof est c**, soit l'étudiant n'a pas compris l'exercice, ou a justement loupé les explications sur le débogage qui auraient permis à l'exercice de revêtir une très relative dimension didactique. »
    Je ne vois pas ce qui te permet d’affirmer cela.

    Je ne suis pas cet enseignant et je suis peut-être c** mais je pourrais poser un tel exercice avec l’utilisation d’un outil précis pour savoir si celui-ci est connu, bien utilisé par l’étudiant.

    Concernant la réponse de ce dernier (Matthieu en l'occrence), je lui expliquerais (comme cela a été fait par d’autres intervenants) pour quelle raison elle ne convient pas si l’on veut la liste de tous les cas acceptables.
    Je le guiderais vers l’exemple suivant avec le Select Case
    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
    Sub j()
      Dim R As String, S As String, n As Byte
      R = "If faut placer le velo sur le bateau sans ses pedales"
      While n < 6
        n = n + 1
        Select Case n
          Case Is = 1 And R Like "*bateau*": S = S & "contient bateau" & vbLf
          Case Is = 2 And R Like "*velo*": S = S & "contient velo" & vbLf
          Case Is = 3 And R Like "f*": S = S & "commence par la lettre f" & vbLf
          Case Is = 4 And R Like "*e": S = S & "termine par la lettre e" & vbLf
          Case Is = 5 And Len(R) > 10: S = S & "a + 10 lettres" & vbLf
          Case Is = 6 And R Like "*ed*": S = S & "contient ed"
        End Select
      Wend
      If S = "" Then S = "ne présente aucun des cas cités !"
      MsgBox "pour : " & R & " " & vbLf & S, , "cas rencontrés ..."
    End Sub
    pour montrer comment on peut l’utiliser mais, aussi, pour lancer le débat sur son opportunité avec ses complications dans cette situation.
    Cela pourrait se finir par la résolution de l’exercice traitant le même questionnement sans cet outil (ce qui a déjà été fait).
    De plus, je pourrais aussi tester l'outil MsgBox non ?

    Edit : désolé unparia mais ce n'est pas un désaveu de ta dernière intervention. C'est à Matthieu de savoir ce qu'il va faire.
      3  3

  12. #12
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : avril 2016
    Messages : 7 563
    Points : 12 418
    Points
    12 418
    Par défaut
    Bonjour OrDonc
    désolé unparia mais ce n'est pas un désaveu de ta dernière intervention. C'est à Matthieu de savoir ce qu'il va faire.
    Je ne t'en tiens aucune rigueur, ami, puisque tu as ainsi choisi de l'obliger à s'exercer.
    Amitiés
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.
      0  2

  13. #13
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    novembre 2003
    Messages
    18 969
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Belgique

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

    Informations forums :
    Inscription : novembre 2003
    Messages : 18 969
    Points : 55 572
    Points
    55 572
    Billets dans le blog
    128
    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

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    mai 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2008
    Messages : 364
    Points : 350
    Points
    350
    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

  15. #15
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    novembre 2003
    Messages
    18 969
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Belgique

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

    Informations forums :
    Inscription : novembre 2003
    Messages : 18 969
    Points : 55 572
    Points
    55 572
    Billets dans le blog
    128
    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

  16. #16
    Responsable Access

    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
    Points : 14 294
    Points
    14 294
    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

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    mai 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2008
    Messages : 364
    Points : 350
    Points
    350
    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
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    juin 2007
    Messages
    16 034
    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 034
    Points : 32 859
    Points
    32 859
    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...
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.
      2  1

  19. #19
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    juillet 2019
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : juillet 2019
    Messages : 41
    Points : 43
    Points
    43
    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

  20. #20
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    juillet 2019
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : juillet 2019
    Messages : 41
    Points : 43
    Points
    43
    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

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