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

VBA Access Discussion :

Select case qui ne fonctionne pas [AC-2013]


Sujet :

VBA Access

  1. #1
    Membre habitué Avatar de Gabrieel
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2004
    Messages : 186
    Points : 172
    Points
    172
    Par défaut Select case qui ne fonctionne pas
    Bonjour,

    je ne comprends pas pourquoi cela ne fonctionne pas. quand je test avec la fenêtre d’exécution les propositions , elle fonctionne bien, mais quand je lance dans ma requête il me choit la proposition "select else"

    voici mon code, une idée?
    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
    Public Function Marque(stConstructeur As String) As String
     
    Dim stConst As String
    stConst = Left(stConstructeur, 2)
    Select Case stConstructeur
        Case stConst = "WD":     Marque = "Mercedes"
        Case stConst = "VF":       Marque = "Renault"
        Case stConst = "SJ":        Marque = "Nissan"
        Case stConst = "SH":       Marque = "Nissan"
        Case stConst = "MD":      Marque = "Nissan"
        Case stConst = "JN":        Marque = "Nissan"
        Case stConst = "JH":        Marque = "Nissan"
        Case stConst = "3H":       Marque = "Honda"
     
      Case Else
            Marque = "Inconnu: " & stConst
    End Select
     
     
    End Function
    merci d'avance

    Bien cordialement,
    A.

  2. #2
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonjour,
    Select Case stConst plutôt que Select Case stConstructeur fonctionnerait mieux
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  3. #3
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 878
    Points : 4 754
    Points
    4 754
    Par défaut
    Bonjour

    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 stConst 
        Case "WD":     Marque = "Mercedes"
        Case  "VF":       Marque = "Renault"
        Case "SJ":        Marque = "Nissan"
        Case  "SH":       Marque = "Nissan"
        Case "MD":      Marque = "Nissan"
        Case  "JN":        Marque = "Nissan"
        Case  "JH":        Marque = "Nissan"
        Case "3H":       Marque = "Honda"
     
      Case Else
            Marque = "Inconnu: " & stConst
    End Select
    Cdlt
    "Always look at the bright side of life." Monty Python.

  4. #4
    Membre habitué Avatar de Gabrieel
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2004
    Messages : 186
    Points : 172
    Points
    172
    Par défaut
    Bonjour,

    j'ai modifié comme précisé et je n'ai toujours rien :-(

    je ne comprend vraiment pas la!

    merci d'avance

    Bien cordialement,
    A.

  5. #5
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    Bonsoir,
    ajoute un Debug.Print pour vérifier la valeur de stConstructeur car il n'y aucune raison pour que cela ne fonctionne pas.
    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
    Public Function Marque(stConstructeur As String) As String
     
    Dim stConst As String
    stConst = Left(stConstructeur, 2)
    Debug.Print stConstructeur
     
    Select Case stConst
        Case "WD":      Marque = "Mercedes"
        Case "VF":      Marque = "Renault"
        Case "SJ":      Marque = "Nissan"
        Case "SH":      Marque = "Nissan"
        Case "MD":      Marque = "Nissan"
        Case "JN":      Marque = "Nissan"
        Case "JH":      Marque = "Nissan"
        Case "3H":      Marque = "Honda"
     
      Case Else
            Marque = "Inconnu: " & stConst
    End Select
     
    End Function
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  6. #6
    Membre habitué Avatar de Gabrieel
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2004
    Messages : 186
    Points : 172
    Points
    172
    Par défaut
    Bonjour

    les resultats des debugs sont bons, je ne sais vraiment pas pourquoi individuellement les propositions sont juste mais quand le select case se deroule c'est le case else qui est choisi

    je suis largué ici

    Merci d'avance

    Bien cordialement,
    G.

  7. #7
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    Curieux, effectivement.
    Dans quel contexte est utilisée la fonction :requête, formulaire, source de données externes ... ?
    Peut-on avoir un exemple du résultat du Debug ?
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  8. #8
    Membre habitué Avatar de Gabrieel
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2004
    Messages : 186
    Points : 172
    Points
    172
    Par défaut
    j'utilise la formule dans une requête pour déterminer un champ. voici le code sql
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT tblPVE.[CODE CENTRE], Marque([MARQUE DU FABRICANT]) AS OEM, Count(tblPVE.CHASSIS) AS [Nb VIN]
    FROM tblPVE
    GROUP BY tblPVE.[CODE CENTRE], Marque([MARQUE DU FABRICANT]);

    voici le résultat du debug

    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    VF
    JN
    3H
    3H
    3H
    SH
    SH
    SH
    JH
    JH
    VF

  9. #9
    Invité
    Invité(e)
    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
    15
    16
    17
    18
    19
    20
    21
    Public Function Marque(stConstructeur As String) As String
     
    Dim stConst As String
    stConst =Ucase(Left(Cstr(stConstructeur), 2))
    Debug.Print stConstructeur & " | " &  Ucase(cstr(stConstructeur))
     
    Select Case stConst
        Case "WD":      Marque = "Mercedes"
        Case "VF":      Marque = "Renault"
        Case "SJ":      Marque = "Nissan"
        Case "SH":      Marque = "Nissan"
        Case "MD":      Marque = "Nissan"
        Case "JN":      Marque = "Nissan"
        Case "JH":      Marque = "Nissan"
        Case "3H":      Marque = "Honda"
     
      Case Else
            Marque = "Inconnu: " & stConst
    End Select
     
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim a As String
    a = "aa"
    Select Case a
    Case "AA": MsgBox "r" '"aa" n'est pas "AA" ou " AA " n'est pas "AA"
    Case Else: MsgBox "t"
    End Select
    Dernière modification par Invité ; 07/12/2016 à 09h03.

  10. #10
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    Bonjour,
    Si la distinction majuscule/minuscule est activée cela veut dire que l'option Compare Database n'existe pas dans le Module car Compare Binary est l'option par défaut si il n'y a pas d'instruction. Mais dans le résultat du Debug on voit des majuscules.
    De plus, j'ai testé le code et il fonctionne, il me faudrait juste de VRAIES données pour vérifier.
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  11. #11
    Membre habitué Avatar de Gabrieel
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2004
    Messages : 186
    Points : 172
    Points
    172
    Par défaut
    Bonjour,

    voici des données exemples

    encore merci

    MARQUE DU FABRICANT
    3HG
    AUT
    JHM
    JN1
    MDH
    SHS
    SJN
    VF1
    WDC
    WDD

    et voici le résultat que j'ai

    OEM
    Inconnu: 3H
    Inconnu: AU
    Inconnu: JH
    Inconnu: JN
    Inconnu: MD
    Inconnu: SH
    Inconnu: SJ
    Inconnu: VF
    Inconnu: WD

  12. #12
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    tu peux essayer ce code qui utilise SWITCH, l'équivalent en SQL de Select Case :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT tblPVE.[CODE CENTRE], Switch(Left([MARQUE DU FABRICANT],2)="WD","Mercedes",Left([MARQUE DU FABRICANT],2)="VF","Renault",Left([MARQUE DU FABRICANT],2) In ("SJ","SH","MD","JN","JH"),"Nissan",Left([MARQUE DU FABRICANT],2)="3H","Honda",True,"Inconnu :" & Left([MARQUE DU FABRICANT],2)) AS OEM, Count(tblPVE.CHASSIS) AS [Nb VIN]
    FROM tblPVE
    GROUP BY tblPVE.[CODE CENTRE], Switch(Left([MARQUE DU FABRICANT],2)="WD","Mercedes",Left([MARQUE DU FABRICANT],2)="VF","Renault",Left([MARQUE DU FABRICANT],2) In ("SJ","SH","MD","JN","JH"),"Nissan",Left([MARQUE DU FABRICANT],2)="3H","Honda",True,"Inconnu :" & Left([MARQUE DU FABRICANT],2));
    juste pour qu'on voit si c'est un problème de données ou de code.
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  13. #13
    Membre habitué Avatar de Gabrieel
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2004
    Messages : 186
    Points : 172
    Points
    172
    Par défaut
    Bonjour,

    ça marche maintenant, mais j'aimerai bien comprendre pourquoi le VBA ne fonctionne pas, le code m'a l'air ok....

  14. #14
    Membre habitué Avatar de Gabrieel
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2004
    Messages : 186
    Points : 172
    Points
    172
    Par défaut
    Citation Envoyé par tee_grandbois Voir le message
    tu peux essayer ce code qui utilise SWITCH, l'équivalent en SQL de Select Case :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT tblPVE.[CODE CENTRE], Switch(Left([MARQUE DU FABRICANT],2)="WD","Mercedes",Left([MARQUE DU FABRICANT],2)="VF","Renault",Left([MARQUE DU FABRICANT],2) In ("SJ","SH","MD","JN","JH"),"Nissan",Left([MARQUE DU FABRICANT],2)="3H","Honda",True,"Inconnu :" & Left([MARQUE DU FABRICANT],2)) AS OEM, Count(tblPVE.CHASSIS) AS [Nb VIN]
    FROM tblPVE
    GROUP BY tblPVE.[CODE CENTRE], Switch(Left([MARQUE DU FABRICANT],2)="WD","Mercedes",Left([MARQUE DU FABRICANT],2)="VF","Renault",Left([MARQUE DU FABRICANT],2) In ("SJ","SH","MD","JN","JH"),"Nissan",Left([MARQUE DU FABRICANT],2)="3H","Honda",True,"Inconnu :" & Left([MARQUE DU FABRICANT],2));
    juste pour qu'on voit si c'est un problème de données ou de code.
    Merci en tout cas, je ne connaissais pas cette fonction SQL

  15. #15
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    Citation Envoyé par Gabrieel Voir le message
    Bonjour,

    ça marche maintenant, mais j'aimerai bien comprendre pourquoi le VBA ne fonctionne pas, le code m'a l'air ok....
    si tu peux poster une partie de ta base en enlevant les données sensibles je peux jeter un oeil car j'aimerais aussi comprendre pourquoi.
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  16. #16
    Membre habitué Avatar de Gabrieel
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2004
    Messages : 186
    Points : 172
    Points
    172
    Par défaut
    Bonjour,

    voici le lien qui vous menera a la base. soyez indulgent c'est un vrai amateur qui l'a fait vous verrez certainement des arriérations, merci tout conseil sera particulièrement apprecié

  17. #17
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    Bonsoir,
    tu n'as pas appliqué toutes les modifications qu'on t'a fourni :ne pouvait pas fonctionner car "stConst =" est de trop.
    La prochaine fois, fais un copier/coller du code que l'on te donne cela évitera aux contributeurs de chercher pour rien.
    Voici le bon code que j'ai un peu optimisé, tu peux le remplacer par l'existant :
    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
    Public Function Marque(stConstructeur As String) As String
     
    Dim stConst As String
    stConst = Left(stConstructeur, 2)
    Select Case stConst
        Case "WD":      Marque = "Mercedes"
        Case "VF":      Marque = "Renault"
        Case "SJ", "SH", "MD", "JN", "JH":   Marque = "Nissan"
        Case "3H":      Marque = "Honda"
     
        Case Else
            Marque = "Inconnu: " & stConst
    End Select
     
    End Function
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  18. #18
    Membre habitué Avatar de Gabrieel
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2004
    Messages : 186
    Points : 172
    Points
    172
    Par défaut
    Ok merci ça marche!

  19. #19
    Membre habitué Avatar de Gabrieel
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2004
    Messages : 186
    Points : 172
    Points
    172
    Par défaut
    Une derniere question. grace a ce probleme j'ai aussi decouvert la fonction SQL PremVrai . en terme de souplesse et de paramêtrage je suppose que VBA est en tête, mais en terme de rapidité SQL doit être en tête non?

    vous a ma place vous auriez privilégié le SQL ou le VBA et pourquoi?

    Un gros merci en tout cas pour votre aide qui m'a permit de résoudre mon souci

  20. #20
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    Premvrai, selon moi serait plus rapide mais le gain n'est pas assez significatif pour ne pas laisser tomber la fonction qui, pour ma part, est plus facilement "maintenable" (possibilité de documenter le code) et "portable" (utilisation dans d'autres requêtes par exemple ...)
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [PHP 5.1] Un "select count" qui ne fonctionne pas
    Par Milyshyn76 dans le forum Langage
    Réponses: 2
    Dernier message: 19/03/2009, 14h42
  2. un select case qui ne fait pas tout ce qu'on lui demande
    Par will Igetit dans le forum Excel
    Réponses: 1
    Dernier message: 17/12/2008, 21h18
  3. Select Case qui ne marche pas
    Par Zak Blayde dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/07/2007, 13h45
  4. requête de selection qui ne fonctionne pas
    Par emmablue dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 28/07/2006, 13h55
  5. [VBA-E]Select case qui ne fonctionne pas :(
    Par DonKnacki dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 31/01/2006, 12h13

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