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

IHM Discussion :

Recherche multicritère VBA [AC-2003]


Sujet :

IHM

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 81
    Points : 57
    Points
    57
    Par défaut Recherche multicritère VBA
    Bonjour tout le monde,

    Je viens sur le forum, car j'ai un petit problème dans ma recherche multicritère avec les comboBox...
    J'effectue une recherche multicritère, et lorsque dans ma liste déroulante je selectionne le Nom qui correspond à ma rechercher, le résultat de la recherche n'est pas bon...

    Mon 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
    Private Sub RefreshQuery()
    Dim SQL As String
    Dim SQLWhere As String
     
    SQL = "SELECT TblCde.idCde, TblCde.N°Commande, TblCde.DateFacture, (SELECT NomTiers FROM TblTiers WHERE TblTiers.idTiers=TblCde.idTiers) AS NomTiers, TblCde.Montant, TblCde.N°Facture FROM TblCde Where TblCde!idCde <> 0 AND (SELECT idTypeTiers FROM TblTiers WHERE TblTiers.idTiers = TblCde.idTiers) = 1"
     
    If Me.chkTiers Then
        SQL = SQL & "And (SELECT TblTiers!NomTiers FROM TblTiers WHERE TblTiers.idTiers=TblCde.idTiers) = '*" & Me.cmbRechNomTiers & "*' "
    End If
     
    SQLWhere = Trim(right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1))
     
    SQL = SQL & ";"
     
    Me.Liste17.RowSource = SQL
    Me.Liste17.Requery
     
    End Sub
     
     
     
    Private Sub cmbRechNomTiers_BeforeUpdate(Cancel As Integer)
     
    RefreshQuery
     
    End Sub
    Je me suis basé sur le modèle du tutoriel access, mais peut être ai-je fait une erreur...

    Mes autres recherches, qui se font sur des txt, s'effectuent correctement

    Merci de votre attention

  2. #2
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Bonjour,

    la syntaxe de ton sql n'est pas correcte.

    Essaie dans un premier temps de construire une requête qui te donne le résultat correct et visionne ensuite son sql qui te servira de modèle.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 81
    Points : 57
    Points
    57
    Par défaut
    Je ne vois pas d'erreur dans mon SQL, de plus dans mes autres critères j'utilise la même syntaxe, peux tu me dire plus précisément où tu vois une erreur?

  4. #4
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    J'ai peut-être vite incriminé la syntaxe, mais il ne faut pas être grand clerc pour dire que le sql n’est pas bon … puisque ton résultat ne l’est pas !
    Je te suggère

    1° copier n’importe quelle requête de ta BDD
    2° placer un debug.print sql juste après SQL = SQL & ";"
    3° exécuter
    4° copier,dans ton presse-papier, le sql généré dans la fenêtre d’exécution
    5° coller ce sql dans la requête 1°
    6° examiner ce qui ne va nécessairement pas

  5. #5
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 184
    Points : 1 363
    Points
    1 363
    Par défaut
    Bonjour,

    Pour moi aussi, le SQL n'est pas terrible : il faudrait utiliser une jointure.

    D'autre part
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TblTiers!NomTiers FROM TblTiers
    je le sens mal.

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 81
    Points : 57
    Points
    57
    Par défaut
    Je n'avais mis que le strict nécessaire pour l'exemple, mais mon code entier ressemble à ça:

    Refresh Query:
    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
    Private Sub RefreshQuery()
    Dim SQL As String
    Dim SQLWhere As String
     
    SQL = "SELECT TblCde.idCde, TblCde.N°Commande, TblCde.DateFacture, (SELECT NomTiers FROM TblTiers WHERE TblTiers.idTiers=TblCde.idTiers) AS NomTiers, TblCde.Montant, TblCde.N°Facture FROM TblCde Where TblCde!idCde <> 0 AND (SELECT idTypeTiers FROM TblTiers WHERE TblTiers.idTiers = TblCde.idTiers) = 1"
     
    If Me.chkFacture Then
        SQL = SQL & "And TblCde!N°Facture like '*" & Me.txtRechN°Facture & "*' "
    End If
    If Me.chkTiers Then
        SQL = SQL & "And (SELECT TblTiers!NomTiers FROM TblTiers WHERE TblTiers.idTiers=TblCde.idTiers) = '*" & Me.cmbRechNomTiers & "*' "
    End If
    If Me.chkMontant Then
        SQL = SQL & "And TblCde!Montant like '*" & Me.txtRechMontant & "*' "
    End If
     
    SQLWhere = Trim(right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1))
     
    SQL = SQL & ";"
     
    Me.Liste17.RowSource = SQL
    Me.Liste17.Requery
     
    End Sub
    Avec mes 2 txt.... ça marche très bien, j'ai juste un problème avec ma comboBox... Et le code SQL reste le même. C'est pour ça que je ne comprends pas...

    Et avant de mettre ma comboBox, j'avais un txt et ça marchait très bien, c'est que depuis que j'ai mis ma comboBox que ça plante...

    Dans tous les cas, merci pour vos réponses ultra-rapide!!

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 81
    Points : 57
    Points
    57
    Par défaut
    Je viens de tester dans une requête SQL afin d'enlever tous les doutes le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT TblCde.idCde, TblCde.N°Commande, TblCde.DateFacture, (SELECT NomTiers FROM TblTiers WHERE TblTiers.idTiers=TblCde.idTiers) AS NomTiers, TblCde.Montant, TblCde.N°Facture
    FROM TblCde
    WHERE ((([TblCde]![idCde])<>0) AND (((SELECT idTypeTiers FROM TblTiers WHERE TblTiers.idTiers = TblCde.idTiers))=1) AND (((SELECT TblTiers.NomTiers FROM TblTiers WHERE TblTiers.idTiers=TblCde.idTiers))="NOM"));
    Et tout s'effectue parfaitement, j'ai remplacer le "!" par un "." dans mon code VBA pour être certain que cela ne vienne pas de là, il n'y aucun changement.

    Je pense plutot que ça vient du retour de nom "Me.cmbRechNomTiers", il ne doit pas me rendre un NOM

    Est ce possible d'afficher la valeur de cette variable dans ma fenêtre VBA afin d'en vérifier sa valeur??

    Merci beaucoup pour votre aide!

  8. #8
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 184
    Points : 1 363
    Points
    1 363
    Par défaut
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE TblTiers.idTiers=TblCde.idTiers) LIKE '*" & Me.cmbRechNomTiers & "*' "
    Pour l'affichage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    debug.print Me.cmbRechNomTiers
    affiche la valeur de la variable dans la fenêtre exécution.
    A mettre en début de fonction par exemple.

    Voir ma signature pour plus de détails.

  9. #9
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 81
    Points : 57
    Points
    57
    Par défaut
    Le LIKE ou le =, je pense que ça fait la même chose puisque j'utilise une liste déroulante, même au contraire, je préfère le =. Car si j'ai un client "JEAN" et un autre "JEAN-CLAUDE", lorsque je sélectionne "JEAN", avec un = il me donne bien "JEAN" alors qu'avec un LIKE, il me donne aussi "JEAN-CLAUDE". J'ai quand même essayé ton code mais sans résultat. J'ai remarqué un * en trop aussi, mais ça ne change rien...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL = SQL & "And (SELECT TblTiers!NomTiers FROM TblTiers WHERE TblTiers.idTiers=TblCde.idTiers) = '" & Me.cmbRechNomTiers & "' "
    Merci pour la fonction debug, il me met en valeur: <HorsDuContexte>
    Normal?

  10. #10
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 184
    Points : 1 363
    Points
    1 363
    Par défaut
    Question bête : le "Me.cmbRechNomTiers" est bien un contrôle du formulaire ?

  11. #11
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 81
    Points : 57
    Points
    57
    Par défaut
    C'est bon j'ai compris!

    La cmbBox me renvoie mon idTiers, et non pas mon NomTiers!!

    Il faut donc que je compare les id et non les noms!!

    Tout ça grace à ta fonction debug merci beaucoup tout le monde!!

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

Discussions similaires

  1. Recherche multicritère VBA
    Par Gige91 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 30/12/2014, 17h24
  2. [vba-e] Recherche multicritére
    Par deaqu1 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 09/04/2007, 10h28
  3. [débutante] recherche multicritère vba
    Par Mimi64 dans le forum IHM
    Réponses: 7
    Dernier message: 01/08/2006, 09h57
  4. Réponses: 2
    Dernier message: 01/10/2005, 18h42
  5. recherche multicritères
    Par onlineduel dans le forum Débuter
    Réponses: 3
    Dernier message: 30/03/2004, 16h15

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