Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/07/2011, 10h00   #1
Membre habitué
 
Homme Christian Roignot
Logisticien
Inscription : janvier 2009
Messages : 308
Détails du profil
Informations personnelles :
Nom : Homme Christian Roignot
Âge : 59
Localisation : France

Informations professionnelles :
Activité : Logisticien
Secteur : Industrie

Informations forums :
Inscription : janvier 2009
Messages : 308
Points : 112
Points : 112
Par défaut Filtre sur une requête SQL

Bonjour,

J'ai une requête SQL avec plusieurs critères.

Dans mon formulaire, j'ai un groupe avec plusieurs sélection.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
Private Sub grpRetard_AfterUpdate()
Select Case Me.grpRetard
Case 1
    Me.txtRetard = "Retard"
Case 2
    Me.txtRetard = "Pas retard"
Case 3
    Me.txtRetard = "is not null" 'Retard et Pas retard
Case 4
    Me.txtRetard = "is null" 'Pas encore défini
End Select
Me.Requery
Me.Refresh
End Sub
Pour le case 1 et 2, cela fonctionne correctement.

Par contre, pour les cases 3 et 4 je n’ai aucun résultat.
J'ai essayé plusieurs solutions, et je trouve pas...
Comment faire, par exemple pour la Case 3, afficher les enregistrements dont le champ = Retard et Pas retard


Merci d'avance de votre aide
rch05 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2011, 10h13   #2
Membre confirmé
 
Homme
Chercheur
Inscription : juin 2011
Messages : 150
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Tarn (Midi Pyrénées)

Informations professionnelles :
Activité : Chercheur
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : juin 2011
Messages : 150
Points : 231
Points : 231
Bonjour,

Je ne pense pas que cela puisse fonctionner sous cette forme. Le plus simple serait de réaffecter la requête entière avec "is not null" et "is null" qui dans votre code sont pris pour du texte et donc non pris en compte.

Qu'elle est la requête utilisée ?

Bcdt
fbtsra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2011, 10h29   #3
Membre habitué
 
Homme Christian Roignot
Logisticien
Inscription : janvier 2009
Messages : 308
Détails du profil
Informations personnelles :
Nom : Homme Christian Roignot
Âge : 59
Localisation : France

Informations professionnelles :
Activité : Logisticien
Secteur : Industrie

Informations forums :
Inscription : janvier 2009
Messages : 308
Points : 112
Points : 112
Bonjour fbtsra,

Citation:
dans votre code sont pris pour du texte et donc non pris en compte.
C'est ce que j'ai compris.

Ci-dessous la requête:
Code :
1
2
3
4
5
6
 
PARAMETERS [Forms]![frmStatsSemaine]![SemaineD] Value, [Forms]![frmStatsSemaine]![AnneeD] Value;
SELECT rqyQtéCap.[Dte Fin Prévue], rqyQtéCap.DteCarnetCdeXLS, rqyQtéCap.Qté, rqyQtéCap.[Statut des OF], NumSemaine([DteCarnetCdeXLS]) AS Semaine, rqyQtéCap.idCAP, rqyQtéCap.CAP, rqyQtéCap.idIPU, rqyQtéCap.idClient, rqyQtéCap.Client, rqyQtéCap.idArticle, rqyQtéCap.[Code Article], rqyQtéCap.Désignation, rqyQtéCap.[Dte Ddée EXW], rqyQtéCap.[Dte expédition modifiée], rqyQtéCap.Retard, rqyQtéCap.[Magasin expedition], rqyQtéCap.[Point expedition], rqyQtéCap.OV, rqyQtéCap.OF
FROM rqyQtéCap
WHERE (((rqyQtéCap.DteCarnetCdeXLS) Between InvDatePart(1,[Forms]![frmStatsSemaine]![SemaineD],[Forms]![frmStatsSemaine]![AnneeD]) And (InvDatePart(1,[Forms]![frmStatsSemaine]![SemaineD],[Forms]![frmStatsSemaine]![AnneeD])+13)) AND ((rqyQtéCap.[Statut des OF]) Like "*" & [Formulaires]![frmStatsSemaine]![txtStatut] & "*") AND ((rqyQtéCap.idCAP) Like "*" & [Formulaires]![frmStatsSemaine]![cmbCAP] & "*") AND ((rqyQtéCap.idIPU) Like "*" & [Formulaires]![frmStatsSemaine]![cmbIPU] & "*") AND ((rqyQtéCap.idClient) Like "*" & [Formulaires]![frmStatsSemaine]![cmbClient] & "*") AND ((rqyQtéCap.idArticle) Like "*" & [Formulaires]![frmStatsSemaine]![cmbCodeArticle] & "*") AND ((rqyQtéCap.Retard) Like "*" & [Formulaires]![frmStatsSemaine]![txtRetard] & "*"))
ORDER BY rqyQtéCap.[Dte Fin Prévue];
J'ai essayé en codant cette requête en VBA, mais je bloque après.
Car celle-ci est appelé par une autre requête(TDC).
Là, je ne sait pas comment faire????

C'est pourquoi, j'effectue de cette manière et que je rencontre des difficultés à changer mes critères.

Merci de votre aide
rch05 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2011, 11h10   #4
Membre confirmé
 
Homme
Chercheur
Inscription : juin 2011
Messages : 150
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Tarn (Midi Pyrénées)

Informations professionnelles :
Activité : Chercheur
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : juin 2011
Messages : 150
Points : 231
Points : 231
Qu'elle est cette autre requête et où sont placées les deux requêtes ? Votre code ligne 13 appelle les deux ?

Bcdt
fbtsra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2011, 11h28   #5
Membre habitué
 
Homme Christian Roignot
Logisticien
Inscription : janvier 2009
Messages : 308
Détails du profil
Informations personnelles :
Nom : Homme Christian Roignot
Âge : 59
Localisation : France

Informations professionnelles :
Activité : Logisticien
Secteur : Industrie

Informations forums :
Inscription : janvier 2009
Messages : 308
Points : 112
Points : 112
On oublie ça:
Citation:
J'ai essayé en codant cette requête en VBA, mais je bloque après.
Car celle-ci est appelé par une autre requête(TDC).
Là, je ne sait pas comment faire????
J'ai pas trop bien compris sur la 13ème ligne?
Je n'ai que 6 lignes.
A quel endroit du code se trouve le pb

Voici comment je procéde:
J’ai une 1er requête SQL :
Code :
1
2
3
4
 
SELECT tblChargeLongue.[Dte Fin Prévue], tblChargeLongue.DteCarnetCdeXLS, tblChargeLongue.Qté, tblCAP.idCAP, tblCAP.CAP, tblCAP.idIPU, tblChargeLongue.[Statut des OF], AnneeSemaine([tblChargeLongue]![DteCarnetCdeXLS]) AS S, tblChargeLongue.idClient, tblClient.Client, tblLigne.Ligne, tblChargeLongue.idArticle, tblArticle.[Code Article], tblArticle.Désignation, tblChargeLongue.[Dte Ddée EXW], tblChargeLongue.[Dte expédition modifiée], tblChargeLongue.[Magasin expedition], tblChargeLongue.[Point expedition], tblChargeLongue.Retard, tblChargeLongue.OV, tblChargeLongue.OF
FROM (((tblCAP INNER JOIN tblChargeLongue ON tblCAP.idCAP = tblChargeLongue.idCap) INNER JOIN tblArticle ON tblChargeLongue.idArticle = tblArticle.idArticle) INNER JOIN tblClient ON tblChargeLongue.idClient = tblClient.IdClient) INNER JOIN tblLigne ON tblChargeLongue.idLigne = tblLigne.IdLigne
ORDER BY tblChargeLongue.[Dte Fin Prévue], tblChargeLongue.DteCarnetCdeXLS, AnneeSemaine([tblChargeLongue]![DteCarnetCdeXLS]);
La 2ème requête SQL qui pose problème, appelle la 1er.
Code :
1
2
3
4
5
6
 
PARAMETERS [Forms]![frmStatsSemaine]![SemaineD] Value, [Forms]![frmStatsSemaine]![AnneeD] Value;
SELECT rqyQtéCap.[Dte Fin Prévue], rqyQtéCap.DteCarnetCdeXLS, rqyQtéCap.Qté, rqyQtéCap.[Statut des OF], NumSemaine([DteCarnetCdeXLS]) AS Semaine, rqyQtéCap.idCAP, rqyQtéCap.CAP, rqyQtéCap.idIPU, rqyQtéCap.idClient, rqyQtéCap.Client, rqyQtéCap.idArticle, rqyQtéCap.[Code Article], rqyQtéCap.Désignation, rqyQtéCap.[Dte Ddée EXW], rqyQtéCap.[Dte expédition modifiée], rqyQtéCap.Retard, rqyQtéCap.[Magasin expedition], rqyQtéCap.[Point expedition], rqyQtéCap.OV, rqyQtéCap.OF
FROM rqyQtéCap
WHERE (((rqyQtéCap.DteCarnetCdeXLS) Between InvDatePart(1,[Forms]![frmStatsSemaine]![SemaineD],[Forms]![frmStatsSemaine]![AnneeD]) And (InvDatePart(1,[Forms]![frmStatsSemaine]![SemaineD],[Forms]![frmStatsSemaine]![AnneeD])+13)) AND ((rqyQtéCap.[Statut des OF]) Like "*" & [Formulaires]![frmStatsSemaine]![txtStatut] & "*") AND ((rqyQtéCap.idCAP) Like "*" & [Formulaires]![frmStatsSemaine]![cmbCAP] & "*") AND ((rqyQtéCap.idIPU) Like "*" & [Formulaires]![frmStatsSemaine]![cmbIPU] & "*") AND ((rqyQtéCap.idClient) Like "*" & [Formulaires]![frmStatsSemaine]![cmbClient] & "*") AND ((rqyQtéCap.idArticle) Like "*" & [Formulaires]![frmStatsSemaine]![cmbCodeArticle] & "*") AND ((rqyQtéCap.Retard) Like "*" & [Formulaires]![frmStatsSemaine]![txtRetard] & "*"))
ORDER BY rqyQtéCap.[Dte Fin Prévue];
Puis la 3ème requête appelle la 2ème. C’est une requête analyse croisée
Code :
1
2
3
4
5
6
7
 
TRANSFORM nz(Sum(rqyQtéCapTotal.Qté),0) AS SommeDeQté
SELECT rqyQtéCapTotal.[Dte Fin Prévue]
FROM rqyQtéCapTotal
GROUP BY rqyQtéCapTotal.[Dte Fin Prévue]
ORDER BY DateDiff("d",InvDatePart(1,[Forms]![frmStatsSemaine]![SemaineD],[Forms]![frmStatsSemaine]![AnneeD]),[DteCarnetCdeXLS])+1
PIVOT DateDiff("d",InvDatePart(1,[Forms]![frmStatsSemaine]![SemaineD],[Forms]![frmStatsSemaine]![AnneeD]),[DteCarnetCdeXLS])+1 In (1,2,3,4,5,6,7,8,9,10,11,12,13,14);
Cela fonctionne très bien, sauf quand je veux sélectionner ''Retard et Pas retard''.
et là je vois pas comment faire

cdt
rch05 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2011, 12h02   #6
Membre confirmé
 
Homme
Chercheur
Inscription : juin 2011
Messages : 150
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Tarn (Midi Pyrénées)

Informations professionnelles :
Activité : Chercheur
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : juin 2011
Messages : 150
Points : 231
Points : 231
J'évoquais la ligne 13 de votre code grpRetard_AfterUpdate() (votre premier message).

La solution me semblerait de faire :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub grpRetard_AfterUpdate()
Select Case Me.grpRetard
Case 1
    'Définir la requête n°2 avec paramètre Retard
Case 2
    'Définir la requête n°2 avec paramètre Pas Retard
Case 3
    'Définir la requête n°2 avec paramètre is not null 
Case 4
    'Définir la requête n°2 avec paramètre is null 
End Select
Me.Requery
Me.Refresh
End Sub
Reste à voir si cela est compatible avec le fonctionnement de votre base ...


PS : je suis surpris que la requête global fonctionne avec "retard" et "pas retard" car en utilisant :

Code :
Like "*" & [Formulaires]![frmStatsSemaine]![txtRetard] & "*"))
la requête ne fait pas la différence entre "retard" et "pas retard" si vous avez "retard" sélectionné dans votre groupe grpRetard.

Bcdt
fbtsra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2011, 12h49   #7
Membre habitué
 
Homme Christian Roignot
Logisticien
Inscription : janvier 2009
Messages : 308
Détails du profil
Informations personnelles :
Nom : Homme Christian Roignot
Âge : 59
Localisation : France

Informations professionnelles :
Activité : Logisticien
Secteur : Industrie

Informations forums :
Inscription : janvier 2009
Messages : 308
Points : 112
Points : 112
Concernant:
Citation:
J'évoquais la ligne 13 de votre code grpRetard_AfterUpdate() (votre premier message).
Le me.Requery appelle la 3ème requête après un changement de citrères.

Concernant:
Code :
1
2
3
4
 
Select Case Me.grpRetard
Case 1
    'Définir la requête n°2 avec paramètre Retard
Comment je fait, car je ne vois pas?

Concernat:
Citation:
la requête ne fait pas la différence entre "retard" et "pas retard" si vous avez "retard" sélectionné dans votre groupe grpRetard.
Il faut que je regarde, cas vous me mettez un doute.
De cette façon si le champ ''txtStatut'' = Pas retard, la requête filtre bien sur ce critère.Non?
rch05 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2011, 13h07   #8
Membre habitué
 
Homme Christian Roignot
Logisticien
Inscription : janvier 2009
Messages : 308
Détails du profil
Informations personnelles :
Nom : Homme Christian Roignot
Âge : 59
Localisation : France

Informations professionnelles :
Activité : Logisticien
Secteur : Industrie

Informations forums :
Inscription : janvier 2009
Messages : 308
Points : 112
Points : 112
Je viens de regarder, et vous avez raison sur ''Retard'' et ''Pas retard''.
rch05 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2011, 14h15   #9
Membre habitué
 
Homme Christian Roignot
Logisticien
Inscription : janvier 2009
Messages : 308
Détails du profil
Informations personnelles :
Nom : Homme Christian Roignot
Âge : 59
Localisation : France

Informations professionnelles :
Activité : Logisticien
Secteur : Industrie

Informations forums :
Inscription : janvier 2009
Messages : 308
Points : 112
Points : 112
J'ai paramétré la requêtes SQL sur le champ "txtRetard".
Maintenant cela fonctionne pour les cas "Retard" et "Pas retard"

Mais j'ai toujours le même souci avec les deux autres critères.
- Case 3, avec "Retard" et "Pas retard"
- Case 4, avec null
Je trouve pas comment passé les infos à la requête pour ces deux critères.
rch05 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2011, 14h51   #10
Membre confirmé
 
Homme
Chercheur
Inscription : juin 2011
Messages : 150
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Tarn (Midi Pyrénées)

Informations professionnelles :
Activité : Chercheur
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : juin 2011
Messages : 150
Points : 231
Points : 231
Je pensais à :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Private Sub grpRetard_AfterUpdate()
 
Dim bds As Database, dfr As QueryDef, chSQL As String
 
Set bds = CurrentDb
 
Select Case Me.grpRetard
Case 1
chSQL = "PARAMETERS [Forms]![frmStatsSemaine]![SemaineD] Value, [Forms]![frmStatsSemaine]![AnneeD] Value;
SELECT rqyQtéCap.[Dte Fin Prévue], rqyQtéCap.DteCarnetCdeXLS, rqyQtéCap.Qté, rqyQtéCap.[Statut des OF], NumSemaine([DteCarnetCdeXLS]) AS Semaine, rqyQtéCap.idCAP, rqyQtéCap.CAP, rqyQtéCap.idIPU, rqyQtéCap.idClient, rqyQtéCap.Client, rqyQtéCap.idArticle, rqyQtéCap.[Code Article], rqyQtéCap.Désignation, rqyQtéCap.[Dte Ddée EXW], rqyQtéCap.[Dte expédition modifiée], rqyQtéCap.Retard, rqyQtéCap.[Magasin expedition], rqyQtéCap.[Point expedition], rqyQtéCap.OV, rqyQtéCap.OF
FROM rqyQtéCap
WHERE (((rqyQtéCap.DteCarnetCdeXLS) Between InvDatePart(1,[Forms]![frmStatsSemaine]![SemaineD],[Forms]![frmStatsSemaine]![AnneeD]) And (InvDatePart(1,[Forms]![frmStatsSemaine]![SemaineD],[Forms]![frmStatsSemaine]![AnneeD])+13)) AND ((rqyQtéCap.[Statut des OF]) Like "*" & [Formulaires]![frmStatsSemaine]![txtStatut] & "*") AND ((rqyQtéCap.idCAP) Like "*" & [Formulaires]![frmStatsSemaine]![cmbCAP] & "*") AND ((rqyQtéCap.idIPU) Like "*" & [Formulaires]![frmStatsSemaine]![cmbIPU] & "*") AND ((rqyQtéCap.idClient) Like "*" & [Formulaires]![frmStatsSemaine]![cmbClient] & "*") AND ((rqyQtéCap.idArticle) Like "*" & [Formulaires]![frmStatsSemaine]![cmbCodeArticle] & "*") AND ((rqyQtéCap.Retard) ='Retard'))
ORDER BY rqyQtéCap.[Dte Fin Prévue];"
 
Case 2
chSQL = "PARAMETERS [Forms]![frmStatsSemaine]![SemaineD] Value, [Forms]![frmStatsSemaine]![AnneeD] Value;
SELECT rqyQtéCap.[Dte Fin Prévue], rqyQtéCap.DteCarnetCdeXLS, rqyQtéCap.Qté, rqyQtéCap.[Statut des OF], NumSemaine([DteCarnetCdeXLS]) AS Semaine, rqyQtéCap.idCAP, rqyQtéCap.CAP, rqyQtéCap.idIPU, rqyQtéCap.idClient, rqyQtéCap.Client, rqyQtéCap.idArticle, rqyQtéCap.[Code Article], rqyQtéCap.Désignation, rqyQtéCap.[Dte Ddée EXW], rqyQtéCap.[Dte expédition modifiée], rqyQtéCap.Retard, rqyQtéCap.[Magasin expedition], rqyQtéCap.[Point expedition], rqyQtéCap.OV, rqyQtéCap.OF
FROM rqyQtéCap
WHERE (((rqyQtéCap.DteCarnetCdeXLS) Between InvDatePart(1,[Forms]![frmStatsSemaine]![SemaineD],[Forms]![frmStatsSemaine]![AnneeD]) And (InvDatePart(1,[Forms]![frmStatsSemaine]![SemaineD],[Forms]![frmStatsSemaine]![AnneeD])+13)) AND ((rqyQtéCap.[Statut des OF]) Like "*" & [Formulaires]![frmStatsSemaine]![txtStatut] & "*") AND ((rqyQtéCap.idCAP) Like "*" & [Formulaires]![frmStatsSemaine]![cmbCAP] & "*") AND ((rqyQtéCap.idIPU) Like "*" & [Formulaires]![frmStatsSemaine]![cmbIPU] & "*") AND ((rqyQtéCap.idClient) Like "*" & [Formulaires]![frmStatsSemaine]![cmbClient] & "*") AND ((rqyQtéCap.idArticle) Like "*" & [Formulaires]![frmStatsSemaine]![cmbCodeArticle] & "*") AND ((rqyQtéCap.Retard) ='Pas Retard'))
ORDER BY rqyQtéCap.[Dte Fin Prévue];"
 
Case 3
chSQL = "PARAMETERS [Forms]![frmStatsSemaine]![SemaineD] Value, [Forms]![frmStatsSemaine]![AnneeD] Value;
SELECT rqyQtéCap.[Dte Fin Prévue], rqyQtéCap.DteCarnetCdeXLS, rqyQtéCap.Qté, rqyQtéCap.[Statut des OF], NumSemaine([DteCarnetCdeXLS]) AS Semaine, rqyQtéCap.idCAP, rqyQtéCap.CAP, rqyQtéCap.idIPU, rqyQtéCap.idClient, rqyQtéCap.Client, rqyQtéCap.idArticle, rqyQtéCap.[Code Article], rqyQtéCap.Désignation, rqyQtéCap.[Dte Ddée EXW], rqyQtéCap.[Dte expédition modifiée], rqyQtéCap.Retard, rqyQtéCap.[Magasin expedition], rqyQtéCap.[Point expedition], rqyQtéCap.OV, rqyQtéCap.OF
FROM rqyQtéCap
WHERE (((rqyQtéCap.DteCarnetCdeXLS) Between InvDatePart(1,[Forms]![frmStatsSemaine]![SemaineD],[Forms]![frmStatsSemaine]![AnneeD]) And (InvDatePart(1,[Forms]![frmStatsSemaine]![SemaineD],[Forms]![frmStatsSemaine]![AnneeD])+13)) AND ((rqyQtéCap.[Statut des OF]) Like "*" & [Formulaires]![frmStatsSemaine]![txtStatut] & "*") AND ((rqyQtéCap.idCAP) Like "*" & [Formulaires]![frmStatsSemaine]![cmbCAP] & "*") AND ((rqyQtéCap.idIPU) Like "*" & [Formulaires]![frmStatsSemaine]![cmbIPU] & "*") AND ((rqyQtéCap.idClient) Like "*" & [Formulaires]![frmStatsSemaine]![cmbClient] & "*") AND ((rqyQtéCap.idArticle) Like "*" & [Formulaires]![frmStatsSemaine]![cmbCodeArticle] & "*") AND ((rqyQtéCap.Retard) Is Not Null))
ORDER BY rqyQtéCap.[Dte Fin Prévue];"
 
Case 4
chSQL = "PARAMETERS [Forms]![frmStatsSemaine]![SemaineD] Value, [Forms]![frmStatsSemaine]![AnneeD] Value;
SELECT rqyQtéCap.[Dte Fin Prévue], rqyQtéCap.DteCarnetCdeXLS, rqyQtéCap.Qté, rqyQtéCap.[Statut des OF], NumSemaine([DteCarnetCdeXLS]) AS Semaine, rqyQtéCap.idCAP, rqyQtéCap.CAP, rqyQtéCap.idIPU, rqyQtéCap.idClient, rqyQtéCap.Client, rqyQtéCap.idArticle, rqyQtéCap.[Code Article], rqyQtéCap.Désignation, rqyQtéCap.[Dte Ddée EXW], rqyQtéCap.[Dte expédition modifiée], rqyQtéCap.Retard, rqyQtéCap.[Magasin expedition], rqyQtéCap.[Point expedition], rqyQtéCap.OV, rqyQtéCap.OF
FROM rqyQtéCap
WHERE (((rqyQtéCap.DteCarnetCdeXLS) Between InvDatePart(1,[Forms]![frmStatsSemaine]![SemaineD],[Forms]![frmStatsSemaine]![AnneeD]) And (InvDatePart(1,[Forms]![frmStatsSemaine]![SemaineD],[Forms]![frmStatsSemaine]![AnneeD])+13)) AND ((rqyQtéCap.[Statut des OF]) Like "*" & [Formulaires]![frmStatsSemaine]![txtStatut] & "*") AND ((rqyQtéCap.idCAP) Like "*" & [Formulaires]![frmStatsSemaine]![cmbCAP] & "*") AND ((rqyQtéCap.idIPU) Like "*" & [Formulaires]![frmStatsSemaine]![cmbIPU] & "*") AND ((rqyQtéCap.idClient) Like "*" & [Formulaires]![frmStatsSemaine]![cmbClient] & "*") AND ((rqyQtéCap.idArticle) Like "*" & [Formulaires]![frmStatsSemaine]![cmbCodeArticle] & "*") AND ((rqyQtéCap.Retard) Is Null))
ORDER BY rqyQtéCap.[Dte Fin Prévue];"
End Select
 
bds.QueryDefs.Delete "rqyQtéCapTotal"
Set dfr = bds.CreateQueryDef("rqyQtéCapTotal", chSQL)
 
 
Me.Requery
Me.Refresh
End Sub
Ca doit fonctionner même si ce n'est pas très élégant ...
Bcdt
fbtsra est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 27/07/2011, 15h37   #11
Membre habitué
 
Homme Christian Roignot
Logisticien
Inscription : janvier 2009
Messages : 308
Détails du profil
Informations personnelles :
Nom : Homme Christian Roignot
Âge : 59
Localisation : France

Informations professionnelles :
Activité : Logisticien
Secteur : Industrie

Informations forums :
Inscription : janvier 2009
Messages : 308
Points : 112
Points : 112
Je l'avais fait ce matin.
Cela n'a pas fonctionné à cause du formulaire qui était actif, et que celui-ci est en rapport avec la requête à modifier.

Voilà ce que j'avais fait:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
 
Public Sub RefreshQuery()
    Dim IDEFIX As DAO.Database
    Dim sql As String, sql1 As String
    Dim maReq As DAO.QueryDef
    Dim sNomRQ As String, ClauseAND As String
 
 
    Set IDEFIX = CurrentDb
    'Constituer le nom de la nouvelle requête
    sNomRQ = "rqyQtéCapTotal"
    'construction de la nouvelle requête
    sql = "PARAMETERS [Forms]![frmStatsSemaine]![SemaineD] Value, [Forms]![frmStatsSemaine]![AnneeD] Value;"
    sql = sql & " SELECT rqyQtéCap.[Dte Fin Prévue], rqyQtéCap.DteCarnetCdeXLS, rqyQtéCap.Qté, rqyQtéCap.[Statut des OF],"
    sql = sql & " NumSemaine([DteCarnetCdeXLS]) AS Semaine, rqyQtéCap.idCAP, rqyQtéCap.CAP, rqyQtéCap.idIPU,"
    sql = sql & " rqyQtéCap.idClient, rqyQtéCap.Client, rqyQtéCap.idArticle, rqyQtéCap.[Code Article],"
    sql = sql & " rqyQtéCap.Désignation, rqyQtéCap.[Dte Ddée EXW], rqyQtéCap.[Dte expédition modifiée], rqyQtéCap.Retard,"
    sql = sql & " rqyQtéCap.[Magasin expedition], rqyQtéCap.[Point expedition], rqyQtéCap.OV, rqyQtéCap.OF"
    sql = sql & " FROM rqyQtéCap"
    sql = sql & " WHERE ((rqyQtéCap.DteCarnetCdeXLS) Between InvDatePart(1,[Forms]![frmStatsSemaine]![SemaineD],"
    sql = sql & " [Forms]![frmStatsSemaine]![AnneeD]) And (InvDatePart(1,[Forms]![frmStatsSemaine]![SemaineD],"
    sql = sql & " [Forms]![frmStatsSemaine]![AnneeD])+13))"
 
    Select Case Me.gprStatutOF
    Case 1
    ClauseAND = ClauseAND & " AND [Statut des OF] = '" & "livrée" & "' "
    Case 2
    ClauseAND = ClauseAND & " And [Statut des OF] = '" & "non livrée" & "' "
    Case 3
    ClauseAND = ClauseAND & " And [Statut des OF] is null"
    Case 4
    ClauseAND = ClauseAND & " And [Statut des OF] is null or is not null"
    End Select
 
    ClauseAND = ClauseAND & " AND [idCAP] Like '" & Me.cmbCAP & "' "
    ClauseAND = ClauseAND & " AND [idIPU] Like '" & Me.cmbIPU & "' "
    ClauseAND = ClauseAND & " AND [idClient] Like '" & Me.cmbClient & "' "
    ClauseAND = ClauseAND & " AND [idArticle] Like '" & Me.cmbCodeArticle & "' "
 
    Select Case Me.grpRetard
    Case 1
    ClauseAND = ClauseAND & " AND [Retard] like '" & "Retard" & "' "
    Case 2
    ClauseAND = ClauseAND & " AND [Retard] like '" & "Pas retard" & "' "
    Case 3
    ClauseAND = ClauseAND & " AND [Retard] is null"
    Case 4
    ClauseAND = ClauseAND & " AND [Retard] is null or is not null"
    End Select
    If Len(ClauseAND) = 0 Then
        GoTo AménagerLaQueueDuSQL
    Else
        sql = sql & ClauseAND
    End If
 
AménagerLaQueueDuSQL:
    sql = sql & " ORDER BY rqyQtéCap.[Dte Fin Prévue];"
    Debug.Print sql
    'supprime la raquête si elle existe
    If ExistQuery(sNomRQ) Then DoCmd.DeleteObject acQuery, sNomRQ
 
    Set maReq = IDEFIX.CreateQueryDef(sNomRQ, sql)
 
    DoCmd.OpenQuery sNomRQ, acViewNormal, acReadOnly
 
End Sub
Et l'utilitaire:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
Public Function ExistQuery(ByVal str As String) As Boolean
On Error GoTo Err_
Dim qry As QueryDef
 
ExistQuery = False
For Each qry In CurrentDb.QueryDefs
    If qry.Name = str Then
        ExistQuery = True
        Exit Function
    End If
Next qry
Exit_:
    Exit Function
Err_:
    MsgBox Err.Description, vbCritical, "ERREUR dans ExistQuery"
    Resume Exit_
End Function
Il vas falloir que je revoie le formulaire..
Dans le cahier des charges il fallait ce critère..
C'est pas simple
rch05 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2011, 16h03   #12
Membre confirmé
 
Homme
Chercheur
Inscription : juin 2011
Messages : 150
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Tarn (Midi Pyrénées)

Informations professionnelles :
Activité : Chercheur
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : juin 2011
Messages : 150
Points : 231
Points : 231
Je ne vois pas pourquoi ca ne fonctionne pas :

Citation:
Cela n'a pas fonctionné à cause du formulaire qui était actif, et que celui-ci est en rapport avec la requête à modifier.
Quel rapport reste t il ? Ne pouvez vous pas supprimer le lien en initialisant la source du formulaire par exemple (si la requête 3 se lance par là) avant le lancer le code d'un des deux précédents messages ?

Bcdt
fbtsra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2011, 16h29   #13
Membre habitué
 
Homme Christian Roignot
Logisticien
Inscription : janvier 2009
Messages : 308
Détails du profil
Informations personnelles :
Nom : Homme Christian Roignot
Âge : 59
Localisation : France

Informations professionnelles :
Activité : Logisticien
Secteur : Industrie

Informations forums :
Inscription : janvier 2009
Messages : 308
Points : 112
Points : 112
je pense avoir trouvé, mais j'ai une erreur de syntaxe à ce niveau:
Code :
1
2
 
chSQL = chSQL & " WHERE ((rqyQtéCap.DteCarnetCdeXLS) Between InvDatePart(1,[Forms]![frmStatsSemaine]![SemaineD],[Forms]![frmStatsSemaine]![AnneeD]) And (InvDatePart(1,[Forms]![frmStatsSemaine]![SemaineD],[Forms]![frmStatsSemaine]![AnneeD])+13))"
je dois m'absenter (les réunionnites..).
Je regarderai ce soir et vous tiens au courant.

Merci de l'aide

Bonne soirée
Cdt
rch05 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2011, 16h41   #14
Membre confirmé
 
Homme
Chercheur
Inscription : juin 2011
Messages : 150
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Tarn (Midi Pyrénées)

Informations professionnelles :
Activité : Chercheur
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : juin 2011
Messages : 150
Points : 231
Points : 231
Essayez :

Code :
chSQL = chSQL & " WHERE ((rqyQtéCap.DteCarnetCdeXLS) Between InvDatePart(1," & [Forms]![frmStatsSemaine]![SemaineD] & "," & [Forms]![frmStatsSemaine]![AnneeD] & ") And (InvDatePart(1," & [Forms]![frmStatsSemaine]![SemaineD] & "," & [Forms]![frmStatsSemaine]![AnneeD])+13 & "))"
Bonne soirée studieuse ...

Bcdt
fbtsra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2011, 08h35   #15
Membre habitué
 
Homme Christian Roignot
Logisticien
Inscription : janvier 2009
Messages : 308
Détails du profil
Informations personnelles :
Nom : Homme Christian Roignot
Âge : 59
Localisation : France

Informations professionnelles :
Activité : Logisticien
Secteur : Industrie

Informations forums :
Inscription : janvier 2009
Messages : 308
Points : 112
Points : 112
Bonjour fbtsra,

J'ai essayé votre modif et j'ai toujours "erreur de syntax".
J'ai revue le code, et j'ai maintenant "erreur de syntax(opérateur absent) dans l'instruction suivante:
Code :
1
2
3
4
5
6
7
 
chSQL = chSQL & " WHERE ((rqyQtéCap.DteCarnetCdeXLS) Between InvDatePart(1,[Forms]![frmStatsSemaine]![SemaineD],[Forms]![frmStatsSemaine]![AnneeD]) And (InvDatePart(1,[Forms]![frmStatsSemaine]![SemaineD],[Forms]![frmStatsSemaine]![AnneeD])+13))"
chSQL = chSQL & " AND [idCAP] Like = '" & Me.cmbCAP & "' "
chSQL = chSQL & " AND [idIPU] Like =  '" & Me.cmbIPU & "' "
chSQL = chSQL & " AND [idClient] Like = '" & Me.cmbClient & "' "
chSQL = chSQL & " AND [idArticle] Like = '" & Me.cmbCodeArticle & "' "
chSQL = chSQL & " AND [Retard] = 'Pas retard'"
J'ai le nez depuis 2 heures dessus, et je ne vois pas!!!
Peut-être dans la fonction "BETWEEN", et là ???
J'ai des exemples avec cette fonction qui ne m'aident pas.

cdt
Christian
rch05 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2011, 08h58   #16
Membre confirmé
 
Homme
Chercheur
Inscription : juin 2011
Messages : 150
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Tarn (Midi Pyrénées)

Informations professionnelles :
Activité : Chercheur
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : juin 2011
Messages : 150
Points : 231
Points : 231
Bonjour,

Il y a doublon dans les opérateurs "like" et "=" ... il faut choisir entre les deux !

Bcdt
fbtsra est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 28/07/2011, 11h28   #17
Membre habitué
 
Homme Christian Roignot
Logisticien
Inscription : janvier 2009
Messages : 308
Détails du profil
Informations personnelles :
Nom : Homme Christian Roignot
Âge : 59
Localisation : France

Informations professionnelles :
Activité : Logisticien
Secteur : Industrie

Informations forums :
Inscription : janvier 2009
Messages : 308
Points : 112
Points : 112
Re,

Vous avez raison, et j'avais l'erreur devant les yeux

Par contre, il faut que revoie tout le code de ce formulaire.
En effet, j'ai plusieurs critères et de cette manière le filtre ne s'effectue pas.

je ne vais pas clore cette discussion, car je ne sais pas si les critères des "Retard" sont justes.
Je vous tiendrai informé de cette modification, demain ou lundi.
Merci de votre aide

Cdt
Christian
rch05 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 09h13   #18
Membre habitué
 
Homme Christian Roignot
Logisticien
Inscription : janvier 2009
Messages : 308
Détails du profil
Informations personnelles :
Nom : Homme Christian Roignot
Âge : 59
Localisation : France

Informations professionnelles :
Activité : Logisticien
Secteur : Industrie

Informations forums :
Inscription : janvier 2009
Messages : 308
Points : 112
Points : 112
Bonjour fbtsra,

Voila, tout est OK concernant le changement des critères.
La requête "rqyQtéCapTotal" est bien changé avec les nouveaux critères.

Mais, maintenant c'est le sous-formulaire qui ne se rafraichi pas. A chaque changement de critère, j'ai les mêmes enregistrements.

J'ai essayé avec la syntaxe suivante:
Code :
1
2
3
4
5
6
7
8
9
 
'supprime la raquête si elle existe
    If ExistQuery(sNomRQ) Then DoCmd.DeleteObject acQuery, sNomRQ
    'créer la nouvelle requête
    Set maReq = IDEFIX.CreateQueryDef(sNomRQ, sql)
 
    'Rafaichi le sous-formulaire
    Me.sfrmStatsSemaine.Form.Requery
    Me.sfrmStatsSemaine.Form.Refresh
puis celle-ci:
Code :
1
2
3
4
5
6
7
8
9
 
    'supprime la raquête si elle existe
    If ExistQuery(sNomRQ) Then DoCmd.DeleteObject acQuery, sNomRQ
    'créer la nouvelle requête
    Set maReq = IDEFIX.CreateQueryDef(sNomRQ, sql)
 
    'Exécute la nouvelle requête
    Set qry = CurrentDb.QueryDefs("rqyQtéCapTotal")
    qry.Execute
et là, j'ai l'erreur "Impossible d'exécuter une requête sélection"

Mon souci était comment je devais exécuter la requête "rqyQtéCapTotal" et la requête suivante qui est la source de mon sous-formulaire...

Donc, j'ai crée une requête annalyse croisée en VBA et rafraichir le sous_formulaire.
J'ai maintenant les enregistrements correspondants aux critères.
Je ne sais si le code est jolie, mais il fonctionne.
Ci-dessous le code complet qui pourra servir à quelqu'un.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
 
Public Sub RefreshQuery()
    Dim IDEFIX As DAO.Database
    Dim sql As String, sql1 As String
    Dim maReq As DAO.QueryDef
    Dim qry As DAO.QueryDef
    Dim sNomRQ As String, ClauseAND As String
 
 
    Set IDEFIX = CurrentDb
 
    'Constituer le nom de la nouvelle requête
    sNomRQ = "rqyQtéCapTotal"
    'construction de la nouvelle requête
    sql = "PARAMETERS [Forms]![frmStatsSemaine]![SemaineD] Value, [Forms]![frmStatsSemaine]![AnneeD] Value;"
    sql = sql & " SELECT rqyQtéCap.[Dte Fin Prévue], rqyQtéCap.DteCarnetCdeXLS, rqyQtéCap.Qté, rqyQtéCap.[Statut des OF],"
    sql = sql & " NumSemaine([DteCarnetCdeXLS]) AS Semaine, rqyQtéCap.idCAP, rqyQtéCap.CAP, rqyQtéCap.idIPU,"
    sql = sql & " rqyQtéCap.idClient, rqyQtéCap.Client, rqyQtéCap.idArticle, rqyQtéCap.[Code Article],"
    sql = sql & " rqyQtéCap.Désignation, rqyQtéCap.[Dte Ddée EXW], rqyQtéCap.[Dte expédition modifiée], rqyQtéCap.Retard,"
    sql = sql & " rqyQtéCap.[Magasin expedition], rqyQtéCap.[Point expedition], rqyQtéCap.OV, rqyQtéCap.OF"
    sql = sql & " FROM rqyQtéCap"
    sql = sql & " WHERE ((rqyQtéCap.DteCarnetCdeXLS) Between InvDatePart(1,[Forms]![frmStatsSemaine]![SemaineD],"
    sql = sql & " [Forms]![frmStatsSemaine]![AnneeD]) And (InvDatePart(1,[Forms]![frmStatsSemaine]![SemaineD],"
    sql = sql & " [Forms]![frmStatsSemaine]![AnneeD])+13))"
 
    Select Case Me.gprStatutOF
    Case 1
    ClauseAND = ClauseAND & " AND [Statut des OF] = '" & "livrée" & "' "
    Case 2
    ClauseAND = ClauseAND & " And [Statut des OF] = '" & "non livrée" & "' "
    Case 3
    ClauseAND = ClauseAND & " And [Statut des OF] is null"
    Case 4
    ClauseAND = ClauseAND & " And [Statut des OF] is null or is not null"
    End Select
 
    If Not Me.chkCAP Then
        ClauseAND = ClauseAND & " AND idCAP like '*" & Me.cmbCAP & "*' "
    End If
    If Not Me.chkIPU Then
        ClauseAND = ClauseAND & " AND idIPU like '*" & Me.cmbIPU & "*' "
    End If
    If Not Me.chkClient Then
        ClauseAND = ClauseAND & " AND idClient like '*" & Me.cmbClient & "*' "
    End If
    If Not Me.chkCdeArticle Then
        ClauseAND = ClauseAND & " AND idArticle like '*" & Me.cmbCodeArticle & "*' "
    End If
 
    Select Case Me.grpRetard
    Case 1
    ClauseAND = ClauseAND & " AND [Retard] like '" & "Retard" & "' "
    Case 2
    ClauseAND = ClauseAND & " AND [Retard] like '" & "Pas retard" & "' "
    Case 3
    ClauseAND = ClauseAND & " AND [Retard] is not null "
    Case 4
    ClauseAND = ClauseAND & " AND [Retard] is null or is not null"
    End Select
    If Len(ClauseAND) = 0 Then
        GoTo AménagerLaQueueDuSQL
    Else
        sql = sql & ClauseAND
    End If
 
AménagerLaQueueDuSQL:
    sql = sql & " ORDER BY rqyQtéCap.[Dte Fin Prévue];"
 
 
    'supprime la raquête si elle existe
    If ExistQuery(sNomRQ) Then DoCmd.DeleteObject acQuery, sNomRQ
    'créer la nouvelle requête
    Set maReq = IDEFIX.CreateQueryDef(sNomRQ, sql)
 
    'Requete analyse croisé pour le sous_formulaire
    sql = " TRANSFORM nz(Sum(rqyQtéCapTotal.Qté),0) AS SommeDeQté"
    sql = sql & " SELECT rqyQtéCapTotal.[Dte Fin Prévue]"
    sql = sql & " FROM rqyQtéCapTotal"
    sql = sql & " GROUP BY rqyQtéCapTotal.[Dte Fin Prévue]"
    sql = sql & " ORDER BY DateDiff('d',InvDatePart(1,[Forms]![frmStatsSemaine]![SemaineD],[Forms]![frmStatsSemaine]![AnneeD]),[DteCarnetCdeXLS])+1"
    sql = sql & " PIVOT DateDiff('d',InvDatePart(1,[Forms]![frmStatsSemaine]![SemaineD],[Forms]![frmStatsSemaine]![AnneeD]),[DteCarnetCdeXLS])+1 In (1,2,3,4,5,6,7,8,9,10,11,12,13,14);"
    Debug.Print sql
 
 
    'Rafaichi le sous-formulaire
    Me.sfrmStatsSemaine.Form.RecordSource = sql
    Me.sfrmStatsSemaine.Form.Refresh
 
End Sub
Si il y des modification à effectuer sur ce code, je suis preneur.

Un grand merci de ton aide.
Cdt
Christian
rch05 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2011, 09h59   #19
Membre confirmé
 
Homme
Chercheur
Inscription : juin 2011
Messages : 150
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Tarn (Midi Pyrénées)

Informations professionnelles :
Activité : Chercheur
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : juin 2011
Messages : 150
Points : 231
Points : 231
Bonjour Christian,

Je ne vois rien à redire à ton code (mais je ne suis pas expert ...), concernant la syntaxe sql :

-
Code :
 ClauseAND = ClauseAND & " AND [Statut des OF] = '" & "livrée" & "' "
peut être simplifié par :

Code :
 ClauseAND = ClauseAND & " AND [Statut des OF] = 'livrée'"
C'est du détail mais ça peut éviter des erreurs ! (idem pour [retard])

Par contre je suis surpris que cette clause fonctionne :

Code :
 ClauseAND = ClauseAND & " And [Statut des OF] is null or is not null"
car je la verrai plutôt sous la forme :

Code :
 ClauseAND = ClauseAND & " And ([Statut des OF] is null or [Statut des OF] is not null)"
(idem pour [retard])

Mais bon, si ca fonctionne ...

Je suis ravi d'avoir pu t'aider.
Bonne continuation,
Bcdt
fbtsra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2011, 13h25   #20
Membre habitué
 
Homme Christian Roignot
Logisticien
Inscription : janvier 2009
Messages : 308
Détails du profil
Informations personnelles :
Nom : Homme Christian Roignot
Âge : 59
Localisation : France

Informations professionnelles :
Activité : Logisticien
Secteur : Industrie

Informations forums :
Inscription : janvier 2009
Messages : 308
Points : 112
Points : 112
Bonjour fbtsra,

Tu as raison concernant le code suivant:
Code :
1
2
 
ClauseAND = ClauseAND & " And [Statut des OF] is null or is not null"
Je m'en suis aperçu le lendemain et j'ai omis de le rectifier sur le site.
J’ai pris note pour le reste.
Merci et bonne continuation
A bientôt sur le site
Christian
rch05 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h10.


 
 
 
 
Partenaires

Hébergement Web