Forum - Questions générale - Sujet n°531

[]
Nombre de membres 1 membre
Connectés : ( personne )
 

La Charte du Forum - La Charte du Forum

Forum - Forum
Questions générale - Questions générale


clos par 3Stone le 11/10/2011 : 13:26  Sujet n° 531  Feuille de données filtrée et requête

le 02/07/2011 : 01:26
par nicolas

Anonyme

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
 sujet clos  Haut
Réponse n° 1
--------
le 02/07/2011 : 15:06
par 3Stone

Anonyme

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)
  clos par 3Stone le 11/10/2011 : 13:26  Haut
Réponse n° 2
--------
le 02/07/2011 : 18:42
par nicolas

Anonyme

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
  clos par 3Stone le 11/10/2011 : 13:26  Haut
Réponse n° 3
--------
le 12/07/2011 : 01:22
par 3Stone

Anonyme

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)
  clos par 3Stone le 11/10/2011 : 13:26  Haut
actif sujet actif   clos sujet clos   Important! Important!   Nouveau Nouveau message   -   Rectifier Rectifier message   Clôturer Clôturer sujet   Remonter Remonter
[]
Catégories de discussion  Forum 



Haut