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

VBA : Inscrire un critère dans une requête

11 réponses
Avatar
papou
Bonjour à toutes et à tous
Je cherche par VBA à inscrire des critères dans les champs d'une requête
vierge (de critères !)
Certains de mes critères sont des valeurs dans un formulaire, pas de soucis
là-dessus.
En revanche, comment inscrire une expression lorsque je coche une case dans
mon formulaire ?
Exemple :
je coche une case Recherche de doublons et je veux inscrire l'expression
suivante en critère dans le champ Name :
In (SELECT [Name] FROM[TA_Inventaire_Fichiers] As Tmp GROUP BY [Name] HAVING
Count(*)>1 )
Merci d'avance pour votre aide
Cordialement
Pascal

10 réponses

1 2
Avatar
Pierre Jagut
Bonjour,

En VBA, il suffit de générer une chaîne de caractère (strSQL par exemple)
qui contient ta requête SQL, et de l'affecter à la requête Access
"MaRequete" de la manière suivante :

CurrentDb.QueryDefs("MaRequete").SQL = strSQL

Tu contruis ta requête dans strSQL avec des if, des select, et tout ce que
tu veux en VBA avant.

J'espère que cela va t'aider.
Pierre.


"papou" <nspm> a écrit dans le message de
news:%
Bonjour à toutes et à tous
Je cherche par VBA à inscrire des critères dans les champs d'une requête
vierge (de critères !)
Certains de mes critères sont des valeurs dans un formulaire, pas de
soucis

là-dessus.
En revanche, comment inscrire une expression lorsque je coche une case
dans

mon formulaire ?
Exemple :
je coche une case Recherche de doublons et je veux inscrire l'expression
suivante en critère dans le champ Name :
In (SELECT [Name] FROM[TA_Inventaire_Fichiers] As Tmp GROUP BY [Name]
HAVING

Count(*)>1 )
Merci d'avance pour votre aide
Cordialement
Pascal





Avatar
papou
Bonjour Pierre
Merci pour ta réponse et la syntaxe à utiliser.
J'avais effectivement songé à utiliser des déclarations de chaîne texte pour
les placer dans les critères de ma requête.
Cordialement
Pascal

"Pierre Jagut" a écrit dans le message de
news:bmdng2$8g9$
Bonjour,

En VBA, il suffit de générer une chaîne de caractère (strSQL par exemple)
qui contient ta requête SQL, et de l'affecter à la requête Access
"MaRequete" de la manière suivante :

CurrentDb.QueryDefs("MaRequete").SQL = strSQL

Tu contruis ta requête dans strSQL avec des if, des select, et tout ce que
tu veux en VBA avant.

J'espère que cela va t'aider.
Pierre.


"papou" <nspm> a écrit dans le message de
news:%
Bonjour à toutes et à tous
Je cherche par VBA à inscrire des critères dans les champs d'une requête
vierge (de critères !)
Certains de mes critères sont des valeurs dans un formulaire, pas de
soucis

là-dessus.
En revanche, comment inscrire une expression lorsque je coche une case
dans

mon formulaire ?
Exemple :
je coche une case Recherche de doublons et je veux inscrire l'expression
suivante en critère dans le champ Name :
In (SELECT [Name] FROM[TA_Inventaire_Fichiers] As Tmp GROUP BY [Name]
HAVING

Count(*)>1 )
Merci d'avance pour votre aide
Cordialement
Pascal









Avatar
papou
Pierre
Ca ne marche pas, j'ai une erreur 3129 avec ce message
"Instruction SQL non valide, DELETE, INSERT, etc...attendus"
Je comprend d'autant moins que cette instruction fonctionne si je la place
dans la requête sur mon champ Name.
Peux-tu m'aider ?
Merci en tout cas
Pascal
Voici ce que j'ai fait :
(Il faut que je te précise toutefois que je vais avoir également d'autres
critères appliquer à la même requête)
1°) Déclaration d'une valeur booléenne
Public Duplicates As Boolean
2°) Création d'une fonction texte qui me renvoie l'instruction SQL :
Function RechercheDoublons() As String
Select Case Duplicates
Case Is = True
RechercheDoublons = "In(SELECT [Name] FROM [TA_Inventaire_Fichiers]
As Tmp GROUP BY [Name] HAVING Count(*)>1) "
Case Else: RechercheDoublons = Null
End Select
End Function
3°) Dans l'évènement AfterUpdate de ma case à cocher :
Private Sub ChkDoublons_AfterUpdate()
If ChkDoublons.Value = True Then
'de recherche de doublons dans le champ Name de RQ_Analyse
Duplicates = True
CurrentDb.QueryDefs("RQ_Analyse").SQL = RechercheDoublons
Else: Duplicates = False
End If
End Sub


"papou" <nspm> a écrit dans le message de
news:%
Bonjour Pierre
Merci pour ta réponse et la syntaxe à utiliser.
J'avais effectivement songé à utiliser des déclarations de chaîne texte
pour

les placer dans les critères de ma requête.
Cordialement
Pascal

"Pierre Jagut" a écrit dans le message de
news:bmdng2$8g9$
Bonjour,

En VBA, il suffit de générer une chaîne de caractère (strSQL par
exemple)


qui contient ta requête SQL, et de l'affecter à la requête Access
"MaRequete" de la manière suivante :

CurrentDb.QueryDefs("MaRequete").SQL = strSQL

Tu contruis ta requête dans strSQL avec des if, des select, et tout ce
que


tu veux en VBA avant.

J'espère que cela va t'aider.
Pierre.


"papou" <nspm> a écrit dans le message de
news:%
Bonjour à toutes et à tous
Je cherche par VBA à inscrire des critères dans les champs d'une
requête



vierge (de critères !)
Certains de mes critères sont des valeurs dans un formulaire, pas de
soucis

là-dessus.
En revanche, comment inscrire une expression lorsque je coche une case
dans

mon formulaire ?
Exemple :
je coche une case Recherche de doublons et je veux inscrire
l'expression



suivante en critère dans le champ Name :
In (SELECT [Name] FROM[TA_Inventaire_Fichiers] As Tmp GROUP BY [Name]
HAVING

Count(*)>1 )
Merci d'avance pour votre aide
Cordialement
Pascal













Avatar
Jessy SEMPERE
Bonjour
Ca ne marche pas, j'ai une erreur 3129 avec ce message
"Instruction SQL non valide, DELETE, INSERT, etc...attendus"


Remplaces ta ligne :
RechercheDoublons = "In(SELECT [Name] FROM [TA_Inventaire_Fichiers]
As Tmp GROUP BY [Name] HAVING Count(*)>1) "

par :
RechercheDoublons = "SELECT Name " _
& "FROM TA_Inventaire_Fichiers " _
& "GROUP BY Name " _
& "HAVING Count(Name)>1;"

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------

Avatar
papou
Bonjour Jessy
Merci pour ta réponse, j'ai déjà fait cela, mais ce n'est pas le résultat
que j'attends.
J'ai omis de bien préciser qu'en fait je vais avoir plusieurs éléments de
critères à fournir à ma requête, et que donc l'instruction SQL ne va pas
aller puisqu'elle exécute ma requête avec un seul critère comme dans
l'exemple fourni.
Ne serait-il pas tout simplement possible d'aller inscrire ma valeur String
dans le critère de ma requête ?
J'ai essayé avec un
CurrentDb.QueryDefs("Rq_Analyse").Fields("Name").Value = RechercheDoublons
mais ça ne marche pas.
Ou alors dois-je utiliser une requête SQL beaucoup plus complète et qui
intégrerait l'ensemble des critères fournis dans mon formulaire ?
Merci pour ton aide
Cordialement
Pascal

"Jessy SEMPERE" a écrit dans le message de
news:bmdsum$efb$
Bonjour
Ca ne marche pas, j'ai une erreur 3129 avec ce message
"Instruction SQL non valide, DELETE, INSERT, etc...attendus"


Remplaces ta ligne :
RechercheDoublons = "In(SELECT [Name] FROM [TA_Inventaire_Fichiers]
As Tmp GROUP BY [Name] HAVING Count(*)>1) "

par :
RechercheDoublons = "SELECT Name " _
& "FROM TA_Inventaire_Fichiers " _
& "GROUP BY Name " _
& "HAVING Count(Name)>1;"

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------





Avatar
Pierre Jagut
Re-bonjour,

Si j'ai bien compris, si la case est cochée, le résultat de la requête ne
contient que des doublons, sinon il contient tous les enregistrements
respectant les critères des autres contrôles de ton forumlaire. Le résultat
de la requête s'affiche dans un sous-formulaire de ton formulaire.

Je pense que ton problème vient du fait qu'il faut écrire toute la requête
de sélection (avec le SELECT * FROM ...), et pas seulement les filtres. Pour
avoir la requête, tu peux modifier la requête complète avec l'assistant et
éditer le mode SQL. Le but est de construire cette chaîne de caractère SQL
en VBA.

Je crois que je ferais ainsi :
Le sous-formulaire, appelé "Analyse_SF" (par exemple) a pour source une
requête appelée "Rq_Analyse".
Je créerais un sub "MAJ_SF" (par exemple) dans le formulaire : il construit
la requête SQL, l'affecte à "Rq_Analyse" et actualise le sous-formulaire
"Analyse_SF".

dim strSQL as string, strWHERE as string

strWHERE=""

if Me.Case_Duplicate = True then
strWHERE= "[Name] In (SELECT [Name] FROM [TA_Inventaire_Fichiers] " & _
"As Tmp GROUP BY [Name] HAVING Count(*)>1)"
endif
' exemple de filtrage complémentaire pour un contrôle "Controle1" qui opère
sur le champ "Champ1"
if not (isnull(Me.Controle1)) then
if strWHERE <> "" then
strWHERE = strWHERE & " AND "
endif
strWHERE = strWHERE & "[Champ1] is like " & Me.Controle1 & "*"
endif
'... etc pour tous les controles qui opèrent un filtrage

strSQL = "SELECT * FROM [TA_Inventaire_Fichiers]"
if strWHERE <> "" then
strSQL = strSQL & " WHERE " & strWHERE
endif

CurrentDb.QueryDefs("Rq_Analyse").SQL = strSQL

DoCmd.Requery("Analyse_SF")

Voilà pour le sub "MAJ_SF" (il peut faire d'autres chose également si tu le
souhaites).
Sur l'événement MAJ de chaque contrôle, tu exécutes ce sub : le
sous-formulaire devrait se mettre à jour.

J'espère que cela ira avec cela.
Pierre.


"papou" <nspm> a écrit dans le message de
news:
Bonjour Jessy
Merci pour ta réponse, j'ai déjà fait cela, mais ce n'est pas le résultat
que j'attends.
J'ai omis de bien préciser qu'en fait je vais avoir plusieurs éléments de
critères à fournir à ma requête, et que donc l'instruction SQL ne va pas
aller puisqu'elle exécute ma requête avec un seul critère comme dans
l'exemple fourni.
Ne serait-il pas tout simplement possible d'aller inscrire ma valeur
String

dans le critère de ma requête ?
J'ai essayé avec un
CurrentDb.QueryDefs("Rq_Analyse").Fields("Name").Value = RechercheDoublons
mais ça ne marche pas.
Ou alors dois-je utiliser une requête SQL beaucoup plus complète et qui
intégrerait l'ensemble des critères fournis dans mon formulaire ?
Merci pour ton aide
Cordialement
Pascal

"Jessy SEMPERE" a écrit dans le message de
news:bmdsum$efb$
Bonjour
Ca ne marche pas, j'ai une erreur 3129 avec ce message
"Instruction SQL non valide, DELETE, INSERT, etc...attendus"


Remplaces ta ligne :
RechercheDoublons = "In(SELECT [Name] FROM [TA_Inventaire_Fichiers]
As Tmp GROUP BY [Name] HAVING Count(*)>1) "

par :
RechercheDoublons = "SELECT Name " _
& "FROM TA_Inventaire_Fichiers " _
& "GROUP BY Name " _
& "HAVING Count(Name)>1;"

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------









Avatar
papou
Pierre
Merci beaucoup pour ton aide précieuse.
Tu as assez bien compris ma problématique : en fait je veux cumuler
l'ensemble des éléments qui peuvent être renseignés en tant que critères.
Exemple :
Je vais demander
la liste des éléments en doublon
ET
qui ont une date inférieure ou égale à 01/01/2000
ET
qui ont un type égale à "Machin"
ET
qui ont un niveau égal à 3
etc.
Le résultat de cette requête va être exporté vers un fichier Excel et/ou
imprimé dans un état Access
Je vais donc mettre en pratique ton conseil et créer une SUB attachée à mon
formulaire de manière à "concaténer" l'ensemble des critères SQL.
Cordialement
Pascal


"Pierre Jagut" a écrit dans le message de
news:bme1hk$git$
Re-bonjour,

Si j'ai bien compris, si la case est cochée, le résultat de la requête ne
contient que des doublons, sinon il contient tous les enregistrements
respectant les critères des autres contrôles de ton forumlaire. Le
résultat

de la requête s'affiche dans un sous-formulaire de ton formulaire.

Je pense que ton problème vient du fait qu'il faut écrire toute la requête
de sélection (avec le SELECT * FROM ...), et pas seulement les filtres.
Pour

avoir la requête, tu peux modifier la requête complète avec l'assistant et
éditer le mode SQL. Le but est de construire cette chaîne de caractère SQL
en VBA.

Je crois que je ferais ainsi :
Le sous-formulaire, appelé "Analyse_SF" (par exemple) a pour source une
requête appelée "Rq_Analyse".
Je créerais un sub "MAJ_SF" (par exemple) dans le formulaire : il
construit

la requête SQL, l'affecte à "Rq_Analyse" et actualise le sous-formulaire
"Analyse_SF".

dim strSQL as string, strWHERE as string

strWHERE=""

if Me.Case_Duplicate = True then
strWHERE= "[Name] In (SELECT [Name] FROM [TA_Inventaire_Fichiers] " & _
"As Tmp GROUP BY [Name] HAVING Count(*)>1)"
endif
' exemple de filtrage complémentaire pour un contrôle "Controle1" qui
opère

sur le champ "Champ1"
if not (isnull(Me.Controle1)) then
if strWHERE <> "" then
strWHERE = strWHERE & " AND "
endif
strWHERE = strWHERE & "[Champ1] is like " & Me.Controle1 & "*"
endif
'... etc pour tous les controles qui opèrent un filtrage

strSQL = "SELECT * FROM [TA_Inventaire_Fichiers]"
if strWHERE <> "" then
strSQL = strSQL & " WHERE " & strWHERE
endif

CurrentDb.QueryDefs("Rq_Analyse").SQL = strSQL

DoCmd.Requery("Analyse_SF")

Voilà pour le sub "MAJ_SF" (il peut faire d'autres chose également si tu
le

souhaites).
Sur l'événement MAJ de chaque contrôle, tu exécutes ce sub : le
sous-formulaire devrait se mettre à jour.

J'espère que cela ira avec cela.
Pierre.


"papou" <nspm> a écrit dans le message de
news:
Bonjour Jessy
Merci pour ta réponse, j'ai déjà fait cela, mais ce n'est pas le
résultat


que j'attends.
J'ai omis de bien préciser qu'en fait je vais avoir plusieurs éléments
de


critères à fournir à ma requête, et que donc l'instruction SQL ne va pas
aller puisqu'elle exécute ma requête avec un seul critère comme dans
l'exemple fourni.
Ne serait-il pas tout simplement possible d'aller inscrire ma valeur
String

dans le critère de ma requête ?
J'ai essayé avec un
CurrentDb.QueryDefs("Rq_Analyse").Fields("Name").Value RechercheDoublons
mais ça ne marche pas.
Ou alors dois-je utiliser une requête SQL beaucoup plus complète et qui
intégrerait l'ensemble des critères fournis dans mon formulaire ?
Merci pour ton aide
Cordialement
Pascal

"Jessy SEMPERE" a écrit dans le message de
news:bmdsum$efb$
Bonjour
Ca ne marche pas, j'ai une erreur 3129 avec ce message
"Instruction SQL non valide, DELETE, INSERT, etc...attendus"


Remplaces ta ligne :
RechercheDoublons = "In(SELECT [Name] FROM [TA_Inventaire_Fichiers]
As Tmp GROUP BY [Name] HAVING Count(*)>1) "

par :
RechercheDoublons = "SELECT Name " _
& "FROM TA_Inventaire_Fichiers " _
& "GROUP BY Name " _
& "HAVING Count(Name)>1;"

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------













Avatar
Jessy SEMPERE
En complément à la réponse de Pierre, je rajouterais juste
de faire attention au ";"
Si tu n'as pas de critère, ton ";" sera juste après ta clause From TaTable
par contre si tu as un critère, le ";" sera après le critère...
En gros le ";" devra toujours être en dernier.

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"papou" <nspm> a écrit dans le message news:
#
Pierre
Merci beaucoup pour ton aide précieuse.
Tu as assez bien compris ma problématique : en fait je veux cumuler
l'ensemble des éléments qui peuvent être renseignés en tant que critères.
Exemple :
Je vais demander
la liste des éléments en doublon
ET
qui ont une date inférieure ou égale à 01/01/2000
ET
qui ont un type égale à "Machin"
ET
qui ont un niveau égal à 3
etc.
Le résultat de cette requête va être exporté vers un fichier Excel et/ou
imprimé dans un état Access
Je vais donc mettre en pratique ton conseil et créer une SUB attachée à
mon

formulaire de manière à "concaténer" l'ensemble des critères SQL.
Cordialement
Pascal


"Pierre Jagut" a écrit dans le message de
news:bme1hk$git$
Re-bonjour,

Si j'ai bien compris, si la case est cochée, le résultat de la requête
ne


contient que des doublons, sinon il contient tous les enregistrements
respectant les critères des autres contrôles de ton forumlaire. Le
résultat

de la requête s'affiche dans un sous-formulaire de ton formulaire.

Je pense que ton problème vient du fait qu'il faut écrire toute la
requête


de sélection (avec le SELECT * FROM ...), et pas seulement les filtres.
Pour

avoir la requête, tu peux modifier la requête complète avec l'assistant
et


éditer le mode SQL. Le but est de construire cette chaîne de caractère
SQL


en VBA.

Je crois que je ferais ainsi :
Le sous-formulaire, appelé "Analyse_SF" (par exemple) a pour source une
requête appelée "Rq_Analyse".
Je créerais un sub "MAJ_SF" (par exemple) dans le formulaire : il
construit

la requête SQL, l'affecte à "Rq_Analyse" et actualise le sous-formulaire
"Analyse_SF".

dim strSQL as string, strWHERE as string

strWHERE=""

if Me.Case_Duplicate = True then
strWHERE= "[Name] In (SELECT [Name] FROM [TA_Inventaire_Fichiers] " &
_


"As Tmp GROUP BY [Name] HAVING Count(*)>1)"
endif
' exemple de filtrage complémentaire pour un contrôle "Controle1" qui
opère

sur le champ "Champ1"
if not (isnull(Me.Controle1)) then
if strWHERE <> "" then
strWHERE = strWHERE & " AND "
endif
strWHERE = strWHERE & "[Champ1] is like " & Me.Controle1 & "*"
endif
'... etc pour tous les controles qui opèrent un filtrage

strSQL = "SELECT * FROM [TA_Inventaire_Fichiers]"
if strWHERE <> "" then
strSQL = strSQL & " WHERE " & strWHERE
endif

CurrentDb.QueryDefs("Rq_Analyse").SQL = strSQL

DoCmd.Requery("Analyse_SF")

Voilà pour le sub "MAJ_SF" (il peut faire d'autres chose également si tu
le

souhaites).
Sur l'événement MAJ de chaque contrôle, tu exécutes ce sub : le
sous-formulaire devrait se mettre à jour.

J'espère que cela ira avec cela.
Pierre.


"papou" <nspm> a écrit dans le message de
news:
Bonjour Jessy
Merci pour ta réponse, j'ai déjà fait cela, mais ce n'est pas le
résultat


que j'attends.
J'ai omis de bien préciser qu'en fait je vais avoir plusieurs éléments
de


critères à fournir à ma requête, et que donc l'instruction SQL ne va
pas



aller puisqu'elle exécute ma requête avec un seul critère comme dans
l'exemple fourni.
Ne serait-il pas tout simplement possible d'aller inscrire ma valeur
String

dans le critère de ma requête ?
J'ai essayé avec un
CurrentDb.QueryDefs("Rq_Analyse").Fields("Name").Value > RechercheDoublons
mais ça ne marche pas.
Ou alors dois-je utiliser une requête SQL beaucoup plus complète et
qui



intégrerait l'ensemble des critères fournis dans mon formulaire ?
Merci pour ton aide
Cordialement
Pascal

"Jessy SEMPERE" a écrit dans le message de
news:bmdsum$efb$
Bonjour
Ca ne marche pas, j'ai une erreur 3129 avec ce message
"Instruction SQL non valide, DELETE, INSERT, etc...attendus"


Remplaces ta ligne :
RechercheDoublons = "In(SELECT [Name] FROM [TA_Inventaire_Fichiers]
As Tmp GROUP BY [Name] HAVING Count(*)>1) "

par :
RechercheDoublons = "SELECT Name " _
& "FROM TA_Inventaire_Fichiers " _
& "GROUP BY Name " _
& "HAVING Count(Name)>1;"

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------

















Avatar
papou
Jessy
Donc si je comprend bien, le point-virgule doit figurer après chaque critère
ajouté ?
Merci pour ton aide
Cordialement
Pascal

"Jessy SEMPERE" a écrit dans le message de
news:bme4cm$j40$
En complément à la réponse de Pierre, je rajouterais juste
de faire attention au ";"
Si tu n'as pas de critère, ton ";" sera juste après ta clause From TaTable
par contre si tu as un critère, le ";" sera après le critère...
En gros le ";" devra toujours être en dernier.

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"papou" <nspm> a écrit dans le message news:
#
Pierre
Merci beaucoup pour ton aide précieuse.
Tu as assez bien compris ma problématique : en fait je veux cumuler
l'ensemble des éléments qui peuvent être renseignés en tant que
critères.


Exemple :
Je vais demander
la liste des éléments en doublon
ET
qui ont une date inférieure ou égale à 01/01/2000
ET
qui ont un type égale à "Machin"
ET
qui ont un niveau égal à 3
etc.
Le résultat de cette requête va être exporté vers un fichier Excel et/ou
imprimé dans un état Access
Je vais donc mettre en pratique ton conseil et créer une SUB attachée à
mon

formulaire de manière à "concaténer" l'ensemble des critères SQL.
Cordialement
Pascal


"Pierre Jagut" a écrit dans le message de
news:bme1hk$git$
Re-bonjour,

Si j'ai bien compris, si la case est cochée, le résultat de la requête
ne


contient que des doublons, sinon il contient tous les enregistrements
respectant les critères des autres contrôles de ton forumlaire. Le
résultat

de la requête s'affiche dans un sous-formulaire de ton formulaire.

Je pense que ton problème vient du fait qu'il faut écrire toute la
requête


de sélection (avec le SELECT * FROM ...), et pas seulement les
filtres.



Pour
avoir la requête, tu peux modifier la requête complète avec
l'assistant



et
éditer le mode SQL. Le but est de construire cette chaîne de caractère
SQL


en VBA.

Je crois que je ferais ainsi :
Le sous-formulaire, appelé "Analyse_SF" (par exemple) a pour source
une



requête appelée "Rq_Analyse".
Je créerais un sub "MAJ_SF" (par exemple) dans le formulaire : il
construit

la requête SQL, l'affecte à "Rq_Analyse" et actualise le
sous-formulaire



"Analyse_SF".

dim strSQL as string, strWHERE as string

strWHERE=""

if Me.Case_Duplicate = True then
strWHERE= "[Name] In (SELECT [Name] FROM [TA_Inventaire_Fichiers] "
&



_
"As Tmp GROUP BY [Name] HAVING Count(*)>1)"
endif
' exemple de filtrage complémentaire pour un contrôle "Controle1" qui
opère

sur le champ "Champ1"
if not (isnull(Me.Controle1)) then
if strWHERE <> "" then
strWHERE = strWHERE & " AND "
endif
strWHERE = strWHERE & "[Champ1] is like " & Me.Controle1 & "*"
endif
'... etc pour tous les controles qui opèrent un filtrage

strSQL = "SELECT * FROM [TA_Inventaire_Fichiers]"
if strWHERE <> "" then
strSQL = strSQL & " WHERE " & strWHERE
endif

CurrentDb.QueryDefs("Rq_Analyse").SQL = strSQL

DoCmd.Requery("Analyse_SF")

Voilà pour le sub "MAJ_SF" (il peut faire d'autres chose également si
tu



le
souhaites).
Sur l'événement MAJ de chaque contrôle, tu exécutes ce sub : le
sous-formulaire devrait se mettre à jour.

J'espère que cela ira avec cela.
Pierre.


"papou" <nspm> a écrit dans le message de
news:
Bonjour Jessy
Merci pour ta réponse, j'ai déjà fait cela, mais ce n'est pas le
résultat


que j'attends.
J'ai omis de bien préciser qu'en fait je vais avoir plusieurs
éléments




de
critères à fournir à ma requête, et que donc l'instruction SQL ne va
pas



aller puisqu'elle exécute ma requête avec un seul critère comme dans
l'exemple fourni.
Ne serait-il pas tout simplement possible d'aller inscrire ma valeur
String

dans le critère de ma requête ?
J'ai essayé avec un
CurrentDb.QueryDefs("Rq_Analyse").Fields("Name").Value > > RechercheDoublons
mais ça ne marche pas.
Ou alors dois-je utiliser une requête SQL beaucoup plus complète et
qui



intégrerait l'ensemble des critères fournis dans mon formulaire ?
Merci pour ton aide
Cordialement
Pascal

"Jessy SEMPERE" a écrit dans le message
de




news:bmdsum$efb$
Bonjour
Ca ne marche pas, j'ai une erreur 3129 avec ce message
"Instruction SQL non valide, DELETE, INSERT, etc...attendus"


Remplaces ta ligne :
RechercheDoublons = "In(SELECT [Name] FROM
[TA_Inventaire_Fichiers]





As Tmp GROUP BY [Name] HAVING Count(*)>1) "

par :
RechercheDoublons = "SELECT Name " _
& "FROM TA_Inventaire_Fichiers " _
& "GROUP BY Name " _
& "HAVING Count(Name)>1;"

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------





















Avatar
Jessy SEMPERE
Non...
Le point virgule doit figure à la fin de ta requête.
Quand tu finis une phrase, tu mets un point et ben quand tu
finis une requête, tu mets un point virgule.

Voilà
--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"papou" <nspm> a écrit dans le message news:

Jessy
Donc si je comprend bien, le point-virgule doit figurer après chaque
critère

ajouté ?
Merci pour ton aide
Cordialement
Pascal



1 2