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 :

Recherche Multi Critere


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 328
    Par défaut Recherche Multi Critere
    Bonjour,

    J'ai repris le tuto de cafeine sur la reherche multi critere mais je bloque pour l'integré à ma base sur le RefreshQuery() il plante à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.lblStats.Caption = DCount("*", "NumDevis", SQLWhere) & " / " & DCount("*", "NumDevis")
    je voudrais avoir vos avis, le select marche vu qu'il s'affiche dans la boite sans pb par contre je pense que c'est dans les "[Affaire (étendu)]!Nom" je pense non ? voilà mon code complet

    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 [Affaire (étendu)].[Num Devis], [Affaire (étendu)].Nom, [Affaire (étendu)].Désignation, [Affaire (étendu)].Initiale, [Affaire (étendu)].Statut, [Affaire (étendu)].Etape FROM [Affaire (étendu)] WHERE ((([Affaire (étendu)].Statut)='En cours'));"
     
    If Not Me.chkClient Then
        SQL = SQL & "And [Affaire (étendu)]!Nom '*" & Me.cmbRechClient & "*' "
    End If
    If Not Me.chkCommercial Then
        SQL = SQL & "And [Affaire (étendu)]!Initiale = '" & Me.cmbRechCommercial & "' "
    End If
    If Not Me.chkEtape Then
        SQL = SQL & "And [Affaire (étendu)]!Etape like '*" & Me.txtRechEtape & "*' "
    End If
    If Not Me.chkDesignation Then
        SQL = SQL & "And [Affaire (étendu)]!Désignation = '" & Me.txtRechDesignation & "' "
    End If
     
    SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1))
     
    SQL = SQL & ";"
     
    Me.lblStats.Caption = DCount("*", "NumDevis", SQLWhere) & " / " & DCount("*", "NumDevis")
    Me.lstResults.RowSource = SQL
    Me.lstResults.Requery
    Merci d'avance

  2. #2
    Membre Expert Avatar de bernardmichel
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2004
    Messages
    1 181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 181
    Par défaut
    Hello !

    Je ne sais pas si cela vient de là mais, effectivement un nom de table tel que : "Affaire (étendu)" ne me plait pas... et je ne suis pas sûr que cela plaise plus à Access ??

    Pourquoi pas, simplement nommer ta table (par exemple) : tblAffaireEtendu. Tu évites ainsi un "e aïgu" ainsi qu'un espace et une parenthèse... fameux mélange !

    D'autre part (mais tu fais que tu le sens bien sûr) je ne me serais pas pris la tête pour SQL et j'aurais écris un truc du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub RefreshQuery()
    Dim SQL As String
    Dim SQLWhere As String
     
    SQL = "SELECT tblAffaireEtendu.*, tblAffaireEtendu.Statut FROM tblAffaireEtendu WHERE (((tblAffaireEtendu.Statut)='En cours'))"
     
    ...
    Ensuite, je testerais les valeurs ligne par ligne, avec un debug.print ou msgbox (as you like). De cette façon tu auras fait d'une pierre deux coups :
    1. Tu débogues ton "Sub RefreshQuery()"
    2. Tu testes la bien facture de cette fonction et son adéquation dans ton développement.

    Voilù , bon développement !

    Bernard.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 328
    Par défaut
    C'est marrant ça j'ai utilisé la nomination Affaire (étendu) car dans les exemple de base de données 2007 sur le site microsoft ils font comme ça, bravo l'exemple (en plus j'ai tilté à ce moment là mais je me suis dis je leur fais confiance, rappel ne jamais faire confiance à une multinationnale lol)

    Bref revenons à nos moutons donc aprés modification ça marche bien mise à parts deux petits truc :

    Le premier c'est pour la case "Etape" il me fais cette erreur :



    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
    Private Sub RefreshQuery()
    Dim SQL As String
    Dim SQLWhere As String
     
    SQL = "SELECT AffaireEtendu.NumDevis, AffaireEtendu.Nom, AffaireEtendu.Initiale,  AffaireEtendu.Désignation, AffaireEtendu.Etape FROM AffaireEtendu WHERE (((AffaireEtendu.Statut)='En cours')) "
     
    If Not Me.chkClient Then
        SQL = SQL & "And AffaireEtendu!Nom '" & Me.cmbRechClient & "' "
    End If
    If Not Me.chkCommercial Then
        SQL = SQL & "And AffaireEtendu!Initiale = '" & Me.cmbRechCommercial & "' "
    End If
    If Not Me.chkEtape Then
        SQL = SQL & "And AffaireEtendu!Etape like '" & Me.cmbRechEtape & "' "
    End If
    If Not Me.chkDesignation Then
        SQL = SQL & "And AffaireEtendu!Désignation = '" & Me.txtRechDesignation & "' "
    End If
     
    SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1))
     
    SQL = SQL & ";"
     
    Me.lblStats.Caption = DCount("*", "AffaireEtendu", SQLWhere) & " / " & DCount("*", "AffaireEtendu")
    Me.lstResults.RowSource = SQL
    Me.lstResults.Requery
    Le seconde erreur est que mon Me.lstResults enregistre mon numerodevis de la forme 45789 alors qu'il est de la forme 0045789, il me zappe les zero du début...une idée pour lui formaté tout ça ?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 206
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If Not Me.chkEtape Then
        SQL = SQL & "And AffaireEtendu!Etape like '" & Me.cmbRechEtape & "' "
    Pour cette partie, il faut regarder le type du champs Etape.

    * Si le champs est de type texte,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If Not Me.chkEtape Then
        SQL = SQL & "And AffaireEtendu!Etape like '" & Me.cmbRechEtape & "' "
    * Si le champs est de type numérique,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If Not Me.chkEtape Then
        SQL = SQL & "And AffaireEtendu!Etape like " & Me.cmbRechEtape & " "
    * Si le champs est de type date,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If Not Me.chkEtape Then
        SQL = SQL & "And AffaireEtendu!Etape like #" & Me.cmbRechEtape & "# "
    Pour ton autre problème, je ne sais pas.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 328
    Par défaut
    C'est un champ text donc si je suis ton raisonnement malheureusement j'ai bien écris le code

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 206
    Par défaut
    Il n'y a rien de malheureux à bien avoir écris le code...

    Je ne peux pas voir ton image par contre, ressource bloquée au travail.

    Peut-être envisager d'autres caractères dans ta chaîne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    If Not Me.chkEtape Then
        SQL = SQL & "And AffaireEtendu!Etape like '" & Me.cmbRechEtape & "' "
    Plutôt qu'avoir Me.cmbRechEtape, avoir quelque chose du genre * & cmbrechetape & *...

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

Discussions similaires

  1. Recherche Multi-criteres dans un formulaire
    Par valery17 dans le forum Access
    Réponses: 6
    Dernier message: 22/05/2006, 17h17
  2. [formulaire] recherche multi criteres
    Par Treuze dans le forum IHM
    Réponses: 3
    Dernier message: 10/01/2006, 11h36
  3. [Collections]Implémenter une recherche multi-critère performante
    Par ppaul127 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 29/12/2005, 15h38
  4. gui pour recherche multi critere
    Par komando dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 02/12/2005, 20h08
  5. Réponses: 14
    Dernier message: 15/06/2005, 14h14

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