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

Access Discussion :

Instructions select case à deux conditions


Sujet :

Access

  1. #1
    Membre habitué

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 193
    Points : 171
    Points
    171
    Par défaut Instructions select case à deux conditions
    Bonjour !

    J'ai probablement une erreur de syntaxe dans une instruction Select Case
    à deux conditions, mais je ne la comprends pas.
    Voici le code :

    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
     
    While Not Rst_Tableau3.EOF
     
    Select Case Rst_Tableau3("TypeAdherent_Ent") And Rst_Tableau3("OrigineContact_Ent")
     
     
    Case "Direct" 'type d'adhérent
        'compter le nb de directs
        Total_Direct = Total_Direct + Rst_Tableau3![NbAdh]
     
        Case "Prospection directe" 'origine
     
        appexcel.Cells(9, 3) = Rst_Tableau3![NbAdh]
        'compte le nb d'adhérents de cette origine
        Total_Or1 = Total_Or1 + Rst_Tableau3![NbAdh]
        ...
        Case Else 'autre origine
     
        appexcel.Cells(31, 3) = Rst_Tableau3![NbAdh]
        Total_Or12 = Total_Or12 + Rst_Tableau3![NbAdh]
     
     
    Case "Syndicat" ' type d'adhérent
        Total_Syndicat = Total_Syndicat + Rst_Tableau3![NbAdh]
     
     
        Case "Prospection directe" 'origine
     
        appexcel.Cells(9, 4) = Rst_Tableau3![NbAdh]
        Total_Or1 = Total_Or1 + Rst_Tableau3![NbAdh]
     
        ...
    End Select
    ...
    Wend
    Lors de l'éxécution, le programme s'arrete sur la ligne
    Case "Syndicat"

    et le message d'erreur est :
    Case sans Select Case

    Merci d'avance !

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 015
    Points : 24 552
    Points
    24 552
    Par défaut
    Bonjour,

    Ta manière d'utiliser un select case est fausse

    Si tu consulte l'aide sur cette commande il y a marqué

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Select Case ...
      Case ..
      Case ..
      Case else
    End select
    Donc un Case else au milieu ne peut fonctionner.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  3. #3
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Salut
    Tu devrais essayer une structure de ce type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Select Case Variable1
    Case "x1"
      Select Case Variable2
        Case "y1"
        Case "y2"
      End select
    Case "x2"
     Select Case Variable2
        Case "y1"
        Case "y2"
      End select
    ....
    End select
    mais bon, ça ferait répéter x fois le select case Variable2

  4. #4
    Membre habitué

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 193
    Points : 171
    Points
    171
    Par défaut
    Merci pour cette information.

    En fait mon Case Else était dédié à prendre en compte les valeurs nulles,

    mais je n'arrive pas à traduire cette condition.
    J'ai essayé Case " "
    Case Null

    Mais ca ne fonctionne pas (pas de message d'erreur non plus).
    Pourtant l'enregistrement contient bien une valeur null.

    Comment faire ?

  5. #5
    Membre habitué

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 193
    Points : 171
    Points
    171
    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
     
    Select Case Variable1 
    Case "x1" 
      Select Case Variable2 
        Case "y1" 
        Case "y2" 
      End select 
    Case "x2" 
     Select Case Variable2 
        Case "y1" 
        Case "y2" 
      End select 
    .... 
    End select
    Bonjour !
    Merci, j'ai déjà fait un tableau en faisant
    Select Case
    Case
    if
    else if
    ....

    et vraiment non!Sauf pour un petit tableau, parce qu'on arrive vite à des pages et des pages de codes.

  6. #6
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    j'ai essayé ceci chez moi et ça fonctionne

  7. #7
    Membre habitué

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 193
    Points : 171
    Points
    171
    Par défaut
    Ben avec moi ca "marche pas", mon problème ne doit pas être là.

    Merci pour vos réponses!

  8. #8
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Quand les tests sur = "" ou Is Null échouent, il faut tester si la longueur de la chaîne est égale à zéro ...
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  9. #9
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    J'ai mon aide access qui bugge (et j'ai pas le cd sous la main ) mais sans elle j'ai pu tester
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    If Champs <> "" Then
    Select Case Variable
        Case "x"
        ...
        Case "y"
        ...
    End Select
    Else
    ...
    End If

  10. #10
    Membre habitué

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 193
    Points : 171
    Points
    171
    Par défaut
    Je viens d'essayer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Case Len(Rst_Tableau3("TypeAdherent_Ent")) = 0
    mais mon pb est toujours là .

    Le message est : Incompabilité de type
    Le débogueur se positionne sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    Select Case Rst_Tableau3("TypeAdherent_Ent") And Rst_Tableau3("OrigineContact_Ent")
    avec pour valeur TypeAdherent_Ent=null
    et OrigineContact_Ent="Appel de leur part"

    Et comme condition j'ai bien :
    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
     
    'Case Is = Null
    'Case " "
    Case Len(Rst_Tableau3("TypeAdherent_Ent")) = 0
        Total_Inc = Total_Inc + Rst_Tableau3![NbAdh]
     
        Case "Prospection directe"
     
        ... 
     
        Case "Appel de leur part"
     
        appexcel.Cells(11, 8) = Rst_Tableau3![NbAdh]
        Total_Or2 = Total_Or2 + Rst_Tableau3![NbAdh]
     
    ...

  11. #11
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Citation Envoyé par Celia1303
    Je viens d'essayer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Case Len(Rst_Tableau3("TypeAdherent_Ent")) = 0
    mais mon pb est toujours là .

    Le message est : Incompabilité de type
    Le débogueur se positionne sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    Select Case Rst_Tableau3("TypeAdherent_Ent") And Rst_Tableau3("OrigineContact_Ent")
    Forcément...
    TypeAdherent_Ent est de type texte (string) et tu teste avec un entier...
    Citation Envoyé par Celia1303
    avec pour valeur TypeAdherent_Ent=null
    et OrigineContact_Ent="Appel de leur part"

    Et comme condition j'ai bien :
    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
     
    'Case Is = Null
    'Case " "
    Case Len(Rst_Tableau3("TypeAdherent_Ent")) = 0
        Total_Inc = Total_Inc + Rst_Tableau3![NbAdh]
     
        Case "Prospection directe"
     
        ... 
     
        Case "Appel de leur part"
     
        appexcel.Cells(11, 8) = Rst_Tableau3![NbAdh]
        Total_Or2 = Total_Or2 + Rst_Tableau3![NbAdh]
     
    ...
    Tu devrais d'abord tester ton champs (la longueur ou la valeur avec "" ou null) et si le champ n'est pas vide alors tu fais ton case.. Non ??

  12. #12
    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 526
    Points
    14 526
    Par défaut
    Salut,

    Heu juste une idée comme ça...
    Si ton code est le même pour chacun des cas, pourquoi ne pas paramétrer l'action à faire dans une table?
    Genre une table :
    Direct | Prospection directe |1 | 9 | 3 | 1 |
    Direct | |1 | 31| 3 | 12|
    Syndicat | Prospection directe |2 | 9 | 3 | 1 |

    3è champ : le total en fonction du type d'adhérent
    4è champ : la ligne de la cellule
    5è champ : la colonne de la cellule
    6è champ : Le total en fonction de l'origine

    Tu recherches l'enregistrement de la table qui correspond à tes deux critères.
    Et après ton code c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    appexcel.Cells(rs!CellX,rs!CellY) = Rst_Tableau3![NbAdh]
    avec CellX et CellY qui sont les champs de la table de paramètrage.
    Et tu pourrais mettre tes totaux dans un array :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Total_Or(rs!Total) = Total_Or(rs!Total) + Rst_Tableau3![NbAdh]
    Comme ça tu n'écris ton code qu'une fois et tu peux facilement changer les paramètres ou ajouter des nouveaux types sans avoir à copier/coller le code.

    En triant le recordset Rst_Tableau3 sur des champs "TypeAdherent_Ent" et "OrigineContact_Ent", et en ne lisant la table de paramètrage seulement qu'à chaque changement de l'un de ces deux champs ça restera performant.

    Bon reste à voir si le code est identique à chaque fois...

  13. #13
    Membre habitué

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 193
    Points : 171
    Points
    171
    Par défaut
    La fonction len , d'après ce que j'ai vu,
    Retourne le nombre de caractères d'une chaîne ou le nombre d'octets d'une variable.
    Donc retourne un entier...
    C'est pas ca ???


    Tu devrais d'abord tester ton champs (la longueur ou la valeur avec "" ou null) et si le champ n'est pas vide alors tu fais ton case.. Non ??
    Je veux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
       selon Type_Adherent = null
     
                selon Origine_Adherent = "origine1"
                instruction
                selon Origine_Adherent = "origine2"
                ....

  14. #14
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Citation Envoyé par Celia1303
    La fonction len , d'après ce que j'ai vu,
    Retourne le nombre de caractères d'une chaîne ou le nombre d'octets d'une variable.
    Donc retourne un entier...
    C'est pas ca ???
    Autant pour moi.. j'ai lu trop vite ta ligne de code... tu es dans le vrai.

  15. #15
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    A mon avis (tu vas te dire que je suis têtu), ta solution est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if len(TonChamp) <> 0 then
    Select case Variable
      Case "xx"
      ....
      Case "yy"
    ....
    Tu ne peux pas (si je ne me trompe) dans un case tester la longueur d'une chaine mais uniquement ses valeurs.
    Et comme ou ne donnent rien...
    A toi de voir...

  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 526
    Points
    14 526
    Par défaut
    Tu ne peux pas (si je ne me trompe) dans un case tester la longueur d'une chaine mais uniquement ses valeurs.
    Ben on peut faire un case sur une longueur d'une chaîne.

    L'erreur dans le code précédent est l'utilisation du And dans le "Select Case".
    Le And est un opérateur logique qui opère sur des booléen.
    Tu ne peux pas l'utiliser pour faire une case double avec des strings, ça n'a rien à voir.

    Sinon tu peux sûrement faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select Case Nz(Rst_Tableau3("TypeAdherent_Ent"))
    Comme ça les null sont transformés en chaînes vides et tu peux les tester dans le case.

Discussions similaires

  1. Select Case et plusieurs instructions
    Par sony25 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 09/10/2011, 14h33
  2. Instruction select avec deux critères
    Par the watcher dans le forum DB2
    Réponses: 3
    Dernier message: 01/08/2010, 23h55
  3. [AC-2003] Aide sur la condition "select case"
    Par Ministic dans le forum VBA Access
    Réponses: 2
    Dernier message: 23/03/2010, 11h22
  4. Probleme Select Case sur Double Condition
    Par Danyel dans le forum VB.NET
    Réponses: 2
    Dernier message: 14/04/2008, 23h37
  5. []Problème avec un "Select Case" : Instructions et..
    Par Olun dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 07/09/2005, 13h32

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