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
    Candidat au 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
    Points : 4
    Points
    4
    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 habitué
    Inscrit en
    Novembre 2006
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 257
    Points : 153
    Points
    153
    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
    Candidat au 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
    Points : 4
    Points
    4
    Par défaut Non :S
    Merci mais cela ne marche pas

  4. #4
    Membre habitué
    Inscrit en
    Novembre 2006
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 257
    Points : 153
    Points
    153
    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
    Candidat au 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
    Points : 4
    Points
    4
    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 habitué
    Inscrit en
    Novembre 2006
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 257
    Points : 153
    Points
    153
    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
    Candidat au 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
    Points : 4
    Points
    4
    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 habitué
    Inscrit en
    Novembre 2006
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 257
    Points : 153
    Points
    153
    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
    Candidat au 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
    Points : 4
    Points
    4
    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 081
    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 081
    Points : 24 724
    Points
    24 724
    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,

  11. #11
    Candidat au 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
    Points : 4
    Points
    4
    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 habitué
    Inscrit en
    Novembre 2006
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 257
    Points : 153
    Points
    153
    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 081
    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 081
    Points : 24 724
    Points
    24 724
    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,

+ 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, 14h42
  2. Recherche multi-critères Access
    Par nancy_leblanc dans le forum VBA Access
    Réponses: 4
    Dernier message: 18/12/2007, 18h21
  3. Réponses: 1
    Dernier message: 23/03/2007, 20h33
  4. Débutant: Problème formulaire multi critères
    Par jrogron dans le forum Access
    Réponses: 3
    Dernier message: 02/08/2006, 15h08
  5. Réponses: 10
    Dernier message: 27/07/2006, 15h04

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