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 6 et antérieur Discussion :

Existe-il autre chose que le If ou Case pour comparer plusieurs valeurs ?


Sujet :

VB 6 et antérieur

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    683
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 683
    Points : 237
    Points
    237
    Par défaut Existe-il autre chose que le If ou Case pour comparer plusieurs valeurs ?
    Bonjour

    Je lis une valeur dans un fichier excel que je stocke dans une variable "VALEURLUE".

    Je souhaite vérifier que cette valeur "existe" dans une sorte de table de correspondance (j'ai 500 valeurs possibles et je ne dois pas en accepter d'autres)

    Je me dis que je vais mettre une "plombe" à saisir qq chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    If VALEURLUE="TOTO" Then conforme=1 Else conforme=0 'valeur possible N°1
    If VALEURLUE="VELO" Then conforme=1 Else conforme=0 'valeur possible N°1
    If VALEURLUE="ANNIVERSAIRE" Then conforme=1 Else conforme=0 'valeur possible N°1
    ...
    et ainsi de suite 500 fois. En gros ce serait pareil avec un case


    Mes valeurs possibles ne sont pas une suite exacte. C'est comme dans mon exemple, elles peuvent avoir rien en commun.

    Cela pourrait se comparer à : je saisis un prénom, je vérifier s'il existe dans tous les prénoms du calendrier pour savoir si il est accepté.

    Auriez-vous une idée autre que 500 IF à la suite ?

    Merci

  2. #2
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Citation Envoyé par tibofo Voir le message
    ... "existe" dans une sorte de table de correspondance (j'ai 500 valeurs possibles et je ne dois pas en accepter d'autres)...
    et tu as une idée de ce que tu vas utiliser pour ta table de correspondance ?

    pour ma part je verrai bien une collection ...

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    683
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 683
    Points : 237
    Points
    237
    Par défaut
    Bonsoir,

    Oui, je sais ce qu'il y a dans ma liste. Mais je ne sais pas ce que c'est une "collection" : je suis en train de fouiller sur le Net...

    Entre temps, je me suis aperçu que mon code est mauvais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If VALEURLUE="TOTO" Then conforme=1 Else conforme=0 'valeur possible N°1
    If VALEURLUE="VELO" Then conforme=1 Else conforme=0 'valeur possible N°1
    If VALEURLUE="ANNIVERSAIRE" Then conforme=1 Else conforme=0 'valeur possible N°1
    ...
    Si ma VALEURLUE="VELO", conforme=1 mais dés la ligne suivante conforme reprends 0 (c'est normal vu mon code !!)
    comment puis y arriver ?

    Merci

  4. #4
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    s'il s'agit que de deux possibilité : conforme ou pas ... tu peu aussi stocker tes valeurs dans une chaine ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    stliste = "/TOTO/VELO/ANNIVERSAIRE/"
    conforme = InStr(1, stliste, "/" & valeurlue & "/", vbTextCompare) > 0

  5. #5
    Membre régulier
    Inscrit en
    Janvier 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 177
    Points : 98
    Points
    98
    Par défaut
    selon ma compréhension de ton problème deux cas sont possibles

    1/ tu as ta table de correspondance enregistrée dans un un fichier excel; supposant qu'elle est dans la colonne i, tu peux faire une chose comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    conforme=0
    j=1
    while (conforme=0) and  (j<=500)
    if VALEURLUE=sheet.Cells(j,i).Value then
    conforme=1
    end if
    j=j+1
    wend
    if conforme=1 then
    msgbox("existe")
    else
    msgbox("n'existe pas")
    end if
    2/ tu as ta table de correspondance dans un tableau T(1 to 500) as string (tu dois l'avoir saisit)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    conforme=0
    j=1
    while (conforme=0) and  (j<=500)
    if VALEURLUE=T(j) then
    conforme=1
    end if
    j=j+1
    wend
    if conforme=1 then
    msgbox("existe")
    else
    msgbox("n'existe pas")
    end if
    je ne sais pas si j'ai bien compris ton problème

  6. #6
    Membre éclairé
    Inscrit en
    Décembre 2007
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 512
    Points : 671
    Points
    671
    Par défaut
    Bonjour,


    Code :

    If VALEURLUE="TOTO" Then conforme=1 Else conforme=0 'valeur possible N°1
    If VALEURLUE="VELO" Then conforme=1 Else conforme=0 'valeur possible N°1
    If VALEURLUE="ANNIVERSAIRE" Then conforme=1 Else conforme=0 'valeur possible N°1
    ...
    et ainsi de suite 500 fois. En gros ce serait pareil avec un case
    ...
    Auriez-vous une idée autre que 500 IF à la suite ?
    Oui.

    Ouvrir le Bloc-Notes, et constituer un fichier tel que ceci

    Le premier enregistrement sera le nombre de valeurs à tester, puis les valeurs à tester.

    Ex: ( à adapter selon ton cas)

    3
    TOTO
    VELO
    ANNIVERSAIRE

    Puis donner un nom au fichier et l'enregistrer.

    Puis dans VB6 mettre le code suivant:

    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 Nbuffer as integer
    Dim i as integer
    Dim NEnreg as integer
    Dim Chemin as string
    Dim NomduFichier as string
    Dim ValeuràTester () as String
     
     Nbuffer= FreeFile
     Open Chemin  & Nomdufichier For Input As #Nbuffer
       Input #Nbuffer, NEnreg
     
     Redim ValeuràTester (NEnreg)
     
     For i = 1 To NEnreg
       Input #Nbuffer, ValeuràTester(i)
     Next
     Close Nbuffer
     ...
     
    conforme=0
    For i = 1 To NEnreg
      If VALEURLUE = ValeuràTester(i)  Then 
              conforme=1 
              Exit For
      End If
    Next
     
    ...
    Pour n'avoir qu'un seul If à encoder...

    A+

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    683
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 683
    Points : 237
    Points
    237
    Par défaut
    Merci à tous pour ces réponses fructueuses !

    Cela va me servir !!

  8. #8
    Inactif  
    Profil pro
    Inscrit en
    Février 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 517
    Points : 617
    Points
    617
    Par défaut
    Salut

    Pour 500 mots, j'utiliserais personnellement un objet dictionnaire (dictionnary) dico
    Je garderais l'idee de iclic (celle de l'utilisation d'un fichier texte) mais ne m'en servirais que pour eviter d'intervenir en dur sur mon code, donnant la preference a un abondement du fichier texte, lequel servirait (a l'aide de la fonction Split) a alimenter mon dictionnaire des l'ouverture de mon appli.
    Que suffirait-il ensuite de faire ? tout simplement utiliser la fonction Exists de l'objet dictionnary et donner la valeur 1 si valeur retournee = True
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    conforme = 0 
    If exists dico("le_nom-teste") then conforme = 1

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

Discussions similaires

  1. Autre chose que les SSII
    Par Invité dans le forum Emploi
    Réponses: 18
    Dernier message: 25/08/2006, 12h36
  2. ON DELETE SET autre chose que null
    Par minirom dans le forum Requêtes
    Réponses: 4
    Dernier message: 26/07/2006, 15h32
  3. Réponses: 11
    Dernier message: 13/05/2006, 15h17
  4. Arrive plus a installer autre chose que debian
    Par kosmic dans le forum Debian
    Réponses: 10
    Dernier message: 12/12/2005, 11h50
  5. [langage] connaissez-vous autre chose que -d
    Par Sébastien dans le forum Langage
    Réponses: 4
    Dernier message: 05/08/2002, 20h13

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