[VBA] GROS PROBLEME !! help plz
Résoluyg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention -
Voilà mon problème, je possède un formulaire contenant 4 listes déroulantes. Chacune est renseigné selon une requête. C'est listes sont aussi liées entre elles. C'est en fait un formulaire de recherche poussé. L'utilisateur choisi ses critères et lorsqu'il clique sur le bouton Édition, selon les critère choisi un certains nombres de couches géographiques doivent s'affichaient dans un état.
Problème : Comment récupérer les critères choisi par l'utilisateur et comment envoyer les informations filtrées à l'état ??? Existe t il un moyen de changer la source d'un état depuis un bouton d'un formulaire ???? SVP aidez moi c'est très important !!!!!!
--
0nïzuk@ + K@k@shï ===== 0nïshï
Configuration: Windows XP Firefox 2.0.0.14
- [VBA] GROS PROBLEME !! help plz
- Excel compter cellule couleur sans vba - Guide
- Incompatibilité de type vba ✓ - Forum VB / VBA
- Vba range avec variable ✓ - Forum VB / VBA
- Vba inputbox - Astuces et Solutions
- Vba find - Astuces et Solutions
23 réponses
- 1
- 2
La problématique porte sur la récupération des critères choisis par l'utilisateur dans quatre listes déroulantes et la transmission de ces filtres à un rapport généré à partir d'un formulaire Access. L'approche consiste à utiliser DoCmd.OpenReport avec une clause WHERE pour passer les critères filtrés et adapter dynamiquement la requête source de l'état depuis le formulaire. En cas d'erreurs liées à des champs multiples ou à des collisions de tables, il peut être nécessaire de construire la condition WHERE dans la requête ou d'éviter l'usage de sqlfiltre lors de l'ouverture. Pour éviter l'ambiguïté liée à ID_GEOBASE, privilégier une approche ciblée sur un seul champ et tester les filtres directement dans les contrôles du formulaire.
DoCmd.OpenReport
sqlfiltre = " ID_THEME ='" + V_ID_THEME +"') "
sqlfiltre = sqlfiltre + " and " ID_S_THEME ='" + V_ID_S_THEME +"') " 'ainsi de suite
DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview, ,
sqlfiltre = V_ID_GEOBASE_EMPL & Chr(13) & V_ID_THEME & Chr(13) & V_ID_S_THEME & Chr(13) & V_ID_SS_THEME & Chr(13) & V_ID_GEOBASE_INS & Chr(13) & V_SERVICE_NOM & Chr(13) & V_ID_AGENT
DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview, , sqlfiltre
mais quand je clique sur le bouton il me dis que mon ID_GEOBASE peut désigner plusieurs tables listées dans la clause FROM de mon instruction SQL, pourtant elle est comme ça :
SELECT T_COUCHE_GEO.*, T_GEOBASE.*, T_THEMATIQUE.ID_THEME
FROM T_COUCHE_GEO, T_GEOBASE, T_THEMATIQUE
WHERE (((T_COUCHE_GEO.ID_GEOBASE)=[T_GEOBASE].[ID_GEOBASE]) AND ((T_COUCHE_GEO.ID_THEME)=[T_THEMATIQUE].[ID_THEME]));
Il y a bien une table devant chaque ID_GEOBASE nan ?
Il faut aussi mettre les noms des tables dans sqlfiltre...
sqlfiltre = '" ID_GEOBASE ='" + V_ID_GEOBASE_EMPL + "' & '" ID_THEME ='" + V_ID_THEME + "' & '" ID_S_THEME ='" + V_ID_S_THEME + "' & '" ID_S_THEME ='" + V_ID_SS_THEME + "' & '" ID_GEOBASE ='" + V_ID_GEROBASE_INS + "' & '" SERVICE_AGENT ='" + V_SERVICE_NOM + "' & '" ID_AGENT ='" + V_ID_AGENT + "'
sqlfiltre = " ID_GEOBASE = '" + V_ID_GEOBASE_EMPL + "' and ID_THEME = '" + V_ID_THEME + "' and ID_S_THEME = '" + V_ID_S_THEME + "' and ID_S_THEME = '" + V_ID_SS_THEME + "' and ID_GEOBASE = '" + V_ID_GEROBASE_INS + "' and SERVICE_AGENT = '" + V_SERVICE_NOM + "' and ID_AGENT ='" + V_ID_AGENT + "'"
et il me surligne cette ligne (en gras) :
sqlfiltre = " ID_GEOBASE = '" + V_ID_GEOBASE_EMPL + "' and ID_THEME = '" + V_ID_THEME + "' and ID_S_THEME = '" + V_ID_S_THEME + "' and ID_S_THEME = '" + V_ID_SS_THEME + "' and ID_GEOBASE = '" + V_ID_GEROBASE_INS + "' and SERVICE_AGENT = '" + V_SERVICE_NOM + "' and ID_AGENT ='" + V_ID_AGENT + "'"
DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview, , sqlfiltre
SELECT T_COUCHE_GEO.*, T_GEOBASE.*, T_THEMATIQUE.ID_THEME
FROM T_COUCHE_GEO, T_GEOBASE, T_THEMATIQUE
WHERE T_COUCHE_GEO.ID_GEOBASE = T_GEOBASE.ID_GEOBASE
AND T_COUCHE_GEO.ID_THEME = T_THEMATIQUE.ID_THEME;
pourtant que je sache cette requête ci-dessus explique clairement d'où vient chaque ID_GEOBASE
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionSi tu veux éviter cela, il faut dans ton query qui sert de base à ton état, éviter de sélectioner des champs synonymes.
le code est comme ca sqlfiltre = " [T_GEOBASE].[ID_GEOBASE] = '" + V_ID_GEOBASE_EMPL + "' and [T_COUCHE_GEO].[ID_THEME] = '" + V_ID_THEME + "' and ID_S_THEME = '" + V_ID_S_THEME + "' and ID_S_THEME = '" + V_ID_SS_THEME + "' and [T_GEOBASE].[ID_GEOBASE] = '" + V_ID_GEROBASE_INS + "' and SERVICE_AGENT = '" + V_SERVICE_NOM + "' and ID_AGENT ='" + V_ID_AGENT + "'"
DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview, , sqlfiltre
Désolé en plus je dois partir je reprendrais ça lundi. Je sais pas si tu seras toujours là mais j'essaierais de trouver tout seul sinon. Encore merci pour ton aide ça m'a été précieux ^^
La logique suppose aussi que TOUTES les variables interviennent dans le filtre.
Il y a moyen de faire mieux, du genre :
sqlfiltre= " 0 = 0 "
if V_ID_GEOBASE_EMPL <> "" then
sqlfiltre = sqlfiltre + " and [T_GEOBASE].[ID_GEOBASE] = '" + V_ID_GEOBASE_EMPL + "' "
end if
La première, la liste LISTE_SS_THEME qui me pose un problème lors du clique du bouton afficher. En effet cette liste n'est pas forcément renseignée et donc lors de la compilation la liste retourne null.
La deuxième est une liste nommée LISTE_GEOBASE_INS, en fait elle a le même but que la liste LISTE_GEOBASE sauf que celle ci permet d'afficher des informations dans un sous état situé dans l'état....(je sais c'est vraiment compliqué comme méthode ...)
Et donc pour l'instan quand je récupère sa valeur cela m'affiche null aussi. Est ce que cela pourrait être du à la LISTE_GEOBASE qui bloqueré la LISTE_GEOBASE_INS ?
Cordialement, Onishi ^^
PS : Voici l'état de mon code pour le moment :
Option Compare Database
Private Sub BT_AFFICHER_Click()
'Déclaration des variables
Dim V_ID_GEOBASE_EMPL As String
Dim V_ID_THEME As Variant
Dim V_ID_S_THEME As Variant
Dim V_ID_SS_THEME As Variant
Dim V_ID_GEOBASE_INS As String
Dim V_SERVICE_NOM As String
Dim V_ID_AGENT As String
V_ID_GEOBASE_EMPL = F_GEOBASE_EMPL
V_ID_THEME = F_ID_THEME
V_ID_S_THEME = F_ID_S_THEME
V_ID_SS_THEME = F_ID_SS_THEME
V_ID_GEOBASE_INS = F_ID_GEOBASE_INS
V_SERVICE_NOM = LISTE_SERVICE
V_ID_AGENT = F_ID_AGENT
'DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview, , V_ID_GEOBASE_EMPL & Chr(13) & V_ID_THEME & Chr(13) & V_ID_S_THEME & Chr(13) & V_ID_SS_THEME & Chr(13) & V_ID_GEOBASE_INS & Chr(13) & V_SERVICE_NOM & Chr(13) & V_ID_AGENT
sqlfiltre = " T_GEOBASE.ID_GEOBASE = '" + V_ID_GEOBASE_EMPL + "' and T_COUCHE_GEO.ID_THEME = '" + V_ID_THEME + "' and ID_S_THEME = '" + V_ID_S_THEME + "' and ID_S_THEME = '" + V_ID_SS_THEME + "' and T_GEOBASE.ID_GEOBASE = '" + V_ID_GEROBASE_INS + "' and SERVICE_AGENT = '" + V_SERVICE_NOM + "' and ID_AGENT ='" + V_ID_AGENT + "'"
DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview, , sqlfiltre
End Sub
Private Sub BT_REINITIALISER_Click()
LISTE_GEOBASE_EMPL = ""
liste_theme = ""
liste_sous_theme = ""
liste_sous_sous_theme = ""
LISTE_GEOBASE_INS = ""
LISTE_SERVICE = ""
LISTE_NOM_AGENT = ""
End Sub
Private Sub LISTE_GEOBASE_1_AfterUpdate()
Forms![F_RECHERCHE_PAR_CRITERES]!liste_theme.Requery
End Sub
Private Sub LISTE_SOUS_THEME_AfterUpdate()
Forms![F_RECHERCHE_PAR_CRITERES]!liste_sous_sous_theme.Requery
End Sub
Private Sub LISTE_THEME_AfterUpdate()
Forms![F_RECHERCHE_PAR_CRITERES]!liste_sous_theme.Requery
Forms![F_RECHERCHE_PAR_CRITERES]!liste_sous_sous_theme.Requery
End Sub
Private Sub bt_retour_Click()
On Error GoTo Err_bt_retour_Click
DoCmd.Close
Exit_bt_retour_Click:
Exit Sub
Err_bt_retour_Click:
MsgBox Err.Description
Resume Exit_bt_retour_Click
End Sub
SELECT T_COUCHE_GEO.*, T_GEOBASE.*, [T_THEMATIQUE].[ID_THEME]
FROM T_COUCHE_GEO, T_GEOBASE, T_THEMATIQUE
WHERE [T_COUCHE_GEO].[ID_GEOBASE]=[T_GEOBASE].[ID_GEOBASE]
AND [T_COUCHE_GEO].[ID_THEME]=[T_THEMATIQUE].[ID_THEME];
et voici mon sql filtre :
sqlfiltre = sqlfiltre + " and T_GEOBASE.ID_GEOBASE = '" + V_ID_GEOBASE_EMPL + "' and T_COUCHE_GEO.ID_THEME = '" + V_ID_THEME + "' and ID_S_THEME = '" + V_ID_S_THEME + "' and ID_S_THEME = '" + V_ID_SS_THEME + "' and T_GEOBASE.ID_GEOBASE = '" + V_ID_GEROBASE_INS + "' and SERVICE_AGENT = '" + V_SERVICE_NOM + "' and ID_AGENT ='" + V_ID_AGENT + "'"
Voici le code :
Option Compare Database
Private Sub BT_AFFICHER_Click()
'Déclaration des variables
Dim V_ID_GEOBASE_EMPL As String
Dim V_ID_THEME As Integer
Dim V_ID_S_THEME As Integer
Dim V_ID_SS_THEME As Variant
Dim V_ID_GEOBASE_INS As String
Dim V_SERVICE_NOM As String
Dim V_ID_AGENT As Integer
Dim V_LOCAL_ATTRIB As Boolean
'Récupération des valeurs dans les variables
V_ID_GEOBASE_EMPL = F_GEOBASE_EMPL
V_ID_THEME = F_ID_THEME
V_ID_S_THEME = F_ID_S_THEME
V_ID_SS_THEME = F_ID_SS_THEME
V_ID_GEOBASE_INS = F_ID_GEOBASE_INS
V_SERVICE_NOM = LISTE_SERVICE
V_ID_AGENT = F_ID_AGENT
V_LOCAL_ATTRIB = cb_attribut
'Filtre récupérant le contenu de chaque variable
sqlfiltre = sqlfiltre + " and T_GEOBASE.ID_GEOBASE = '" + V_ID_GEOBASE_EMPL + "' and T_COUCHE_GEO.ID_THEME = '" + V_ID_THEME + "' and ID_S_THEME = '" + V_ID_S_THEME + "' and ID_SS_THEME = '" + V_ID_SS_THEME + "'and T_GEOBASE.ID_GEOBASE = '" + V_ID_GEROBASE_INS + "' and SERVICE_AGENT = '" + V_SERVICE_NOM + "' and ID_AGENT ='" + V_ID_AGENT + "' and ATTRIB_LOCAL ='" + V_LOCAL_ATTRIB + "'"
'Syntaxe permettant d'ouvrir l'état E_SPECIFIQUE et d'y afficher les couches géographiques concernées par les critères
DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview, , sqlfiltre
'DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview, , V_ID_GEOBASE_EMPL & Chr(13) & V_ID_THEME & Chr(13) & V_ID_S_THEME & Chr(13) & V_ID_SS_THEME & Chr(13) & V_ID_GEOBASE_INS & Chr(13) & V_SERVICE_NOM & Chr(13) & V_ID_AGENT
'sqlfiltre = " T_GEOBASE.ID_GEOBASE = '" + V_ID_GEOBASE_EMPL + "' and T_COUCHE_GEO.ID_THEME = '" + V_ID_THEME + "' and ID_S_THEME = '" + V_ID_S_THEME + "' and ID_S_THEME = '" + V_ID_SS_THEME + "' and T_GEOBASE.ID_GEOBASE = '" + V_ID_GEROBASE_INS + "' and SERVICE_AGENT = '" + V_SERVICE_NOM + "' and ID_AGENT ='" + V_ID_AGENT + "'"
'sqlfiltre = " 0 = 0 "
'If Not IsNull(V_ID_GEOBASE_EMPL) Then
'If Not (IsNull(V_ID_SS_THEME) Or IsEmpty(V_ID_SS_THEME)) Then
End Sub
sqlfiltre = sqlfiltre + " and T_GEOBASE.ID_GEOBASE = '" + V_ID_GEOBASE_EMPL + "' and T_COUCHE_GEO.ID_THEME = '" + V_ID_THEME + "' and ID_S_THEME = '" + V_ID_S_THEME + "' and ID_SS_THEME = '" + V_ID_SS_THEME + "'and T_GEOBASE.ID_GEOBASE = '" + V_ID_GEROBASE_INS + "' and SERVICE_AGENT = '" + V_SERVICE_NOM + "' and ID_AGENT ='" + V_ID_AGENT + "' "
if V_LOCAL_ATTRIB then
sqlfiltre = sqlfiltre + " and ATTRIB_LOCAL "
else
sqlfiltre = sqlfiltre " and (not ATTRIB_LOCAL) "
end if
Avec cette logique, suivant que le checkbox est selectione ou pas, le filtre selectionera les valeurs où ATTRIB_LOCAL est vrai ou faux. Est-ce cela que tu veux obtenir ?
Erreur d'exécution 3075 : Erreur de syntaxe (opérateur absent) dans l'expression '(and T_GEOBASE.ID_GEOBASE ='P' and T_COUCHE_GEO.ID_THEME ='6' and ID_S_THEME ='30' and ID_SS_THEME ="and T_GEOBASE.ID_GEOBASE =" and SERVICE_AGENT ='SEEF' and ID_AGENT ='65' and (not ATTRIB_LOCAL))'.
Je ne comprend pas tellement d'où cela peut venir :s
PS : Access me surligne cette ligne en jaune et le sql filtre à l'ai de contenir le contenu de message d'erreur :
DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview, , sqlfiltre
sqlfiltre = " 0 = 0 "
avant sqlfiltre = sqlfiltre + ...
Je pense que tu tournes en rond, n'as tu pas négligé ma suggestion du lundi 23 juin 2008 à 10:28:47 ? Je pense qu'il vaut mieux éviter les variant et travailler sur les incompatibilités.
Une facon de voir rapidement les incompatibilités, c'est de decouper le "sqlfiltre =" en plusieurs lignes, en ajoutant progressivement des petits bouts à sqlfiltre.
Avec les variant, tu caches les incompatibilités, mais tu te crees d'autres problemes que tu n'as pas besoin de resoudre.
'Déclaration des variables
Dim V_ID_GEOBASE_EMPL As Variant
Dim V_ID_THEME As Variant
Dim V_ID_S_THEME As Variant
Dim V_ID_SS_THEME As Variant
Dim V_ID_GEOBASE_INS As Variant
Dim V_SERVICE_NOM As Variant
Dim V_ID_AGENT As Variant
Dim V_LOCAL_ATTRIB As Boolean
'Récupération des valeurs dans les variables
V_ID_GEOBASE_EMPL = F_GEOBASE_EMPL
V_ID_THEME = F_ID_THEME
V_ID_S_THEME = F_ID_S_THEME
V_ID_SS_THEME = F_ID_SS_THEME
V_ID_GEOBASE_INS = F_ID_GEOBASE_INS
V_SERVICE_NOM = LISTE_SERVICE
V_ID_AGENT = F_ID_AGENT
V_LOCAL_ATTRIB = cb_attribut
sqlfiltre = " 0 = 0 "
'Filtre récupérant le contenu de chaque variable
sqlfiltre = sqlfiltre + " and T_GEOBASE.ID_GEOBASE = '" + V_ID_GEOBASE_EMPL + "' and T_COUCHE_GEO.ID_THEME = '" + V_ID_THEME + "' and ID_S_THEME = '" + V_ID_S_THEME + "' and ID_SS_THEME = '" + V_ID_SS_THEME + "'and T_GEOBASE.ID_GEOBASE = '" + V_ID_GEROBASE_INS + "' and SERVICE_AGENT = '" + V_SERVICE_NOM + "' and ID_AGENT ='" + V_ID_AGENT + "' "
'Permet que suivant si la checkbox est selectionée ou pas, le filtre selectionera les valeurs où ATTRIB_LOCAL est vrai ou faux
If V_LOCAL_ATTRIB Then
sqlfiltre = sqlfiltre + " and ATTRIB_LOCAL "
Else
sqlfiltre = sqlfiltre + " and (not ATTRIB_LOCAL) "
End If
'Syntaxe permettant d'ouvrir l'état E_SPECIFIQUE et d'y afficher les couches géographiques concernées par les critères
DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview, , sqlfiltre
Mais hélas l'erreur du ID_GEOBASE qui appartient a plusieurs tables est revenue.
Si c'est au moment de l'ouverture de l'état que tu as le message d'erreur "ID_GEOBASE peut appartenir à différentes tables", essaie un peu en n'utilisant pas sqlfiltre dans le openreport.
Comme tu m'as dis j'ai enlevé sql filtre de la ligne qui permet d'ouvrir l'état mais à la place je met quoi ? ça :
" and T_GEOBASE.ID_GEOBASE = '" + V_ID_GEOBASE_EMPL + "' and T_COUCHE_GEO.ID_THEME = '" + V_ID_THEME + "' and ID_S_THEME = '" + V_ID_S_THEME + "' and ID_SS_THEME = '" + V_ID_SS_THEME + "'and T_GEOBASE.ID_GEOBASE = '" + V_ID_GEROBASE_INS + "' and SERVICE_AGENT = '" + V_SERVICE_NOM + "' and ID_AGENT ='" + V_ID_AGENT + "' "
Parce qu'avec ça l'erreur 3075 revient mais pas avec ID_GEOBASE, avec tout le détail comme tout à l'heure :
erreur de syntaxe dans l'expression '(and....etc (comme au dessus)).
DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview
C'est pour voir si l'erreur vient du filtre ou pas.
J'ai toujours une vague inquetude à propos de quelque chose que tu avais mentioné à propos d'un sous état... Cela te dit quelque chose, c'était dans ton mesage du lundi 23 juin 2008 à 09:30:22 ?
Tu peux y jeter un coup d'oeil ?
Sous état ATTRIBUT :
SELECT T_ATTRIBUT.*
FROM T_ATTRIBUT;
Sous état MAJ Historique
SELECT T_MAJ_HISTO.*, T_MAJ_RESP.ID_MAJ_RESP, T_MAJ_RESP.ID_AGENT, T_AGENT.AGENT_NOM
FROM T_MAJ_HISTO LEFT JOIN (T_AGENT RIGHT JOIN T_MAJ_RESP ON T_AGENT.ID_AGENT = T_MAJ_RESP.ID_AGENT) ON T_MAJ_HISTO.ID_MAJ_HISTO = T_MAJ_RESP.ID_MAJ_HISTO;
Sous état RESPONSABLE :
SELECT T_RESP.*, T_AGENT.*
FROM T_AGENT INNER JOIN T_RESP ON T_AGENT.ID_AGENT = T_RESP.ID_AGENT;
Je pense que, quelque part dans l'état, il y a le champ "ID_GEOBASE", peut-être dans les propriétés d'un textbox ?
EDIT : Bon je l'ai est toutes préfixées de la tables les concernant et il me dis toujours que id_geobase peut être listé dans plusieurs tables, pourquoi ? Faut il que je modifie la source de mes état ou du moins que j'y précise la table à laquelle appartient l'id geo ?
Le problème de id_geobase n'apparait plus mais lord du click sur le bouton un petite case apparait et me demande de saisir : ID_GEOBASE, ID_THEME, T_AGENT.ID_AGENT, et encore T_AGENT.ID_AGENT !!
Là je comprend pas tellement. Et quand j'ai rentré ces informations l'état s'affiche avec ce que je viens de marquer.
Pourquoi ce que j'ai écrit dans le code a l'air de ne pas fonctionner ??
Je veux être certain que l'état est de nouveau ok avant de travailler sur le code. De plus, comme tu as changé ou recréé l'état, il faut peut-être adapter les sous-états ou le code.
Voici mon code :
'Déclaration des variables
Dim V_ID_GEOBASE_EMPL As Variant
Dim V_ID_THEME As Variant
Dim V_ID_S_THEME As Variant
Dim V_ID_SS_THEME As Variant
Dim V_ID_GEOBASE_INS As Variant
Dim V_SERVICE_NOM As Variant
Dim V_ID_AGENT As Variant
Dim V_LOCAL_ATTRIB As Boolean
'Récupération des valeurs dans les variables
V_ID_GEOBASE_EMPL = F_GEOBASE_EMPL
V_ID_THEME = F_ID_THEME
V_ID_S_THEME = F_ID_S_THEME
V_ID_SS_THEME = F_ID_SS_THEME
V_ID_GEOBASE_INS = F_ID_GEOBASE_INS
V_SERVICE_NOM = LISTE_SERVICE
V_ID_AGENT = F_ID_AGENT
V_LOCAL_ATTRIB = cb_attribut
sqlfiltre = " 0 = 0 "
'Filtre récupérant le contenu de chaque variable
sqlfiltre = sqlfiltre + " and [T_GEOBASE].[ID_GEOBASE] = '" + V_ID_GEOBASE_EMPL + "' and [T_COUCHE_GEO].[ID_THEME] = '" + V_ID_THEME + "' and ID_S_THEME = '" + V_ID_S_THEME + "' and ID_SS_THEME = '" + V_ID_SS_THEME + "'and [T_GEOBASE].[ID_GEOBASE] = '" + V_ID_GEROBASE_INS + "' and SERVICE_AGENT = '" + V_SERVICE_NOM + "' and ID_AGENT ='" + V_ID_AGENT + "' "
'Permet de gérer le null de la liste LISTE_SS_THEME
If Not IsNull(V_ID_SS_THEME) Then
sqlfiltre = sqlfiltre + " and (not ID_SS_THEME) "
Else
sqlfiltre = sqlfiltre + " and ID_SS_THEME"
End If
'Permet que suivant si la checkbox est selectionée ou pas, le filtre selectionera les valeurs où ATTRIB_LOCAL est vrai ou faux
If V_LOCAL_ATTRIB Then
sqlfiltre = sqlfiltre + " and ATTRIB_LOCAL "
Else
sqlfiltre = sqlfiltre + " and (not ATTRIB_LOCAL) "
End If
'Syntaxe permettant d'ouvrir l'état E_SPECIFIQUE et d'y afficher les couches géographiques concernées par les critères
DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview, , sqlfiltre
Ce que je ne comprend pas c'est que tout à l'heure en préfixant j'ai réussi à ouvrir mon état mais mon code n'était pas pris en compte. Il me demander de rentrer des infos et il m'afficher pas très bien la couches géographique.
DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview
A propos de ce que tu ne comprends pas (tout à l'heure en préfixant j'ai réussi à ouvrir mon état mais mon code n'était pas pris en compte. Il me demander de rentrer des infos et il m'afficher pas très bien la couches géographique.), à ce moment-là, s tu ouvrais l'état à la main, que se passait-il ? Comme tu as choisi de tout remettre comem avant, le saurons-nous jamais ?
Attention, ta gestion du null de la liste LISTE_SS_THEME est foireuse , il vaut mieux faire :
sqlfiltre = sqlfiltre + " and [T_GEOBASE].[ID_GEOBASE] = '" + V_ID_GEOBASE_EMPL + "' and [T_COUCHE_GEO].[ID_THEME] = '" + V_ID_THEME + "' and ID_S_THEME = '" + V_ID_S_THEME + "'and [T_GEOBASE].[ID_GEOBASE] = '" + V_ID_GEROBASE_INS + "' and SERVICE_AGENT = '" + V_SERVICE_NOM + "' and ID_AGENT ='" + V_ID_AGENT + "' "
'Permet de gérer le null de la liste LISTE_SS_THEME
If Not IsNull(V_ID_SS_THEME) Then
sqlfiltre = sqlfiltre + " and ID_SS_THEME = '" + V_ID_SS_THEME + "' "
End If
Pour répondre à tes questions voilà :
Pour l'exécution du code avec cette ligne DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview
Tu veux dire que je ne dois rien mettre d'autre ? SI c'est le cas j'ai fait le test et il me met le pb de ID_GEOBASE donc à mon avis j'ai une text box qui ne doit pas être préfixée dans mon état ou dans un des sous état.
Pour ce que je ne comprenez pas : En fait quand j'ai exécuté le code à partir du bouton Access me demandé de rentrer un ID_GEOBASE, un ID_THEME et deux foix un T_AGENT.ID_AGENT. Et pour l'ouverture du code à la main il me demandé de renseigner T_AGENT.ID_AGENT (mais j'avais beau le renseigner cela me répété toujours d'écrire T_AGENT.ID_AGENT)
Vraiment bizarre :s
Pour gérer le null de la liste LISTE_SS_THEME je vais corriger avec ce que tu as mis.
Je te donne les détails bientôt.
EDIT : Bon j'ai fais le test et il me dis Erreur d'exécution 13 : Incompatibilité de type. Je pense que cela vient de ce qui est en gras car il me le met à vide dans le sql filtre mais avant dans la récupération des valeurs de liste il m'affiche bien l'id.
Voici mon Code :
Option Compare Database
Private Sub BT_AFFICHER_Click()
'Déclaration des variables
Dim V_ID_GEOBASE_EMPL As Variant
Dim V_ID_THEME As Variant
Dim V_ID_S_THEME As Variant
Dim V_ID_SS_THEME As Variant
Dim V_ID_GEOBASE_INS As Variant
Dim V_SERVICE_NOM As Variant
Dim V_ID_AGENT As Variant
Dim V_LOCAL_ATTRIB As Boolean
'Récupération des valeurs dans les variables
V_ID_GEOBASE_EMPL = F_GEOBASE_EMPL
V_ID_THEME = F_ID_THEME
V_ID_S_THEME = F_ID_S_THEME
V_ID_SS_THEME = F_ID_SS_THEME
V_ID_GEOBASE_INS = F_ID_GEOBASE_INS(là il récupère bien l'id exple P pour production)
V_SERVICE_NOM = LISTE_SERVICE
V_ID_AGENT = F_ID_AGENT
V_LOCAL_ATTRIB = cb_attribut
sqlfiltre = " 0 = 0 "
'Permet de gérer le null de la liste LISTE_SS_THEME
If Not IsNull(V_ID_SS_THEME) Then
sqlfiltre = sqlfiltre + " and ID_SS_THEME = '" + V_ID_SS_THEME + "' "
End If
'Permet que suivant si la checkbox est selectionée ou pas, le filtre selectionera les valeurs où ATTRIB_LOCAL est vrai ou faux
If V_LOCAL_ATTRIB Then
sqlfiltre = sqlfiltre + " and ATTRIB_LOCAL "
Else
sqlfiltre = sqlfiltre + " and (not ATTRIB_LOCAL) "
End If
'Filtre récupérant le contenu de chaque variable
sqlfiltre = sqlfiltre + " and [T_GEOBASE].[ID_GEOBASE] = '" + V_ID_GEOBASE_EMPL + "' and [T_COUCHE_GEO].[ID_THEME] = '" + V_ID_THEME + "' and ID_S_THEME = '" + V_ID_S_THEME + "'and [T_GEOBASE].[ID_GEOBASE] = '" + V_ID_GEROBASE_INS +(là il me le met vide !) "' and SERVICE_AGENT = '" + V_SERVICE_NOM + "' and ID_AGENT ='" + V_ID_AGENT + "' and ATTRIB_LOCAL ='" + V_LOCAL_ATTRIB + "' "
'Syntaxe permettant d'ouvrir l'état E_SPECIFIQUE et d'y afficher les couches géographiques concernées par les critères
DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview, , sqlfiltre
'MsgBox V_ID_GEOBASE_EMPL & Chr(13) & V_ID_THEME & Chr(13) & V_ID_S_THEME & Chr(13) & V_ID_SS_THEME & Chr(13) & V_ID_GEOBASE_INS & Chr(13) & V_SERVICE_NOM & Chr(13) & V_ID_AGENT
'sqlfiltre = " T_GEOBASE.ID_GEOBASE = '" + V_ID_GEOBASE_EMPL + "' and T_COUCHE_GEO.ID_THEME = '" + V_ID_THEME + "' and ID_S_THEME = '" + V_ID_S_THEME + "' and ID_S_THEME = '" + V_ID_SS_THEME + "' and T_GEOBASE.ID_GEOBASE = '" + V_ID_GEROBASE_INS + "' and SERVICE_AGENT = '" + V_SERVICE_NOM + "' and ID_AGENT ='" + V_ID_AGENT + "'"
'If Not (IsNull(V_ID_SS_THEME) Or IsEmpty(V_ID_SS_THEME)) Then
End Sub
Suggestion : ajouter "option explicit" tout au debut du code, tu auras alors une erreur de syntaxe pour ce genre d'anomalie.
Si l'ouverture "à la main" de l'état fonctionne sans erreur, mais que l'ouverture par le code, sans filtre, donne une erreur, je suis surpris... Est-ce bien le même état ?
J'ai ajouté "option explicit" au tout début du code et lorsque je compile voici l'erreur qui apparait :
Erreur de compilation : Variable non définie et il me surligne ceci : "sqlfiltre =" de la ligne sqlfiltre = " 0 = 0 "
En plus j'ai du trop bidouiller mais mon état ne s'ouvre plus correctement à la main :s.
- 1
- 2
DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview, "est ce là que je dois mettre ma requête ????"
DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview, , (ID_GEOBASE = " & P & ")
Ma requête est celle ci :
SELECT T_COUCHE_GEO.*
FROM T_COUCHE_GEO
WHERE ID_GEOBASE="P";
Quand je clique sur le bouton il m'affiche mon état mais tous les champs sont rempli par #Nom ?
Je ne sais pas quoi mettre dans la source de mon état :s Une requête ?
DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview, , " ID_GEOBASE = " & P
et si tu fais la requete à la main, qu'obtiens-tu ?