Cocher cases pour une requête [Access 2007] - VB/VBA/VBS - Programmation
Marsh Posté le 02-07-2010 à 08:52:14
Re
Qu'entends tu par "requete simple" ?
Les champs de ton formulaires (controle textbox je suppose) contiennent des infos ? Le formulaire est basé sur une requete ou une table et les controles textbox renvoient les données de ces dernieres ou pas ?
Tu veux t'en servir pour faire des filtres ?
Faut etre un peu plus explicite, il y a tellement de solutions differentes ou de manieres d'aborder une problématique, qu'il faut cibler le besoin plus pertinament...
Un screen de ton formulaire, un fichier etc. ?
Marsh Posté le 02-07-2010 à 09:51:13
Salut dje69r
Alors, requête simple signifie requête de sélection ( désolé, j'apprend au fur et à mesure le vocabulaire d'access).
Les champs de mon formulaire sont issus pour la majorité des tables, mais aussi des requêtes, de listes déroulantes et de sous formulaires.
Je pense qu'il est possible de faire des filtres mais je ne vois pas dans quel but...
Je pensais au départ faire un code VBA avec un truc du genre
if check_box= true, alors ajouter le champs X à la requête de section, et à la fin exécuter ( je connais pas toute la synthaxe )
Mais bon, étant donnée le nombre de champ, cela risque d'être long.
Voilà un extrait de mon formulaire
Je voudrais que les cases à gauche commandent l'ajout des champs correspondants dans une requête de sélection (ceci afin d'extraire des données sous excel et de faire des calculs/stats)
Marsh Posté le 02-07-2010 à 11:08:37
Désolé je ne comprends pas ce que tu veux...
Explique ce que tu voudrais avec le formulaire que tu as mis en exemple, où Identité, Domiciliation et Code NAF sont cochés.
Marsh Posté le 02-07-2010 à 11:43:56
Pour créer une requête de sélection, on peut aller dans "créer", "création de requête", "Afficher la table" et sélectionner les champs qui nous intéresse.
Moi, je voudrais juste cocher des cases en face des champs pour qu'ils s'ajoutent à ma requête.
Je vois mal comment je peux détailler plus que ça
Marsh Posté le 02-07-2010 à 12:36:25
Aaaaaaaah ok
Le nom de ta coche a le meme nom que le champ ?
Marsh Posté le 02-07-2010 à 15:15:12
Imaginons que ta table se nomme "Table1" (oui je sais original...)
Code :
|
Ta requete s'appellera TOTO..............................
ou sinon si tu ne veux pas parametrer la table :
Code :
|
Marsh Posté le 02-07-2010 à 15:48:37
Alors petit souci. Pour tester, j'ai tapé moi même le nom du champ et de la table :
Code :
|
J'obtiens une requête toto mais la table Entreprise n'est pas prise en compte et le champ "Chiffre_affaire" est remplacé par "expr1 : [Valeur du premier CA] et donc cela ne me liste rien...
J'ai mal remplacé ton code ?
Et aussi, ou est-ce qu'on prend en compte le fait que la case est coché ?
Marsh Posté le 02-07-2010 à 16:07:18
Bah NomChamp doit etre une string...
Donc :
Nomchamp = "Chiffre_affaire"
Ah bah non faut tester si la case est cochée...
Marsh Posté le 02-07-2010 à 16:48:08
Ok, je rajoute donc un test de check_box.
Tu avais raison j'ai oublié les guillemets. Cette fois-ci cela marche, mais pas avec les noms avec des espaces ( erreur 3075 : erreur de syntaxe, opérateur absent).
Sinon, une fois la requête créée, je ne peux plus exécuter mon code car je ne peux pas ré-enregistrer sur TOTO.
Dernière chose, comment cumuler les champs ?
Marsh Posté le 02-07-2010 à 17:17:51
Si tu as des noms de champs avec des espaces (des ° etc.), met le nom du champ entre crochet
Genre :
Nomchamp = "[Chiffre affaire]"
Marsh Posté le 02-07-2010 à 17:35:29
Ok, ca marche. Pour rajouter un champ j'ai trouvé ( rajouter ",nom_du_champ"& dans le SELECT après Nom_champ & ). Et pour forcer l'enregistrement ou bien pour l'incrémenter, il y a une commande ?
Marsh Posté le 02-07-2010 à 18:10:33
ReplyMarsh Posté le 02-07-2010 à 19:12:33
Eh bien, une fois que j'exécute la commande (j'ai fait un petit bouton cliquable), j'ai bien ma requête TOTO qui se créer. Mais si je reclique sur mon bouton : erreur, access ne peut pas remplacer l'ancien TOTO. Donc il faudrait que je puisse renommer ma requête depuis mon formulaire, ou bien que access puisse écrire sur l'ancienne requête ( voir crée une autre requête TOTO1...)
Marsh Posté le 02-07-2010 à 19:17:54
Il vaut mieux la supprimer avant...
CurrentDb.QueryDefs.Delete "TOTO"
Marsh Posté le 05-07-2010 à 12:09:36
Ok, impeccable ! Merci pour ton aide dje69r !
Bonne journée
Marsh Posté le 06-07-2010 à 11:21:56
Bonjour.
Je reviens sur ce post car j'ai a nouveau un problème avec ce sujet.
Le code fonctionne, sauf pour les cases issues d'un sous-formulaire : le problème vient de mon "If chk_box_nom_du_champ =true then ...". En effet, Access ne situe pas l'endroit.
J'ai essayer plusieurs adresses :
[sous_formulaire].chk_box_nom_du_champ
Forms![mon_formulaire]![sous_formulaire].chk_box_nom_du_champ
Mais cela ne change rien.
Quel est la bonne synthaxe pour accèder aux données d'un sous-formulaire ?
Marsh Posté le 06-07-2010 à 13:40:14
Il y a plusieurs syntaxex possibles, en voici une :
Citation : Forms("NomFormulairePrincipal" )("NomDuSousFormulaire" )("chk_box_nom_du_champ" )=True |
Un sous formulaire est un controle comme un autre.
Pour mettre le nom en dur on le met entre double cotes, pour passer une variable on met le nom de la variable
Exemple :
On connait le nom du formulairen du sous formulaire et de la checkbox :
Citation : Forms("NomFormulairePrincipal")("NomDuSousFormulaire")("chk_box_nom_du_champ") |
On ne connait pas le nom du formulaire :
Citation : NomForm = "NomDuFormulaire" |
On ne connait pas le nom du sous formulaire :
Citation : NomSSForm = "NomDuSousFormulaire" |
On ne connait pas le nom de la checkbox:
Citation : CtlCheckBox = "chk_box_nom_du_champ" |
Marsh Posté le 01-07-2010 à 09:51:45
Bonjour,
j'aimerais créer dans un formulaire sous access des cases, à coté de chacun de mes champs contenant une valeur, afin de créer une requête de sélection à partir de ces cases.
J'aimerais en effet, juste cliquer sur ces cases depuis mon formulaire et puis sur un bouton pour qu'access réalise une requête simple avec comme champs, les champs des cases sélectionner.
Quelqu'un à une idée de comment faire?
Merci d'avance