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)
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 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, 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
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
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.
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
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 :
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) !!
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
Merci d'avance
Partager