Bonjour,
Après moultes recherches infructueuses pour résoudre mon problème je me tourne vers vous.
Je souhaite filtrer un sous-formulaire lors du changement de valeur d'une liste déroulante.
Mon soucis est simple:
La valeur de la liste déroulante n'est pas ma valeur de filtre, mais elle me permet d'accéder à un enregistrement dans une table. Cet enregistrement contient une valeur dans un champ que je souhaite récupérer pour filtrer mon sous-formulaire. Donc valeur de liste = entrée 1, qui me donne champ 1, qui me donne ma valeur de filtre. Sachant que cette valeur peut dans certains cas être vide ou nulle, mais ça ce n'est pas un soucis, je peux m'en charger.
C'est moche, mais je n'ai pas trop le choix.
Jusqu'ici, j'ai abordé le problème en faisant un DLookUp sur mon champ cible pour l'obtenir:
J'ai tenté le filtre puis la modification du recordsource en désespoir de cause, c'est pour cela qu'il est présent. Je préviens juste.
Vous vous en doutez, toutes ces méthodes plantent. J'ai pourtant bien vérifié sur des cas de test, le DLookUp contient bien la valeur que je souhaite récupérer.
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 Dim verif1 As String verif1 = "" & DLookup("[RefContrat]", "t_Facture", "NumFacture = daub_Facture") If verif1 <> "" Then Me.daud_modifContrat.Form.RecordSource = "SELECT RefContrat FROM t_Contrat WHERE RefContrat = verif1;" 'Me.daud_modifContrat.Form.RecordSource = "SELECT RefContrat FROM t_Contrat WHERE RefContrat = " & verif1 & ";" 'Me.daud_modifContrat.Form.filter = "[RefContrat] = " & verif1 & "" 'Me.daud_modifContrat.Form.FilterOn = True 'Me.daud_modifContrat.Form.filter = "[RefContrat] = " & verif1 'Me.daud_modifContrat.Form.FilterOn = True 'Me.daud_modifContrat.Form.filter = "[RefContrat] = verif1" 'Me.daud_modifContrat.Form.FilterOn = True End If
Toutes ces méthodes me retournent l'erreur d'exécution 2467: "L'expression fait référence à un objet fermé ou supprimé.", sur leur ligne respective.
Constatant que je n'arrivais pas à résoudre le problème, je me suis tourné vers un sujet que j'ai moi-même créé il y a quelques jours: Celui-ci.
J'ai repris le principe du queryDef, et j'ai gardé le DLookUp étant donné que si la valeur de mon champ est nulle je me retrouve avec un bon gros plantage des familles.
Voici le résultat:
Et là je ne vais pas plus loin: quoi que je fasse, j'obtiens une erreur 3061: Trop peu de paramètres, 2 attendus, sur la ligne de l'OpenRecordset.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Dim verif1 As String verif1 = "" & DLookup("[RefContrat]", "t_Facture", "NumFacture = daub_Facture") If verif1 <> "" Then Dim q As dao.QueryDef Dim mabase As Database Set mabase = CurrentDb Set q = mabase.CreateQueryDef("", "SELECT RefContrat FROM t_Facture WHERE NumAgence = daub_Facture;") q.Parameters(0).Value = [Forms]![Accueil]![daub_Facture] Set t = q.OpenRecordset() ... End If
Je précise que j'ai effectivement tenté la syntaxe " & daub_Facture & ";" pour le CreateQueryDef, et vous vous en doutez, ce n'est pas le problème.
Je suis à court d'idées pour me sortir de mon pétrin, quelqu'un pourrait-il m'aiguiller?
Merci de m'avoir lu.
Partager