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 :

Problème création formulaire Multi critère Access


Sujet :

VBA Access

  1. #1
    Membre du Club
    Homme Profil pro
    Assistant chef de projet
    Inscrit en
    Février 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Assistant chef de projet

    Informations forums :
    Inscription : Février 2012
    Messages : 8
    Par défaut Problème création formulaire Multi critère Access
    Bonjour , j'ai créé un formulaire multicritère Access !

    Au début avec un critère cela marché mais maintenant avec deux critères rien ne se passe , quelqu’un aurait une idée ? merci

    --------------------------------------------------------------------------
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    Option Compare Database
     
    Private Sub cbo_table_Click()
     
    Me.cbo_champ.RowSource = Me.cbo_table.Value
        Me.cbo_champ.Requery
     
    End Sub
     
     
    Private Sub cmd_recherche_Click()
    Dim strTable As String, strField As String, strField1 As String, strCriteria As String, strCriteria1 As String, strSql As String
    Dim Criter As Variant
     
        strTable = Me.cbo_table         ' recupère le nom de la table
        strField = Me.cbo_champ         ' recupère le nom du champ
        strField1 = Me.cbo_champ1       ' recupère le nom du champ1
        ' compose le critere de recherche
     
        strCriteria = strTable & "." & strField & " Like """ & Me.txt_critere & """"
        strCriteria1 = strTable & "." & strField1 & " Like """ & Me.txt_critere1 & """"
     
        ' construit la requête sql
        strSql = "SELECT DISTINCTROW " & strTable & ".*"
        strSql = strSql & " FROM " & strTable
        strSql = strSql & " WHERE ((" & strCriteria & ") And (" & strCriteria1 & "));"
     
     
        Me.lst_resultat.RowSource = strSql  ' affecte sql a lst_Resultat
        Me.lst_resultat.Requery             ' recalcule la liste
     
    End Sub
     
     
    Function lf_GetTypeField(lfNameTbl As String, lfNameFld As String)
     
    ' Renvoie le numéro du type du champ
    'lfNameTbl = nom de la table
    'lfNameFld = nom du champ
     
        Dim dbs As Database             ' Objet de la base
        Dim tbl As TableDef             ' Objet de définition de table
     
        Set dbs = CurrentDb             ' ouvre la base courante
        Set tbl = dbs.TableDefs(lfNameTbl)  ' ouvre la définition table
     
        lf_GetTypeField = tbl.Fields(lfNameFld).Type  ' renvoie le type de champ
     
        Set tbl = Nothing               ' libération des objets
        Set dbs = Nothing
     
    End Function
    --------------------------------------------------------------------------

  2. #2
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 257
    Par défaut Rep: Problème création formulaire Multi critère Access
    Pour une réponse rapide, à essayer:


    Dans:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strSql = strSql & " WHERE ((" & strCriteria & ") And (" & strCriteria1 & "));"
    enlève les parenthèses, comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strSql = strSql & " WHERE (" & strCriteria & ") And (" & strCriteria1 & ");"

  3. #3
    Membre du Club
    Homme Profil pro
    Assistant chef de projet
    Inscrit en
    Février 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Assistant chef de projet

    Informations forums :
    Inscription : Février 2012
    Messages : 8
    Par défaut Non :S
    Merci mais cela ne marche pas

  4. #4
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 257
    Par défaut Rep: Problème création formulaire Multi critère Access
    Excuse moi je n'avais pas tout lu.
    La condition WHERE demande la forme:

    WHERE (Table.Champs) Like 'a*' AND (Table.Champs) = " & Me.Control

    Le plus simple est d'aller dans Requête et de la composer, puis de la recopier, avec des ' à la place de " à l'intérieur de VBA. Je te conseille de moins découper ta requête sous VBA. C'est plus lisible.

    Me.RecordSource = "SELECT Table.* FROM Table WHERE (Table.Champs) Like 'a*' AND (Table.Champs1) = " & Me.Control

  5. #5
    Membre du Club
    Homme Profil pro
    Assistant chef de projet
    Inscrit en
    Février 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Assistant chef de projet

    Informations forums :
    Inscription : Février 2012
    Messages : 8
    Par défaut
    Merci beaucoup , je débute en SQL j'ai encore un peu de mal ! j'ai dut mal a faire le rapprochement entre ma requête et la tienne ! :s

  6. #6
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 257
    Par défaut
    Désolé, je n'ai pas trop de temps. Apprends en passant par l'éditeur de Requête. Inspire-toi. Tu vas dans l'éditeur tu appuis sur "+" dans la barre de tâches, tu choisis une table, n'importe laquelle, tu double-clic sur "*", et miracle, ça s'affiche. Dans la case à côté, tu cliques sur la liste déroulante, tu choisis un champs, par ex. NuméroClient, et dans la ligne Critères tu mets 1 afin de choisir le Numéro 1. Si c'est du texte, il faut mettre Comme "A*", pour les Noms commençant par A.
    Puis tu vas voir dans l'éditeur SQL, càd Affichage, puis Mode SQL, tu cliques et encore un miracle, le SQL est formaté. À toi de t'en inspirer.
    Rien ne remplacera le temps que tu mettras pour comprendre le fonctionnement. Bon courage.

  7. #7
    Membre du Club
    Homme Profil pro
    Assistant chef de projet
    Inscrit en
    Février 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Assistant chef de projet

    Informations forums :
    Inscription : Février 2012
    Messages : 8
    Par défaut
    Citation Envoyé par Chrysostome Voir le message
    Excuse moi je n'avais pas tout lu.
    La condition WHERE demande la forme:




    Le plus simple est d'aller dans Requête et de la composer, puis de la recopier, avec des ' à la place de " à l'intérieur de VBA. Je te conseille de moins découper ta requête sous VBA. C'est plus lisible.
    Ducoup ce serai quelque chose comme ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.RecordSource = "SELECT strTable.* FROM strTable WHERE (strTable.strField) Like 'a*' AND (strTable.strField1) = " & Me.Control

  8. #8
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 257
    Par défaut Est-ce que ça marche?
    Est-ce que ça marche?
    Ce serait sympa de le dire! Oui, ce que tu affiches est fonctionnel!

  9. #9
    Membre du Club
    Homme Profil pro
    Assistant chef de projet
    Inscrit en
    Février 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Assistant chef de projet

    Informations forums :
    Inscription : Février 2012
    Messages : 8
    Par défaut
    Non non ;( cela ne marche pas :s dsl

    Le débugger bug à " me.control " :s une idée ? :s

  10. #10
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 121
    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 121
    Par défaut
    Bonjour,

    "control" existe dans me. ?
    Il me semblait que ton code faisait référence à des controles nommés txt_critere ?

    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

  11. #11
    Membre du Club
    Homme Profil pro
    Assistant chef de projet
    Inscrit en
    Février 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Assistant chef de projet

    Informations forums :
    Inscription : Février 2012
    Messages : 8
    Par défaut Me.control
    Mon code serai donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.RecordSource = "SELECT strTable.* FROM strTable WHERE (strTable.strField) Like 'a*' AND (strTable.strField1) = " & Me.txt_critere
    ?

    Car j'ai une erreur : 2580
    La source d'enregistrement : "
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Me.RecordSource = "SELECT strTable.* FROM strTable WHERE (strTable.strField)  AND (strTable.strField1) Like 'a*'=" & Me.txt_critere  = 28/10/2012
    n'existe pas !

    Ma requete ne prends pas en compte le deuxième champ ou j'ai rentré quelque chose , il se focalise que sur le premier champ .

    Une idée

    Merci à tous ceux qui prennent le tps pour les autres !

  12. #12
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 257
    Par défaut Encore un essai!
    Mon code serait donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.RecordSource = "SELECT strTable.* FROM strTable WHERE (strTable.strField) Like 'a*' AND (strTable.strField1) = " & Me.txt_critere
    Pourquoi "me."?

    Essaye dans un premier temps:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT strTable.* FROM strTable WHERE (strTable.strField) Like 'a*'
    Je suis sur que ça va marcher si il y a une réponse possible qui commence par "a".

    Puis si le nom de "Ali" existe essaye

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT strTable.* FROM strTable WHERE (strTable.strField) = " &  'Ali'
    Après:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim  txt_critere as String
    txt_critere = "Ali"
    "SELECT strTable.* FROM strTable WHERE (strTable.strField) = " &  txt_critere
    C'est vraiment pas compliqué!

    PS.: Bon courage on est tous passé par là!

  13. #13
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 121
    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 121
    Par défaut
    Pas du tout d'accord avec toi chrysostome !

    Cette ligne toute seule ne veux rien dire, d'ailleurs elle apparaitra en rouge dans le code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT strTable.* FROM strTable WHERE (strTable.strField) = " &  txt_critere
    De plus strTable et strField ne seront pas interprété par SQL puisque ce sont des variables VBA.

    Ce qu'il faut écrire c'est ceci :
    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
    Private Sub cmd_recherche_Click()
    Dim strTable As String, strField As String, strField1 As String, strCriteria As String, strCriteria1 As String, strSql As String
    Dim Criter As Variant
     
        strTable = "[" & Me.cbo_table & "]"         ' recupère le nom de la table
        strField = "[" & Me.cbo_champ & "]"          ' recupère le nom du champ
        strField1 = "[" & Me.cbo_champ1  & "]"       ' recupère le nom du champ1
        ' compose le critere de recherche
        if not isnull(Me.cbo_champ) and not isnull(Me.txt_critere) then
            strCriteria = strTable  & "." & strField & " Like """ & Me.txt_critere & """"
        endif
        if  not isnull(Me.cbo_champ1) and not isnull(Me.txt_critere1) then
             strCriteria1 = strTable & "." & strField1 & " Like """ & Me.txt_critere1 & """"
         endif
     
        ' construit la requête sql
        strSql = "SELECT DISTINCTROW " & strTable & ".*"
        strSql = strSql & " FROM " & strTable
        strSql = strSql & " WHERE " & strCriteria & " And " & strCriteria1 & ";"
     
     
        Me.lst_resultat.RowSource = strSql  ' affecte sql a lst_Resultat
     
     totalement inutile !
        'Me.lst_resultat.Requery             ' recalcule la liste
     
    End Sub
    Il y a un tuto sur le sujet d'ailleurs. à lire et relire !

    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

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

Discussions similaires

  1. [AC-2002] Création d'un formulaire multi-critères
    Par nesumi dans le forum IHM
    Réponses: 2
    Dernier message: 31/08/2011, 13h42
  2. Recherche multi-critères Access
    Par nancy_leblanc dans le forum VBA Access
    Réponses: 4
    Dernier message: 18/12/2007, 17h21
  3. Réponses: 1
    Dernier message: 23/03/2007, 19h33
  4. Débutant: Problème formulaire multi critères
    Par jrogron dans le forum Access
    Réponses: 3
    Dernier message: 02/08/2006, 14h08
  5. Réponses: 10
    Dernier message: 27/07/2006, 14h04

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