VBA / Access - Condition dans un sous-état ?

Résolu/Fermé
Towers Messages postés 37 Date d'inscription samedi 2 février 2008 Statut Membre Dernière intervention 10 mai 2012 - 30 juil. 2008 à 09:28
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 - 30 juil. 2008 à 12:10
Bonjour,

j'ai un état "Etat1" qui affiche des informations sur différents métiers.
J'affiche les numéros de métiers dans txtMetier de "Etat1", ça ça marche !

J'ai un sous-état "sseta_Etat2" (à parir de l'état Etat2) : ce sous-état se base sur une requête dans la quelle il récupère le numéro de métier et calcule les rendements associés. Ca ça marche aussi.

Je vous montre ma requête (stockée dans la requête Access "Requête2" : "Etat2" réfère à "Requête2")

SELECT RQT.dateRendements, RQT.numMetier, RQT.refCampagne, RQT.refArticle, RQT.descriptionArticle, RQT.rendementA, RQT.rendementB, RQT.rendementC, RQT.rendementD, RQT.rendementE, RQT.rendementM
FROM rqt_Rdmts_Details AS RQT
WHERE (((RQT.numMetier)=États!Etat1!txtMetier));

En réalité j'aimerais que dans ce sous-état, on n'affiche que les rendements du jour demandé, donc en gros il faudrait que je rajoute une condition (genre condition Where).
Comment puis-je faire pour récupérer la date (elle est stockée dans une variable laDate As Date lors de l'appel de la propriété "Etat1" : "Report_Open()", et cette date est également stockée dans un champ de "Etat1" ("champDate").

A quel endroit puis-je rajouter la conditiion sur la date ?

Merci de votre aide, j'ai regardé les aides sur les états mais aucune n'indique comment rajouter une condition dans un sous-état.

4 réponses

Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 384
30 juil. 2008 à 11:53
Bonjour Towers,

Sorry, pas bien lu ton code, pourquoi tu ne changes pas tout simplement ta requête Requête2 dans le gestionnaire des requêtes d'Access en éditant directement le code SQL afin de rajouter la condition AND dateRendements >= a la valeur de champDate.

A plus
1
Towers Messages postés 37 Date d'inscription samedi 2 février 2008 Statut Membre Dernière intervention 10 mai 2012 3
30 juil. 2008 à 12:06
Merci christounet !

Dans Etat2 : Report_Open()

Dim qdf As QueryDef
Dim nomQdf As String
nomQdf = "requête4"

Set qdf = CurrentDb.QueryDefs(nomQdf)
qdf.SQL = _
    "SELECT RQT.dateRendements, RQT.numMetier, " & _
    "RQT.refCampagne, RQT.refArticle, RQT.descriptionArticle, " & _
    "RQT.rendementA, RQT.rendementB, RQT.rendementC, " & _
    "RQT.rendementD, RQT.rendementE, RQT.rendementM " & _
    "FROM rqt_Rdmts_Details AS RQT " & _
    "WHERE RQT.numMetier = [États]![Etat1]![txtMetier] " & _
    "AND RQT.dateRendements >= " & s & ";"

qdf.Close

Ainsi je ne touche plus à RecordSource mais j'agis directement sur la requête, ce qui ne pose pas de problème...
Merci encore (j'aurais spurement d'autres problèmes mais m'avoir aidé là-dessu, ça m'enlève une sacré épine du pied), il me reste à régler encore d'autres soucis mais c'est secondaire à mon avis.
0
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 384 > Towers Messages postés 37 Date d'inscription samedi 2 février 2008 Statut Membre Dernière intervention 10 mai 2012
30 juil. 2008 à 12:10
De rien Towers, n'oublie pas de mettre ton problème comme résolu. Si tu as d'autres problèmes n'hésite pas CCM est fait pour s'entraider.

A plus
0
Towers Messages postés 37 Date d'inscription samedi 2 février 2008 Statut Membre Dernière intervention 10 mai 2012 3
30 juil. 2008 à 10:32
Re-bonjour (Up !)

J'en profite pour vous dire ce que j'ai essayé de faire entre temps :
- j'ai essayé dans la fonction "Report_Open()" de "Etat1", d'utiliser les propriétés de "sseta_Etat2" : Filter et FilterOn.

Malheureusement ça ne marche pas.
je vous montre les filtre que je fait (pour l'instant ils sont simpplifiés volontairement)

Tentative 1 :
Reports![Etat2].Filter = "[dateRendements] >= #2008/07/27#"
Reports![Etat2].FilterOn = True

Tentative 2 :
Me.sseta_Etat2.Report.Filter = "Format([dateRendements],""yyyy/mm/dd"") >= #2008/07/27#"
Me.sseta_Etat2.Report.FilterOn = True

Tentative 3 :
Reports![Etat2].Filter = "Format([dateRendements],""yyyy/mm/dd"") >= #2008/07/27#"
Reports![Etat2].FilterOn = True

Tentative 4 :
Me.sseta_Etat2.Report.Filter = "[dateRendements] >= #2008/07/27#"
Me.sseta_Etat2.Report.FilterOn = True


Quand je fais ce qui me semble le plus logique, c'est-à-dire passer par
Me.sseta_Etat2.Report.Filter [CODE]

Alors:
Erreur d'exécution '2455' : La référence d'une expression à lapropriété Form/Report n'est pas valide

En revanche quand je passe par
Reports![Etat2].Filter = [CODE]
alors :
Erreur d'exécution '2451' : Le nom d'état 'Etat2' entré dans votre expression est mal orthographié ou fait référence à un état qui n'est pas ouvert ou qui n'existe pas


Merci de me donner un coup de main !!!
0
talrashha Messages postés 7 Date d'inscription vendredi 25 juillet 2008 Statut Membre Dernière intervention 27 août 2008
30 juil. 2008 à 10:42
Salut,

Je ne suis pas un pro des états, mais si tu veut rajouter une clause where de type date, cela donnerai :

'Code à placer au chargement du sous-état :

Dim s as string
dim d as string

'on récupere la date en question
d=Reports![Etat1]![champDate].Value

'on la convertie dans le format correct
s="#" & mid(d, 4, 2) & "/" & mid(d, 1, 2) & "/" & mid(d, 7, 4) & "#"

etat2.recordSource = "SELECT RQT.dateRendements, RQT.numMetier, RQT.refCampagne, RQT.refArticle, RQT.descriptionArticle, RQT.rendementA, RQT.rendementB, RQT.rendementC, RQT.rendementD, RQT.rendementE, RQT.rendementM
FROM rqt_Rdmts_Details AS RQT
WHERE (((RQT.numMetier)=États!Etat1!txtMetier))
AND RQT.MaDate=" & d

(Reste à vérifier le nom des champs et surtout si la propriété etat2.recordsource existe :))
0
Towers Messages postés 37 Date d'inscription samedi 2 février 2008 Statut Membre Dernière intervention 10 mai 2012 3
30 juil. 2008 à 11:09
Déjà merci de ta réponse talrashha,

ensuite j'ai essayé ta méthode, en simplifiant les données pour ne pas tout tester en un seul coup.
Le problème est que je ne peut pas modifier la propriété Recordset de "Etat2" lorsque celui-ci a été ouvert :
Mon message issu du gestionnaire d'erreurs :
Erreur 2191 pendant le chargement de "Etat2" : Impossible de définir la propriété Source
en mode Aperçu avant impression ou après le début de l'impression

Si j'enlève le gestionnaire d'erreur alors VBA bloque sur la ligne "Me.RecordSDource = ..."

Ce qui me semble étonnant c'est que je n'ai pas cette erreur lors de l'ouverture de "Etat1" alors que dans "Etat1" : "Report_Open()", j'ai la ligne : Me.RecordSource = strSQL

Pour indication, voici mon code qui plante

Private Sub Report_Open(Cancel As Integer)
On Error GoTo Err_Report_Open

'Code à placer au chargement du sous-état :
Dim s As String
Dim d As String

'Pour simplifier, on ne récupère pas encore la date :
s = "#2008/07/28#"

Me.RecordSource = "SELECT RQT.dateRendements, RQT.numMetier, " & _
    "RQT.refCampagne, RQT.refArticle, RQT.descriptionArticle, " & _
    "RQT.rendementA, RQT.rendementB, RQT.rendementC, " & _
    "RQT.rendementD, RQT.rendementE, RQT.rendementM " & _
    "FROM rqt_Rdmts_Details AS RQT " & _
    "WHERE RQT.numMetier = [États]![Etat1]![txtMetier] " & _
    ";"
    '"AND RQT.dateRendements >= " & s & ";"

Exit_Report_Open:
    Exit Sub
Err_Report_Open:
    MsgBox "Erreur " & err.Number & _
    " pendant le chargement de ""Etat2"" : " & err.Description
    Resume Exit_Report_Open
End Sub
0
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 384
30 juil. 2008 à 11:27
Bonjour Towers

Dans ton code, tu as un ; de trop entre la condition WHERE et la condition AND
Me.RecordSource = "SELECT RQT.dateRendements, RQT.numMetier, " & _
    "RQT.refCampagne, RQT.refArticle, RQT.descriptionArticle, " & _
    "RQT.rendementA, RQT.rendementB, RQT.rendementC, " & _
    "RQT.rendementD, RQT.rendementE, RQT.rendementM " & _
    "FROM rqt_Rdmts_Details AS RQT " & _
    "WHERE RQT.numMetier = [États]![Etat1]![txtMetier] " & _
    "AND RQT.dateRendements >= " & s & ";"

Cela peut-être la raison de ton erreur.

A plus
0
Towers Messages postés 37 Date d'inscription samedi 2 février 2008 Statut Membre Dernière intervention 10 mai 2012 3
30 juil. 2008 à 11:29
Non si tu regarde bien mon code j'ai mis un apostrophe ' au début de la ligne dont tu parle, pour justement ne pas avoir une requête SQL simpliste et m'occuper uniquement du problème de l'écriture dans "Recordset"
0