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

VB.NET Discussion :

Select Case avec plusieurs variables


Sujet :

VB.NET

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    444
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 444
    Points : 428
    Points
    428
    Par défaut Select Case avec plusieurs variables
    Bonjour,
    j'aimerais faire un select case sur plusieurs variables. Mais je me retrouve confronté à un pbm quand je fait un test sur les 2 en même temps.
    J'ai fait juste un petit bout de code pour tester :

    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
     
            Dim a As String
            Dim b As String
            a = 1
            b = 2
     
            Select Case a And b
     
                Case 1 And 2
                    MsgBox("1 et 2")
     
                Case "ok" And "ok"
                    MsgBox("ok")
     
                Case Else
                    MsgBox("Try AgAin")
     
            End Select
    Le problème est que pour une raison qui m'est inconnue, si dans le premier cas celà test 2 integer, dans le second cas malgrès les "" celà fait un test sur un Long (si je mets la souris sur le AND du 2 ème cas il semble déclarer comme un Long).

    Il doit y avoir une raison mais aussi une solution mais là je sèche.
    Ou alors si y a une autre solution pour tester plusieurs variables voir même un array je suis preneur
    Mieux vaut un petit lien qu'un long discours.

  2. #2
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Fait un If Then ElseIf etc..

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    444
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 444
    Points : 428
    Points
    428
    Par défaut
    Oui en fait c'est tout simple suffit de simuler un Select case avec une boucle for et des If. Le Select case peut être intéressant mais il est est un peu limité je trouve.
    Des fois que ça intéresse des gens en gros il faut faire comme ceci :

    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
     
            For i As Integer = 0 To 0
     
                If a = ... And b = ... Then
                    ...
                    Exit For
                End If
     
                If a = ... And b = ...Then
                    ...
                    Exit For
                End If
     
                ...
     
            Next
    Mieux vaut un petit lien qu'un long discours.

  4. #4
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    C'est vraiment affreux ce que tu fais. Pour empiler des If-Else ensemble on fait ça :
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    If (a = 1) AndAlso (b = 2) Then
        Truc()
    ElseIf (a = 2) AndAlso (b = 3) Then
        Truc()
    ElseIf (a = 4) AndAlso (b = 2) Then
        Truc()
    Else
        '...
    End If
    Le code là avec ton 0 To 0 c'est une horreur ...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    444
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 444
    Points : 428
    Points
    428
    Par défaut
    Lol oui c'est pissible mais l'avantage du Select Case c'est que le programme sort dès qu'il a trouvé un cas qui est vrai. Hors si il y a une longue liste de tests avec des if, même en trouvant un cas vrai il va tester tous les autres cas, ce qui pour mon programme est inutile.

    Imaginons un programme avec 20 if voir plus, qu'elle est l'utilité de faire le test des 19 if suivants si le premier est vrai ?

    C'est pour ça qu'un test sur plusieurs variables ou même un array dans un Select Case aurait été pratique pour moi.
    Mieux vaut un petit lien qu'un long discours.

  6. #6
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Citation Envoyé par sphynxounet Voir le message
    Lol oui c'est pissible mais l'avantage du Select Case c'est que le programme sort dès qu'il a trouvé un cas qui est vrai. Hors si il y a une longue liste de tests avec des if, même en trouvant un cas vrai il va tester tous les autres cas, ce qui pour mon programme est inutile.
    N'importe quoi. Dès qu'il trouve un if cohérent il ne va pas s'embêter à tester les "Else if" vu que c'est "Else" donc faux ...

    Citation Envoyé par sphynxounet Voir le message
    Imaginons un programme avec 20 if voir plus
    Dans ce cas j'ai mal au coeur, c'est un programme mal fait.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    444
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 444
    Points : 428
    Points
    428
    Par défaut
    Citation Envoyé par smyley Voir le message
    N'importe quoi. Dès qu'il trouve un if cohérent il ne va pas s'embêter à tester les "Else if" vu que c'est "Else" donc faux ...

    je viens de me rendre compte que j'avais utilisé des elseif dans mon programme avant... Ca fait que 6 semaines que je me suis mis au VB et comme à chaque jour je me tappe pas mal de fiches de l'aide de msdn parfois j'oublie un peu ce que j'ai fait précédemment


    Citation Envoyé par smyley Voir le message
    Dans ce cas j'ai mal au coeur, c'est un programme mal fait.
    Moi aussi j'ai mal au coeur mais ça vient pas du programme. Je dois tester des valeurs dans un array que j'ai rempli à partir de cellules d'un fichier excel (enfin y a plusieurs centaines de fichiers à traiter ...). Ces valeurs correspondent à des achats (fabricant, ref de la pièce, description, ...).
    Je dois tester à chaque fois dans ma base de données si l'item qui est lu à partir de mon array existe. C'est de là que viennent mes multiples possibilités : toutes les valeurs existent dans ma bdd = item existant, seulement certaines valeurs existent = possibilité que l'item existe car possibilité d'une faute de frappe lors de la saisi du fabricant ou référence, référence absente donc vérification dans la liste des items du fabricant s'il existe en fonction de la description, j'en passe et des meilleurs ...
    Mieux vaut un petit lien qu'un long discours.

  8. #8
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Dans ce cas il y a un problème de conception quelque part. Si on arrive à avoir "besoin" de faire 20 IF c'est qu'on a un problème. Il faudrait peut être essayer dans ton cas de hiérarchiser les cas que tu peux rencontrer, utiliser des boucles ou peut être même la Distance de Levenshtein pour combattre les fautes de frappes. Sincèrement, à part dans des cas extrêmes on évite d'avoir un case avec 2000 lignes ou une succession de 2000 If - ElseIf - etc ...

    Et puis surtout, une succession de If - End If lorsqu'on peut le faire avec des If - Else If - ... c'est une mauvaise idée. En tout cas, quitte à en avoir beaucoup vire ce For monstrueux et empile des If - Else If ...

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    444
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 444
    Points : 428
    Points
    428
    Par défaut
    For éliminé

    Sinon pour mes if en gros c'est pour avoir une seule liste de tous mes cas possibles (derrière je créé un panel par item avec plusieurs contrôles, avec des contrôles différents selon les cas). Je peux très bien découper en plusieurs parties mais je devrais toujours faire autant de if que je n'ai de possibilités.
    Si tous les fichiers étaient remplis correctement ça irait mais c'est pas vraiment le cas. D'ailleurs dans mon programme j'ai pas mal de groupes de if justement à cause des différentes façons de remplissage des fichiers (qui sont eux mêmes pas toujours identiques d'ailleurs, -> encore des if ...).
    Mieux vaut un petit lien qu'un long discours.

  10. #10
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Oui mais à long terme découper peux avoir des avantages car on a un code plus simple à relire. Pour en avoir fait l'expérience il est plus facile de lire une fonction de 20 lignes qui appelles 5 fonctions de 10 lignes que d'avoir une seule fonction de 70 lignes ...

    Enfin bref, sur le côté conception je peut pas trop insister (et j'ai peut être tord d'ailleurs dans ton cas ) vu que je ne connais pas ta situation aussi bien que toi. (Le For éliminé c'était le seul problème monumental de ton post )

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    444
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 444
    Points : 428
    Points
    428
    Par défaut
    T'inquiètes y a pas de soucis de toute façon faut bien que j'apprenne à coder proprement (faut pas que je code de la même manière que je range ma chambre ). D'ailleurs j'aurais eu le temps (il me reste en gros la semaine pour finir) j'aurais aussi construit de belles classes mais c'est short.
    Et là encore j'ai purifié ma façon de coder car au début j'avais une seule fonction dans le main form et tout le code était dans le form (et même au tout début tout était dans le load)... c'était illisible même pour moi
    Mieux vaut un petit lien qu'un long discours.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Select case avec then qui retourne une variable
    Par dinette dans le forum SQL
    Réponses: 6
    Dernier message: 06/07/2009, 11h03
  2. [URL Rewriting] Problème avec plusieurs variables
    Par kwzprtt dans le forum Apache
    Réponses: 2
    Dernier message: 13/05/2008, 01h00
  3. Procédure événementielle avec plusieurs variables
    Par Shadow5 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 17/04/2008, 15h10
  4. UPDATE avec plusieurs variables
    Par melmouj dans le forum Langage SQL
    Réponses: 6
    Dernier message: 20/03/2007, 14h51
  5. Requete select imbriqués avec plusieurs références
    Par GAlion dans le forum Langage SQL
    Réponses: 4
    Dernier message: 06/08/2004, 14h06

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