Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Access 2010 Filtre sur formulaire et récuperer le filtre dans une table

17 réponses
Avatar
acn
Bonjour,

Je voudrais récupérer le résultat d'un filtre sur formulaire réalisé avec un bouton "Recherche" et copier le résultat dans une autre table.
Le filtre sur la table Naissances fonctionne très bien, mais je ne sais pas recopier son résultat dans une table nommée Temp_Naissances.
Voici le code du bouton "Recherche"

Private Sub CmdFiltre_Click()
On Error GoTo Err_CmdFiltre_Click
Dim f As String

f = ""

'recherche nom
If Not IsNull(Me.RNom) And Me.RNom <> "" Then
f = "Nom LIKE ""*" & Me.RNom & "*"""
End If

'recherche prenom
If Not IsNull(Me.RPrenom) And Me.RPrenom <> "" Then
If f <> "" Then
f = f & " AND Prenom LIKE ""*" & Me.RPrenom & "*"""
Else
f = "Prenom LIKE ""*" & Me.RPrenom & "*"""
End If
End If

'recherche nom mère
If Not IsNull(Me.RNomM) And Me.RNomM <> "" Then
If f <> "" Then
f = f & " AND Prenom LIKE ""*" & Me.RPrenom & "*"""
f = f & " AND NomM LIKE ""*" & Me.RNomM & "*"""
Else
f = "NomM LIKE ""*" & Me.RNomM & "*"""
End If
End If

'recherche commune
If Not IsNull(Me.RLieu) And Me.RLieu <> "" Then
If f <> "" Then
f = f & " AND Prenom LIKE ""*" & Me.RPrenom & "*"""
f = f & " AND NomM LIKE ""*" & Me.RNomM & "*"""
f = f & " AND Lieu LIKE ""*" & Me.RLieu & "*"""
Else
f = "Lieu LIKE ""*" & Me.RLieu & "*"""
End If
End If

Me.Filter = f
Me.FilterOn = True
Exit_CmdFiltre_Click:
Exit Sub
Err_CmdFiltre_Click:
MsgBox Err.Description
Resume Exit_CmdFiltre_Click
End Sub

10 réponses

1 2
Avatar
3stone
Salut,

acn wrote:
Bonjour,

Je voudrais récupérer le résultat d'un filtre sur formulaire réalisé
avec un bouton "Recherche" et copier le résultat dans une autre table.
Le filtre sur la table Naissances fonctionne très bien, mais je ne
sais pas recopier son résultat dans une table nommée Temp_Naissances.
Voici le code du bouton "Recherche"


<snip>


Crée une requête basée sur la même source que ton formulaire.
Admettons que ton formulaire se nomme "frmSelection"
Puis, tu transforme cette requête en requête de création de table

Il te reste à renseigner le filtre de cette requête de cette manière:
Forms!frmSelection.Filtre

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Avatar
acn
3stone a écrit le 07/10/2010 à 16h27 :
Salut,

acn wrote:
Bonjour,

Je voudrais récupérer le résultat d'un filtre sur
formulaire réalisé
avec un bouton "Recherche" et copier le résultat dans une
autre table.
Le filtre sur la table Naissances fonctionne très bien, mais je ne
sais pas recopier son résultat dans une table nommée
Temp_Naissances.
Voici le code du bouton "Recherche"



<snip>


Crée une requête basée sur la même source que ton
formulaire.
Admettons que ton formulaire se nomme "frmSelection"
Puis, tu transforme cette requête en requête de création de
table

Il te reste à renseigner le filtre de cette requête de cette
manière:
Forms!frmSelection.Filtre

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)


Bonjour,
Merci pour cette réponse.
Mais je ne voudrais pas avoir une fenêtre "Entrer une valeur du paramètre qui s'affiche sur chaque filtre.
Mon formulaire est basé sur les données de la table "Naissances" et a 4 champs indépendants RNom... (voir code). J'ai juste à remplir le ou les champs et clicker sur le bouton "Recherche" pour réaliser le filtre. Reste à copier les données de ce filtre dans ma table "Temp_Naissances".
Merci
Avatar
3stone
Salut,

acn wrote:
Je voudrais récupérer le résultat d'un filtre sur
formulaire réalisé
avec un bouton "Recherche" et copier le résultat dans une
autre table.
Le filtre sur la table Naissances fonctionne très bien, mais je ne
sais pas recopier son résultat dans une table nommée
Temp_Naissances.
Voici le code du bouton "Recherche"



<snip>


Crée une requête basée sur la même source que ton
formulaire.
Admettons que ton formulaire se nomme "frmSelection"
Puis, tu transforme cette requête en requête de création de
table

Il te reste à renseigner le filtre de cette requête de cette
manière:
Forms!frmSelection.Filtre

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://www.3stone.be/
MPFA: http://www.mpfa.info/" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://www.mpfa.info/ (infos générales)


Bonjour,
Merci pour cette réponse.
Mais je ne voudrais pas avoir une fenêtre "Entrer une valeur du
paramètre qui s'affiche sur chaque filtre.



Je me demande si tu as lu (ou compris) ce que je t'ai expliqué :-/


Mon formulaire est basé sur les données de la table "Naissances" et a
4 champs indépendants RNom... (voir code). J'ai juste à remplir le ou
les champs et clicker sur le bouton "Recherche" pour réaliser le
filtre. Reste à copier les données de ce filtre dans ma table
"Temp_Naissances".



Tu dis avoir un formulaire avec un filtre...
et tu souhaites envoyer les enregistrements filtré dans une table.

- fais ce que j'ai expliqué et tu auras ce résultat !

A moins que tu appelles "filtre" qque chose qui n'en est pas un...

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://www.3stone.be/
MPFA: http://www.mpfa.info/" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://www.mpfa.info/ (infos générales)
Avatar
acn
3stone a écrit le 08/10/2010 à 13h28 :
Salut,

acn wrote:
Je voudrais récupérer le résultat d'un filtre sur
formulaire réalisé
avec un bouton "Recherche" et copier le résultat dans une
autre table.
Le filtre sur la table Naissances fonctionne très bien, mais je ne
sais pas recopier son résultat dans une table nommée
Temp_Naissances.
Voici le code du bouton "Recherche"




<snip>


Crée une requête basée sur la même source que ton
formulaire.
Admettons que ton formulaire se nomme "frmSelection"
Puis, tu transforme cette requête en requête de création
de
table

Il te reste à renseigner le filtre de cette requête de cette
manière:
Forms!frmSelection.Filtre

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://www.3stone.be/
MPFA: http://www.mpfa.info/" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://www.mpfa.info/ (infos générales)



Bonjour,
Merci pour cette réponse.
Mais je ne voudrais pas avoir une fenêtre "Entrer une valeur du
paramètre qui s'affiche sur chaque filtre.




Je me demande si tu as lu (ou compris) ce que je t'ai expliqué :-/


Mon formulaire est basé sur les données de la table
"Naissances" et a
4 champs indépendants RNom... (voir code). J'ai juste à remplir
le ou
les champs et clicker sur le bouton "Recherche" pour réaliser
le
filtre. Reste à copier les données de ce filtre dans ma table
"Temp_Naissances".




Tu dis avoir un formulaire avec un filtre...
et tu souhaites envoyer les enregistrements filtré dans une table.

- fais ce que j'ai expliqué et tu auras ce résultat !

A moins que tu appelles "filtre" qque chose qui n'en est pas un...

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://www.3stone.be/
MPFA: http://www.mpfa.info/" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://www.mpfa.info/ (infos générales)


Bonjour,

Je ne suis pas un expert en Access.
J'ai bien compris pour créer la requète dont voici le code SQL

SELECT Naissances.Nom, Naissances.Prenom, Naissances.Date, Naissances.PNomP, Naissances.NomM, Naissances.PNomM, Naissances.Lieu, Naissances.Paroisse, Naissances.Canton, Naissances.AN, Naissances.MOIS, Naissances.JOUR, Naissances.Reference, Naissances.Observations, Naissances.INSEE, Naissances.SIGNET INTO Temp_Naissances
FROM Naissances
WHERE (((Naissances.Nom)=[Forms]![Choix_Naissance].[Filtre]) AND ((Naissances.Prenom)=[Forms]![Choix_Naissance].[Filtre]));

Si je remplace Filtre par un nom et que j'exécute la requète cela fonctionne à condition que je remplice les champ sur les boites d'interrogations.
Je ne comprend pas comment utiliser cette requète dans le formulaire sans les boites d'interrogations.
Merci de votreattention à mon problème.
Avatar
3stone
Salut,

Il te reste à renseigner le filtre de cette requête de cette
manière:
Forms!frmSelection.Filtre










Je devais dormir et penser à autre chose, lorsque j'ai écris cela ;-/



Si je remplace Filtre par un nom et que j'exécute la requète cela
fonctionne à condition que je remplice les champ sur les boites
d'interrogations.




Crée un bouton sur ton formulaire et colle le code ci-dessous
dans l'événement "sur clic" de ce bouton.

La table T_Temp se créera tout seul et y copiera automatiquement
tous les enregistrements disponibles dans le formulaire, que
ces enregistrements soient filtrés ou non...
Après le clic, les enregistrements sont disponibles dans la table
T_Temp et seront remplacé au prochain clic...

Essaie :

'----------------------------------------------
Dim db As DAO.Database
Dim sFld As String, sQry As String
Dim sF As String, sSrc As String
Dim l As Integer
Dim f As Field
Set db = CurrentDb
'
'/ SQL de création de la table temporaire
If InStr(Me.RecordSource, "Select") Then
'source chaine sql
sF = Me.RecordSource
sSrc = Mid(sF, InStr(1, sF, "From") + 4)
sSrc = Trim(Replace(sSrc, ";", ""))
sF = Replace(sF, sSrc & ".", "")
l = InStr(sF, "From") - 1
sFld = Mid(sF, 7, l - 7)
sQry = "Select Top 1 " & sFld & " Into T_Temp " & Mid(sF, l)
Else
'source est une table
With Me.RecordsetClone
For Each f In .Fields
If Len(sFld) = 0 Then
sFld = f.Name
Else
sFld = sFld & ", " & f.Name
End If
Next f
End With
sQry = "Select TOP 1 " & sFld & " Into T_Temp From " _
& Me.RecordSource & ";"
End If
'/ Création de la table temporaire
With DoCmd
.SetWarnings False
.RunSQL sQry
.SetWarnings True
End With
'// Vider la table temporaire
db.Execute "Delete * From T_Temp"
sQry = ""
'
'// Si le formulaire n'est pas vide
If Me.RecordsetClone.RecordCount > 0 Then
With Me.RecordsetClone
'// Boucler sur les enregistrements du formulaire
Do Until .EOF
'// Créer la requête SQL
sQry = "Insert Into T_Temp (" & sFld & ") Values ("
For Each f In .Fields
If f.Type = dbText Then
sQry = sQry & Chr(34) & f.Value & Chr(34) & ","
Else
sQry = sQry & f.Value & ","
End If
Next f
sQry = Left(sQry, Len(sQry) - 1) & ");"
.MoveNext
db.Execute sQry
Loop
End With
End If
'// Libérer
Set db = Nothing
'-----------------------------------------------------------------

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Avatar
acn
3stone a écrit le 10/10/2010 à 16h41 :
Salut,

Il te reste à renseigner le filtre de cette requête de cette
manière:
Forms!frmSelection.Filtre














Je devais dormir et penser à autre chose, lorsque j'ai écris cela
;-/



Si je remplace Filtre par un nom et que j'exécute la requète
cela
fonctionne à condition que je remplice les champ sur les boites
d'interrogations.





Crée un bouton sur ton formulaire et colle le code ci-dessous
dans l'événement "sur clic" de ce bouton.

La table T_Temp se créera tout seul et y copiera automatiquement
tous les enregistrements disponibles dans le formulaire, que
ces enregistrements soient filtrés ou non...
Après le clic, les enregistrements sont disponibles dans la table
T_Temp et seront remplacé au prochain clic...

Essaie :

'----------------------------------------------
Dim db As DAO.Database
Dim sFld As String, sQry As String
Dim sF As String, sSrc As String
Dim l As Integer
Dim f As Field
Set db = CurrentDb
'
'/ SQL de création de la table temporaire
If InStr(Me.RecordSource, "Select") Then
'source chaine sql
sF = Me.RecordSource
sSrc = Mid(sF, InStr(1, sF, "From") + 4)
sSrc = Trim(Replace(sSrc, ";", ""))
sF = Replace(sF, sSrc & ".", "")
l = InStr(sF, "From") - 1
sFld = Mid(sF, 7, l - 7)
sQry = "Select Top 1 " & sFld & " Into T_Temp "
& Mid(sF, l)
Else
'source est une table
With Me.RecordsetClone
For Each f In .Fields
If Len(sFld) = 0 Then
sFld = f.Name
Else
sFld = sFld & ", " & f.Name
End If
Next f
End With
sQry = "Select TOP 1 " & sFld & " Into T_Temp From
" _
& Me.RecordSource & ";"
End If
'/ Création de la table temporaire
With DoCmd
.SetWarnings False
.RunSQL sQry
.SetWarnings True
End With
'// Vider la table temporaire
db.Execute "Delete * From T_Temp"
sQry = ""
'
'// Si le formulaire n'est pas vide
If Me.RecordsetClone.RecordCount > 0 Then
With Me.RecordsetClone
'// Boucler sur les enregistrements du formulaire
Do Until .EOF
'// Créer la requête SQL
sQry = "Insert Into T_Temp (" & sFld & ") Values ("
For Each f In .Fields
If f.Type = dbText Then
sQry = sQry & Chr(34) & f.Value & Chr(34) & ","
Else
sQry = sQry & f.Value & ","
End If
Next f
sQry = Left(sQry, Len(sQry) - 1) & ");"
.MoveNext
db.Execute sQry
Loop
End With
End If
'// Libérer
Set db = Nothing
'-----------------------------------------------------------------

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)


Bonjour,

J'ai fait l'essais de ce code que je suis bien incapable de modifier car trop compliqué pour moi.
La table temporaire est bien créée mais sans données (j'ai executé la commande après le filtre).
Le message d'erreur "Erreur d'exécution '3134' Erreur de syntaxe dans l'instruction INSERT INTO. ".
Cette erreur se produit à la ligne db.Execute sQry ou la ligne avant .MoveNext

db.Execute sQry
Loop
End With
End If
'// Libérer
Set db = Nothing
End Sub

Merci d'avoir passé beaucoup de votre temps pour la résolution de ce problème et j'espère un débogage.
Avatar
3stone
Salut,

acn wrote:
[...]
J'ai fait l'essais de ce code que je suis bien incapable de modifier
car trop compliqué pour moi.
La table temporaire est bien créée mais sans données (j'ai executé la
commande après le filtre).
Le message d'erreur "Erreur d'exécution '3134' Erreur de syntaxe
dans l'instruction INSERT INTO. ".
Cette erreur se produit à la ligne db.Execute sQry ou la ligne avant
MoveNext




Quelle est la source de ce formulaire ?

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Avatar
acn
3stone a écrit le 11/10/2010 à 21h10 :
Salut,

acn wrote:
[...]
J'ai fait l'essais de ce code que je suis bien incapable de modifier
car trop compliqué pour moi.
La table temporaire est bien créée mais sans données
(j'ai executé la
commande après le filtre).
Le message d'erreur "Erreur d'exécution '3134' Erreur de syntaxe
dans l'instruction INSERT INTO. ".
Cette erreur se produit à la ligne db.Execute sQry ou la ligne avant
MoveNext





Quelle est la source de ce formulaire ?

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)


Bonjour,

Je reviens sur mon problème, je suis C.. je navais pas vu qu'il fallait voir la suite sur la 2ème page.

La source de mon formulaire est la table Naissances.
C'est un formulaire double affichage, formulaire en haut et mode feuille de données en bas et c'est la partie filtrée de la feuille de donnée que je voudrais récupérer dans une table.

La fenetre de débogage se positionne sur
db.Execute sQry
Avatar
3stone
Salut,

acn wrote:
[...]
Je reviens sur mon problème, je suis C.. je navais pas vu qu'il
fallait voir la suite sur la 2ème page.



???
Je ne sais par quelle interface web (merdique...) tu arrives,
mais ceci est en fait un newsgroup (sur un serveur de news).
http://fr.wikipedia.org/wiki/Usenet


Tu peux rejoindre ce newsgroup via différents miroirs:
news://aoie.org/microsoft.public.fr.access
news://news.stben.net/microsoft.public.fr.access
en utilsant un "lecteur de news" ;-)

A l'origine, et jusqu'il y a peu, ces newsgroups étaient
hébergés sur des serveurs MS. Mais, MS joue la carte
du web bling bling et à fermé tous ses serveurs de news!
Il ne subsistent donc plus que ces "miroirs".


La source de mon formulaire est la table Naissances.
C'est un formulaire double affichage, formulaire en haut et mode
feuille de données en bas et c'est la partie filtrée de la feuille de
donnée que je voudrais récupérer dans une table.

La fenetre de débogage se positionne sur
db.Execute sQry



Avec une table comme source, cela doit fonctionner sans problème,
à condition, bien sûr de....

Place ta base sur http://cjoint.com pour que je regarde...

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Avatar
Gloops
acn a écrit, le 23/10/2010 12:14 :
La fenetre de débogage se positionne sur
db.Execute sQry



Bonjour,

Par "la fenêtre de débogage se positionne sur", faut-il entendre qu'u ne
erreur se produit, un message s'affiche, et ensuite cette instruction
est affichée surlignée en jaune ?

C'est assez classique si il y a une erreur dans la requête.

Dans la fenêtre d'exécution (celle qu'on ouvre par Ctrl G), taper
? sQry
(et appuyer sur Entrée)

Si on veut obtenir ça par une instruction placée juste avant db.Execu te,
c'est

Debug.Print sQry

Ensuite, copier le code de la requête, tel qu'il s'affiche dans la
fenêtre d'exécution, et le coller dans l'éditeur de requête.

C'est-à-dire, créer une nouvelle requête, fermer la boîte de dial ogue de
choix d'une table, changer le mode d'affichage vers SQL, et coller (Ctrl
V) ce qu'on a copié par Ctrl C depuis la fenêtre d'exécution.

Exécuter en cliquant sur le point d'exclamation rouge sur la barre
d'outils en haut de l'éditeur de requêtes, lire le message d'erreur, il
est fort susceptible d'être plus clair que depuis un module.

Ensuite, je crois qu'on n'a plus qu'à le taper si on a une question à
poser dessus. Pour une erreur qui se produit depuis un module, on peut
taper dans la fenêtre d'exécution ? Err.Number & Err.Description, mai s
depuis l'éditeur de requêtes, je doute que l'équivalent existe.
1 2