1 membre
Connectés : ( personne )
- La Charte du Forum - Forum - Questions générale
Sujet n° 531 |
Feuille de données filtrée et requête |
le 02/07/2011 : 01:26 par nicolas
visiteur |
bonjour,
j'utilise un formulaire contenat un sous formulaire en mode feuille de données.j'utilise le code suivant pour filtrer mes données:
with me.ObSF.form .filte = "champ1 = 'oui' and champ2 = 3, 5 et 7" .filteron = true end with
je voudrai créer une requête qui m'affiche les mêmes données que mon sous formulaire en mode feuille de données et qui prenne donc en compte les filtres de mon sous formulaire.est-ce possible?? si oui, comment??
cette requête est destinée à exporter mes données dans un tableau excel ou vers un état.merci de votre réponse
cordialement |
|
|
Réponse n° 1 -------- le 02/07/2011 : 15:06 par 3Stone
Administrateur
|
Bonjour,
Crée ta requête de façon normale, en reprenant les champs nécessaire et le champ identifiant la clé primaire.
Comme critères pour le champ clé primaire, tu écris quelque chose comme: Code :In(Forms!NomFP.Form!NomSF.NomCCP)
ou : NomFP => Nom du formulaire principal NomSF => Nom du sous-formulaire NomCCP => nom du champ clé primaire
et tu n'obtiendra que les enregistrements affichés dans ton sous-formulaire.
Cordialement, Pierre(3stone) |
|
|
Réponse n° 2 -------- le 02/07/2011 : 18:42 par nicolas
visiteur |
bonjour 3Stone,le code suivant fonctionne: In (Forms!NomFP!NomSF.Form!NomCCP)mais seules les lignes dont la valeur du champ NomCCP correspondante à la ligne du sous fom sélectionnée son prises en compte.comment faire si dans mon sous form en mode feuille de données je sélectionne plusieurs valeurs .si la ligne sélectionnée pour comme valeur du NomCCP = retard alors seule les lignes dont la valeur NomCCP = Retard sont affichées,si je passe à la ligne du dessous de mon sous form mode feuille de données et que la valeur du NomCCP = "A Jour" alors seule les lignes dont la valeur NomCCP = "A Jour" sont affichées,comment faire afficher dans ma requête toutes les lignes de mon filtre à savoir "Retard" et "A Jour",je ne sais pas comment vérifier les valeurs prises en compte dans mon filtre de mon sous formulaire!!merci d'avance pour ta réponsecordialement |
|
|
Réponse n° 3 -------- le 12/07/2011 : 01:22 par 3Stone
Administrateur
|
Bonjour,
En fait, lorsque l'on utilise le "filtrage" dans un formulaire, il est simple de récupérer ce filtre pour l'appliquer à une sortir via un état. Un état étant l'équivalent d'un formulaire et les deux possèdent la propriété "filtre".
Par contre, une requête possède la clause "Where", mais pas de filtre. Pour pouvoir exécuter une requête qui tienne compte du contenu d'un formulaire (ou sous formulaire) quelque soit le filtre multiple appliqué, il faut commencé par récupérer les identifiants (clé primaire) des enregistrements présent dans ce formulaire.
Dans le formulaire, on placera alors un bouton auquel on fera exécuter le code suivant (à adapter...) Code : Dim db As DAO.Database Dim tdf As DAO.TableDef Dim fld As DAO.Field Dim boExist As Boolean Set db = CurrentDb boExist = False '/test existence table For Each tdf In CurrentDb.TableDefs If tdf.Name = "TempFilter" Then boExist = True Exit For End If Next '/vider ou créer la table temporaire If boExist = True Then db.Execute "Delete * From TempFilter" Else Set tdf = db.CreateTableDef("TempFilter") Set fld = tdf.CreateField("Numero", dbLong) tdf.Fields.Append fld db.TableDefs.Append tdf RefreshDatabaseWindow Set fld = Nothing Set tdf = Nothing Set db = Nothing End If '/sauver les items With Me.NomSF.Form.RecordsetClone If .RecordCount > 0 Then .MoveFirst End If Do Until .EOF db.Execute "Insert Into TempFilter Values (" & !Numero & ")" .MoveNext Loop End With '/exporter vers Excel DoCmd.OutputTo acOutputQuery, "req_Export", acFormatXLS, "ExportExcel.xls", True
Ce code crée au besoin une table temporaire et y sauve les identifiants présent dans le sous-formulaire. Ensuite, on exécute la requête qui alimentera le fichier Excel.
Bien sur, la requête doit exister (ici "req_Export") et avoir comme critère pour le champ clé primaire l'expression suivante : Code :In (Select Numero From TempFilter)
"Numero" représente ici le nom de champ identifiant.
Cordialement, Pierre(3stone) |
|
|
sujet actif
sujet clos
Important!
Nouveau message -
Rectifier message
Clôturer sujet
Remonter
|