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 :

Formulaire de recherche multi-critères avec champs variables [AC-2007]


Sujet :

IHM

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 32
    Points : 13
    Points
    13
    Par défaut Formulaire de recherche multi-critères avec champs variables
    Bonjour
    Je travaille sous Access 2007 et souhaite réaliser un formulaire de recherche multicritères dont les champs peuvent être variables. Je m'explique, j'ai une table "proposal" contenant les champs "Proposal_nb", "Proposal_client".... est est reliée à une douzaine de tables "équipements" contenant chacun des champs caractéristiques de chaque équipement (donc différents d'un équipement à l'autre). Je souhaiterai avoir un formulaire avec une liste déroulante permettant de choisir un équipement (ça fonctionne avec le code ci-dessous adapté des tutoriels de F Constans et de Access 2007 et VBA pour les nuls : j'utilise des requêtes pour pouvoir choisir les champs sur lesquels je rechercherai ensuite)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Form_Load()
    Dim Qrynames As String
    Qrynames = ""
    Dim qry As AccessObject
    For Each qry In CurrentData.AllQueries
    If Left(qry.Name, 3) = "Qry" Then
    Qrynames = Qrynames + Chr(34) + qry.Name + Chr(34) + ";"
    End If
    Next qry
    Me!cbo_equipment.RowSourceType = "Value List"
    Me!cbo_equipment.RowSource = Qrynames
    Me!cbo_equipment.LimitToList = True
    Me!cbo_equipment.Value = ""
    Puis je souhaite pouvoir choisir 1 à 3 champs caractéristiques de l'équipement. J'ai donc appliqué 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
    Private Sub cbo_equipment_AfterUpdate()
    Me.cbo_criteria1.RowSource = Me.cbo_equipment.Value
    Me.cbo_criteria1.Requery
    Me!cbo_criteria1 = ""
    Me.cbo_criteria2.RowSource = Me.cbo_equipment.Value
    Me.cbo_criteria2.Requery
    Me!cbo_criteria2 = ""
    Me.cbo_criteria3.RowSource = Me.cbo_equipment.Value
    Me.cbo_criteria3.Requery
    Me!cbo_criteria3 = ""
    Me!cbo_value1 = ""
    Me!cbo_value2 = ""
    Me!cbo_value3 = ""
    End Sub
    Puis, afin d'être sûre de ne chercher que des valeurs saisies dans la base, j'ai recopié 3fois le code suivant pour créer les listes de valeurs des critères de recherche


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub cbo_criteria1_AfterUpdate()
    If Not IsNull(Me!cbo_criteria1.Value) Then
    Dim mysql As String
    mysql = "SELECT DISTINCT " + cbo_criteria1.Value
    mysql = mysql + " FROM " + cbo_equipment
    mysql = mysql + " WHERE " + cbo_criteria1.Value
    mysql = mysql + " ORDER BY " + cbo_criteria1.Value
    Me!cbo_value1.RowSourceType = "Table/Query"
    Me!cbo_value1.RowSource = mysql
    End If
    End Sub
    Premier problème : lors du chargement du formulaire, je vois apparaître une fenêtre me demandant une valeur pour un paramètre particulier ... mais cest seulement un problème esthétique car sinon le formulaire s'ouvre correctement.

    Second problème : il semble que je doive impérativement faire une recherche avec les 3 critères (mais là encore, si on trouve une solution au 3è problème, je pourrai le contourner)

    Troisième problème : le plus crucial : j'ai essayé de tester la recherche avec un seul critère et là ma liste de résultat reste désespérément vide !!! (voire, les en-têtes de colonnes qui sont affichées lors du chargement du formulaire disparaissent après avoir cliqué sur le bouton recherche)
    Or j'aimerai qu'elle renvoie, au moins les champs de la table "Proposal" sélectionnés (le mieux serait bien sûr qu'elle renvoie en même temps les champs correspondant à l'équipement). Voici ma requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub cmd_recherche_Click()
    Dim strequip As String, strcrit1 As String, strcrit2 As String, strcrit3 As String, strval1 As String, strval2 As String, strval3 As String, strrech As String, strsql As String
    strequip = "[" & Me.cbo_equipment & "]"
    strcrit1 = "[" & Me.cbo_criteria1 & "]"
    strval1 = "[" & Me.cbo_value1 & "]"
    strrech = strequip & "." & strcrit1 & " Like " & strval1 & ""
    strsql = "SELECT [T_Proposal].[Proposal_nb],[T_Proposal].[Proposal_rev], [T_Proposal].[Proposal_client], [T_Proposal].[Proposal_end_user], [T_Proposal].[Proposal_location]"
    strsql = strsql & " FROM T_Proposal "
    strsql = strsql & " ON [T_Proposal].[Pk_Proposal] = " & strequip & ".[Fk_Proposal]"
    strsql = strsql & " WHERE ((" & strrech & "));"
     
    Me.lst_result.RowSource = strsql
    Me.lst_result.Requery
    End Sub
    Si quelqu'un peut me dire ce qui ne va pas... (c'est peut-être évident mais je suis totalement novice en SQL et en VB donc je me contente d'essayer d'adapter les codes des autres et là, je suis coincée) !!

    Merci d'avance

  2. #2
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 626
    Points : 726
    Points
    726
    Par défaut La recherche
    Bonjour,

    Je n'ai pas tout lu ...
    pour les recherches multicritères mates cette petite base avec un exemple très simple,

    http://www.developpez.net/forums/d77...tere-amusante/


    a+

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

    Cette ligne contient une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strrech = strequip & "." & strcrit1 & " Like " & strval1 & ""
    En effet l'opérateur Like est exclusivement réservé au string il faut donc entourer la valeur par des guillemets. Ce que tu ne fais pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strrech = strequip & "." & strcrit1 & " Like """ & strval1 & """"
    En VBA on double systématiquement le caractère pour le faire apparaitre.

    C'est déjà un début de correction.

    Cordialement,

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 32
    Points : 13
    Points
    13
    Par défaut
    Bonjour et merci aux deux personnes qui se sont penchées sur ma question...
    J'ai essayé la correction de Loufab mais elle n'est malheureusement pas suffisante... Quant à la base proposée par naphta ... c'est bien le genre de résultat que je recherche : j'aurais 7 listes déroulantes : l'une permettant de définir la requête dans laquelle je cherche, 3 autres définissant les champs de la requête sur lesquels je souhaite filtrer et les 3 dernières correspondant aux valeurs des champs recherchés... La zone de résultat devant montrer au minimum les champs d'une autre table (dans ce cas, société devra être remplacée par proposal_nb, proposal_rev, proposal_clientetc..). Le problème étant que je ne suis pas assez calée pour adapter la base exmple à mon cas !!!
    J'ai donc tenté une autre méthode : à savoir la création d'un formulaire par équipement (formulaire basé sur table équipement) constitué de listes déroulantes reprenant les valeurs des différents champs recherchés et un bouton ouvrant une requête basée sur la table "proposal" + la table "équipement"
    Voici le code sql généré par le générateur de requête (essai avec un seul critère pour le moment) et qui me donne une magnifique liste vide !!!
    Merci d'avance à ceux qui pourront m'aider

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT T_Proposal.Proposal_nb, T_Proposal.Proposal_rev, T_Proposal.Proposal_date, T_Proposal.Proposal_client, T_Proposal.Proposal_end_user, T_Proposal.Proposal_location, T_ESP.ESP_Dust_Inlet, T_ESP.ESP_Dust_Outlet, T_ESP.ESP_Dust_Concentration_unit, T_ESP.ESP_Total_flow, T_ESP.ESP_Process_temperature, T_ESP.[ESP_Number_of_ESP_(unit)], T_ESP.ESP_Total_number_of_field, T_ESP.ESP_type, T_ESP.ESP_field_length, T_ESP.[ESP_Total_Filter_size_(LxWxH)], T_ESP.ESP_Transformer_size, T_ESP.ESP_Transformer_voltage, T_ESP.ESP_plate_height, T_ESP.ESP_gas_pass_number, T_ESP.ESP_gas_pass_width, T_ESP.ESP_Total_net_area, T_ESP.ESP_Filtration_Velocity
    FROM T_Proposal INNER JOIN T_ESP ON T_Proposal.Pk_proposal = T_ESP.Fk_proposal
    WHERE (((T_ESP.ESP_Dust_Inlet)=[Formulaires]![F_Look_for_ESP]![cbo_esp_dust_inlet]));

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 32
    Points : 13
    Points
    13
    Par défaut Autre méthode
    Bonjour
    Concernant mon problème de recherche multicritères, ne parvenant pas à le résoudre, j'ai essayé le tutoriel de cafeine sur le sujet... mais si je parviens bien à obtenir une liste déroulante correcte une fois la case cochée, ma liste de résultat s'efface quand la liste déroulante apparaît et ne redevient pas visible lorsque le critère est sélectionné... J'ai essayé dans un premier temps de baser mes listes sur une requête puis de redétailler les tables ...mais le résultat reste le même !!!
    Voici le code utilisé : (j'ai peut-être fait une erreur de syntaxe?? ou alors ne fonctionne -t-il que sur une seule table? dans ce cas comment l'adapter pour que la liste de résultats fasse apparaître des champs de la table principale + des champs de la table dont sont issus les critères ??)

    Merci d'avance à qui pourra se pencher sur la question

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub RefreshQuery()
    Dim SQL As String
     
    SQL = "SELECT T_Proposal.Proposal_nb, T_Proposal.Proposal_rev, T_Proposal.Proposal_date, T_Proposal.Proposal_client, T_Proposal.Proposal_end_user, T_Proposal.Proposal_location, T_ESP.ESP_Dust_Inlet,T_ESP. ESP_Dust_Outlet, T_ESP.ESP_Dust_Concentration_unit, T_ESP.ESP_Total_flow, T_ESP.ESP_Process_temperature, T_ESP.ESP_Total_number_of_field, T_ESP.ESP_type, T_ESP.ESP_field_length, T_ESP.ESP_Transformer_size, T_ESP.ESP_Total_net_area, T_ESP.ESP_gas_pass_width, T_ESP.ESP_Transformer_voltage, T_ESP.ESP_plate_height, T_ESP.ESP_gas_pass_number"
    SQL = SQL + "FROM T_Proposal INNER JOIN T_ESP"
    SQL = SQL + "WHERE T_Proposal!Pk_proposal <> 0"
    SQL = SQL + "ORDER BY T_Proposal.[Proposal_nb]"
    If Me.chkdustinlet Then
    SQL = SQL & "And T_ESP!ESP_dust_inlet = '" & Me.cboespdustinlet & "' "
    End If
    SQL = SQL & ";"
    Me.Lstresult.RowSource = SQL
    Me.Lstresult.Requery
    End Sub

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

    Je crois vraiment qu'il faut que tu t'informes sur le langage SQL.

    Il manque des espaces et les conditions doivent se trouver TOUTES après la clause WHERE et pas ailleurs.

    Regarde le tuto sur le débogage des requete sous VBA. C'est dans la page Cours.

    ça devrait te donner une méthodologie pour réussir ton formulaire.

    Cordialement,

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 32
    Points : 13
    Points
    13
    Par défaut Résolution du problème
    Au cas où quelqu'un se retrouve confronté au même problème, j'ai trouvé pourquoi le code de cafeine ne s'adaptait pas totalement à mon cas : je filtre des données numériques et non du texte : il fallait donc enlever les guillemets...

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

Discussions similaires

  1. Formulaire de recherche multi critères
    Par tomas dans le forum Access
    Réponses: 6
    Dernier message: 24/08/2006, 14h57
  2. Recherche Multi-Critères 9 champs, 6 tables
    Par Moyaku dans le forum Access
    Réponses: 17
    Dernier message: 24/08/2006, 09h50
  3. Formulaire de recherche multi-critère
    Par Bolton8ox dans le forum Access
    Réponses: 1
    Dernier message: 24/07/2006, 19h40
  4. Réponses: 6
    Dernier message: 28/06/2006, 15h01
  5. Recherche multi-critères et champs vides
    Par Soulghard dans le forum Access
    Réponses: 4
    Dernier message: 15/02/2006, 14h40

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