[VBA] GROS PROBLEME !! help plz
Résolu
Onishi
Messages postés
314
Date d'inscription
Statut
Membre
Dernière intervention
-
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
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 !!!!!!
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 !!!!!!
A voir également:
- [VBA] GROS PROBLEME !! help plz
- Excel compter cellule couleur sans vba - Guide
- Incompatibilité de type vba ✓ - Forum VB / VBA
- Erreur 13 incompatibilité de type VBA excel ✓ - Forum Excel
- Mkdir vba ✓ - Forum VB / VBA
- Dépassement de capacité vba ✓ - Forum Excel
23 réponses
C'est bon pour le sql filtre sauf que après il me redis un pb d'incompatibilité.
Pour mon état je suis entrain de refaire là requête source (j'ai un peu de mal) mais peu importe quand je veux l'ouvrir il me dis que ID_THEME peut appartenir a différentes tables listées et blablabla...
Je te met deux liens pour te montrer à quoi ressemble mon état à la base (tu pourras y voir ce que chaque text box doit contenir :
http://www.easy-upload.net/fichier.php?fichier=200862512210
et
http://www.easy-upload.net/fichier.php?fichier=200862512327
Dis moi ce que tu en penses ?
EDIT : je dois aller manger à toute
Pour mon état je suis entrain de refaire là requête source (j'ai un peu de mal) mais peu importe quand je veux l'ouvrir il me dis que ID_THEME peut appartenir a différentes tables listées et blablabla...
Je te met deux liens pour te montrer à quoi ressemble mon état à la base (tu pourras y voir ce que chaque text box doit contenir :
http://www.easy-upload.net/fichier.php?fichier=200862512210
et
http://www.easy-upload.net/fichier.php?fichier=200862512327
Dis moi ce que tu en penses ?
EDIT : je dois aller manger à toute
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
Je pense que les trois champs (ATTRIB_LOCAL, T_AGENT.SERVICE_AGENT et T_AGENT.ID_AGENT) sont inconnus dans le contexte de l'état.
Tu peux faire deux vérifications :
1) Un des trois champs est-il affiché dans l'état ? Si oui, comment s'appelle-t-il exactement dans l'état ?
2) Ouvre "à la main" la requete qui sert de base à l'état. Ces trois champs y sont-ils présents ? Quel sont les titres de leurs colonnes ?
Tu peux faire deux vérifications :
1) Un des trois champs est-il affiché dans l'état ? Si oui, comment s'appelle-t-il exactement dans l'état ?
2) Ouvre "à la main" la requete qui sert de base à l'état. Ces trois champs y sont-ils présents ? Quel sont les titres de leurs colonnes ?
En effet ATTRIB_LOCAL est présent dans le sous état SE_ATTRIBUT sous forme de Checkbox et sa source est ATTRIB_LOCAL.
Idem pour T_AGENT.SERVICE_AGENT, il était dans le sous formulaire SE_AGENT et je l'ai renommé T_AGENT.SERVICE_AGENT car il été nommé SERVICE_AGENT.
En tout cas pour T_AGENT.ID_AGENT, il était présent dans les deux sous état cité au-dessus mais il était pourtant bien préfixé de la table T_AGENT.
Je vais voir ce que cela donne déjà.
Idem pour T_AGENT.SERVICE_AGENT, il était dans le sous formulaire SE_AGENT et je l'ai renommé T_AGENT.SERVICE_AGENT car il été nommé SERVICE_AGENT.
En tout cas pour T_AGENT.ID_AGENT, il était présent dans les deux sous état cité au-dessus mais il était pourtant bien préfixé de la table T_AGENT.
Je vais voir ce que cela donne déjà.
Tu ne peux mettre dans le filtre que des champs qui peuvent être présent dans l'état. Pour le moment, tu testes dans le filtre des champs qui ne sont pas dans l'état, et il est donc possible qu'ils ne soient pas utilisable au niveau de l'état.
Peux-tu vérifier si il est possible de les ajouter temporairement dans l'état (pas dans un sous état, dans l'état lui-meme) ? Si cela n'est pas possible, il est normal que tu ne puisses pas t'en servir dans le filtre...
Ces champs apparaissent-ils quand tu ouvres à la main la requete de base de l'état ?
Peux-tu vérifier si il est possible de les ajouter temporairement dans l'état (pas dans un sous état, dans l'état lui-meme) ? Si cela n'est pas possible, il est normal que tu ne puisses pas t'en servir dans le filtre...
Ces champs apparaissent-ils quand tu ouvres à la main la requete de base de l'état ?
Désolé de répondre que maintenant mais ma maître de stage à voulut m'aider (enfin ?) et elle s'énerve dessus et j'ai pas eu le temps de faire un copie et elle a déjà modifié pas mal de trucs :s. Je vais te tenir au courant mais bon maintenant elle me demande de trouver des solutions alors que je peux pas continuer sur ma lancé... A+
EDIT : je suis entrain de récupérer le code un peu plus je pense qu'on pourra reprendre ^^
EDIT : je suis entrain de récupérer le code un peu plus je pense qu'on pourra reprendre ^^
Temporairement je vais essayer mais bon à la base ils doivent rester dans les sous états. Et j'ai exécuté la requête source de l'état et ces champs n'apparaissent pas :s. Existe t il une syntaxe pour les envoyer sur les sous états directement du genre :
DoCmd.OpenReport "[E_SPECIFIQUE]![lenomdemonsousetat]", acViewPreview, , sqlfiltre
?
DoCmd.OpenReport "[E_SPECIFIQUE]![lenomdemonsousetat]", acViewPreview, , sqlfiltre
?
Tu ne peux pas mettre dans le filtre de l'état un champ qui n'est pas dans la requete de base de l'état. Tu ne peux pas non plus mettre dans l'état un champ qui n'est pas dans cette requete.
Je te suggère :
- temporairement, supprime ces trois champs de ton filtre, pour voir si le reste fonctionne
- essayer de rajouter ces trois champs dans la requete de base de l'état, si cela a un sens
- reflechir à ce que ces champs ont de particulier, qui ferait qu'ils n'ont pas leur place dans la requete de base de l'état
Je te suggère :
- temporairement, supprime ces trois champs de ton filtre, pour voir si le reste fonctionne
- essayer de rajouter ces trois champs dans la requete de base de l'état, si cela a un sens
- reflechir à ce que ces champs ont de particulier, qui ferait qu'ils n'ont pas leur place dans la requete de base de l'état
J'ai essayer de les mettre directement dans l'état après avoir modifié la requête source. Mais il ma mis une erreur lors de l'exécution (toujours la 3071) mais il me demandé en plus de renseigné T_ATTRIBUT et T_AGENT pourtant ils sont dans la requête source !
Si il n'ont pas leur place dans la requête base de l'état c'est que cette requête ne doit afficher que les informations concernant les couches géographiques et leur thématique. Voilà pourquoi ils sont dans des sous état.
En gros cet état et l'adaptation d'un formulaire que j'ai réalisé avec des sous formulaire. Je doit le créer juste dans le but de pouvoir imprimer mes résultats.
Si il n'ont pas leur place dans la requête base de l'état c'est que cette requête ne doit afficher que les informations concernant les couches géographiques et leur thématique. Voilà pourquoi ils sont dans des sous état.
En gros cet état et l'adaptation d'un formulaire que j'ai réalisé avec des sous formulaire. Je doit le créer juste dans le but de pouvoir imprimer mes résultats.
Après avoir modifié la requete source, que donnes l'execution à la main de la requete source ? Pas d'erreur ? Y vois-tu les nouveaux champs ?
Je te suggère, temporairement, de supprimer ces trois champs de ton filtre, pour voir si le reste fonctionne.
Même si tu veux visualiser certains champs dans des sous-états, pourquoi ne pas les inclure dans la requete source de l'état. J'ai jété un coup d'oeil sur les requetes sources de tes sous états : en fait, les sous états sont indépendants de l'état.
Ai-je bien compris, il n'y a vraiment pas de lien entre l'état et les sous états ?
Si c'est le cas, comment imagine tu que cela va s'imprimer harmonieusement ?
Je te suggère, temporairement, de supprimer ces trois champs de ton filtre, pour voir si le reste fonctionne.
Même si tu veux visualiser certains champs dans des sous-états, pourquoi ne pas les inclure dans la requete source de l'état. J'ai jété un coup d'oeil sur les requetes sources de tes sous états : en fait, les sous états sont indépendants de l'état.
Ai-je bien compris, il n'y a vraiment pas de lien entre l'état et les sous états ?
Si c'est le cas, comment imagine tu que cela va s'imprimer harmonieusement ?
Exemple :
sqlfiltre = sqlfiltre + " and [T_GEOBASE].[ID_GEOBASE] = '" + V_ID_GEOBASE_EMPL + "' "
sqlfiltre = sqlfiltre + " and [T_COUCHE_GEO].[ID_THEME] = '" + V_ID_THEME + "' "
sqlfiltre = sqlfiltre + etc...
En ce qui concerne la création de ton état, je recommande :
- de créer une requete, avec un nom, dont la syntaxe est environ ceci :
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];
- verfifier que cette requete est bien presente dans la liste des requetes, et que, quand tu l'ouvres, elle te montre bien toutes tes données
- utiliser le nom cette requete comme source de l'état
Option Explicit
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
Dim sqlfiltre As Variant
'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 "
'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
sqlfiltre = sqlfiltre + " and [T_GEOBASE].[ID_GEOBASE] = '" + V_ID_GEOBASE_EMPL + "' "
sqlfiltre = sqlfiltre + " and [T_COUCHE_GEO].[ID_THEME] = '" + V_ID_THEME + "' "
sqlfiltre = sqlfiltre + " and [T_COUCHE_GEO].[ID_S_THEME] = '" + V_ID_S_THEME + "' "
sqlfiltre = sqlfiltre + " and [T_COUCHE_GEO].[ID_SS_THEME] = '" + V_ID_SS_THEME + "' "
sqlfiltre = sqlfiltre + " and [T_GEOBASE].[ID_GEOBASE] = '" + V_ID_GEOBASE_INS + "' "
sqlfiltre = sqlfiltre + " and [T_AGENT].[SERVICE_AGENT] = '" + V_SERVICE_NOM + "' "
sqlfiltre = sqlfiltre + " and [T_AGENT].[ID_AGENT] = '" + V_ID_AGENT + "' "
sqlfiltre = sqlfiltre + " and [T_ATTRIBUT].[ATTRIB_LOCAL] = '" + V_LOCAL_ATTRIB + "' "
'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_GEOBASE_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
'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
Et bien cela m'a affiché l'état à un moment avec toutes les couches (alors que je n'en voulais que certaines) et après j'ai mis un point de repère et j'ai exécuté le code pas à pas (avec F8) et l'erreur d'incompatibilité vient de la ligne en gras au dessus. Tu serais me dire pourquoi ?
EDIT : Bon déjà j'avais oublié de réinitialiser la checkbox avec le bouton réinitialiser mais l'erreur d'incompatibilité n'apparait que lorsque je réexécute le code après avoir cliqué sur le bouton réinitialisé. L'erreur d'incompatibilité revient à chaque fois si jutilise ce bouton.
RE EDIT : en fait maintenant des que je clique sur le bouton il me dis qu'il n'arrive pas à gérer le null de la liste_ss_theme pourtant j'ai bien utilisé la syntaxe que tu m'as donné tout à l'heure et ça marché et je n'ai rien modifié...je suis perdu lol ☺
Ainsi, les deux lignes suivantes doivent être supprimées :
sqlfiltre = sqlfiltre + " and [T_COUCHE_GEO].[ID_SS_THEME] = '" + V_ID_SS_THEME + "' "
sqlfiltre = sqlfiltre + " and [T_ATTRIBUT].[ATTRIB_LOCAL] = '" + V_LOCAL_ATTRIB + "' "
Dans les exemples que je t'ai envoyé, j'avais fait cela, mais sans insister, et cela était sans doute trop discret.
En passant, je te rappelle ma suggestion de régulièrement tester les trois éléments suivants :
- l'ouverture à la main de l'état
- l'ouverture de l'état avec le code, mais sans filtre
- l'ouverture de l'état avec le code et le filtre
Chacun de ces tests devrait fonctionner, et les trois tests t'aideront à détecter plus facilement ce qui ne fonctionne pas.
j'ai enlevé les deux lignes et j'ai ouvert l'état à la main tout fonctionne, puis j'ai ouvert grâce au code sans le , , sqlfiltre
et il ma fait comme si j'ouvrai l'état à la main.
Pour la dernière solution il me demande des information à rentrer avant d'afficher le formulaire comme ATTRIB_LOCAL, T_AGENT.SERVICE_AGENT et T_AGENT.ID_AGENT puis il me met une erreur 3071 assez longue qui m'explique que ma syntaxe est soit trop complexe soit incorrecte, qu'une expression numérique peut contenir des éléments trop compliqués et qu'il faut que j'essaye de la simplifié en affectant des parties à des variables.
(ça c'est dans le cas ou je n'ai rien rentré comme informations => j'ai directement cliqué sur ok les 3 fois) et finalement même en complétant il me met la même erreur.