Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > IHM
IHM Ce forum est dédié aux questions relatives à la création de formulaires et d'états, avec ou sans code VBA, et macros.
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 21/12/2010, 18h00   #1
Futur Membre du Club
 
Inscription : avril 2009
Messages : 81
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 81
Points : 15
Points : 15
Par défaut Erreur sur formulaire multicritères

Bonjour,

Je viens de créer un formulaire avec le tuto très bien expliqué de Jean BALLAT "Création d'un formulaire de recherche multicritères" que l'on peut trouver ici

Le souci, c'est que j'obtiens le message d'erreur suivant :

MsgErreur1.JPG

Quelqu'un aurait-il une idée d'où le problème pourrai venir parce que je sèche.

Merci

Seb
rafalemirage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 23h20   #2
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
Bonjour rafalemirage

Pour qu'une requête UNION fonctionne, il faut que les 2 requêtes (ou +) composant la requête UNION répondre à 2 conditions :
  1. Elles doivent avoir le même nombre de colonnes avec exactement les mêmes noms
  2. Les colonnes des 2 requêtes doivent être présentés dans le même ordre d'apparition
.

voici un exemple :
requête 1 :
Code :
Select A, B, C from table1
Requête2 :
Code :
Select  D, E, F from table2
Les requêtes UNION suivantes ne fonctionneront pas dans les cas suivants :

Ex1
Code :
1
2
3
Select A, B, C from table1
UNION
Select  D, E, F from table2
car les colonnes de la requête 1 et de la requête2 n'ont pas le même nom

Ex2
Code :
1
2
3
Select A, B, C from table1
UNION
Select  D as A, E as B from table2
car il n'y a pas le même nombre de champs (3 dans la première et 2 dans la seconde)

Ex3
Code :
1
2
3
Select A, B, C from table1
UNION
Select  D as A, F as C, E as B from table2
Car les colonnes de la requête 1 (A, B, C) et de la requête 2 (A, C, B) n'ont pas le même ordre d'apparition.

Seule la requête suivante sera correcte :
Code :
1
2
3
Select A, B, C from table1
UNION
Select  D as A, E as B, F as C from table2
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 07h47   #3
Futur Membre du Club
 
Inscription : avril 2009
Messages : 81
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 81
Points : 15
Points : 15
Merci dumas.blr

J'ai effectivement corrigé le code SQL qui n'était effectivement pas correct mais maintenant j'ai un autre problème qui s'affiche ou pas justement, je n'ai rien qui s'affiche dans 3 demes listes déroulantes et j'ai un message d'erreur qui s'affiche "Fichier 'C:\Documents and Settings\monnom\Mes documents\tbAffectation.mdb' introuvable".
Ma première liste déroulante affiche "---Tous---" mais dès que j'appuie sur les autres listes déroulantes, j'obtiens le message d'erreur avec sois tbAffection.mdb, tbEmplacement.mbd ou tbLieux.mdb en fonction de la liste. J'ai pourtant bien ces tables dans mon projet Access. Je met mon code SQL pour ma première et ma deuxième liste déroulante :

Première liste déroulante qui marche
Code :
1
2
3
4
SELECT tbTypeCrible.idTypeCrible, tbTypeCrible.TypeCrible
FROM tbTypeCrible RIGHT JOIN (tbLieux RIGHT JOIN (tbGrilles RIGHT JOIN (tbEmplacement RIGHT JOIN (tbAffectation RIGHT JOIN tbMouvementGrille ON tbAffectation.Affectation = tbMouvementGrille.Affectation) ON tbEmplacement.TypeEtat = tbMouvementGrille.TypeEtat) ON tbGrilles.MarquageGrille = tbMouvementGrille.MarquageGrille) ON tbLieux.Lieux = tbAffectation.Lieux) ON tbTypeCrible.idTypeCrible = tbGrilles.idTypeCrible
WHERE (((tbMouvementGrille.Affectation)=IIf([Formulaires]![Formulaire1]![cboAffectation]=" ---Tous---",[tbAffectation]![Affectation],[Formulaires]![Formulaire1]![cboAffectation])) AND ((tbMouvementGrille.TypeEtat)=IIf([Formulaires]![Formulaire1]![cboTypeEmplacement]=" ---Tous---",[tbEmplacement]![TypeEtat],[Formulaires]![Formulaire1]![cboTypeEmplacement])) AND ((tbMouvementGrille.Lieux)=IIf([Formulaires]![Formulaire1]![cboLieux]=" ---Tous---",[tbLieux]![Lieux],[Formulaires]![Formulaire1]![cboLieux])) AND ((tbMouvementGrille.DateDebutEtat)>[Formulaires]![Formulaire1]![DateDebut]) AND ((tbMouvementGrille.DateFinEtat)<[Formulaires]![Formulaire1]![DateFin]))
ORDER BY tbTypeCrible.TypeCrible  UNION SELECT 0, " ---Tous---" FROM tbTypeCrible;
Et le code de la deuxième liste déroulante qui ne marche pas
Code :
SELECT tbAffectation.Affectation FROM tbTypeCrible RIGHT JOIN (tbLieux RIGHT JOIN (tbGrilles RIGHT JOIN (tbEmplacement RIGHT JOIN (tbAffectation RIGHT JOIN tbMouvementGrille ON tbAffectation.Affectation = tbMouvementGrille.Affectation) ON tbEmplacement.TypeEtat = tbMouvementGrille.TypeEtat) ON tbGrilles.MarquageGrille = tbMouvementGrille.MarquageGrille) ON tbLieux.Lieux = tbAffectation.Lieux) ON tbTypeCrible.idTypeCrible = tbGrilles.idTypeCrible WHERE (((tbTypeCrible.TypeCrible)=IIf([Formulaires]![Formulaire1]![cboTypeCrible]=0,[tbTypeCrible]![TypeCrible],[Formulaires]![Formulaire1]![cboTypeCrible])) AND ((tbMouvementGrille.TypeEtat)=IIf([Formulaires]![Formulaire1]![cboTypeEmplacement]=" ---Tous---",[tbMouvementGrille]![TypeEtat],[Formulaires]![Formulaire1]![cboTypeEmplacement])) AND ((tbLieux.Lieux)=IIf([Formulaires]![Formulaire1]![cboLieux]=" ---Tous---",[tbLieux]![Lieux],[Formulaires]![Formulaire1]![cboLieux])) AND ((tbMouvementGrille.DateDebutEtat)>[Formulaires]![Formulaire1]![DateDebut]) AND ((tbMouvementGrille.DateFinEtat)<[Formulaires]![Formulaire1]![DateFin])) ORDER BY tbAffectation.Affectation; UNION SELECT " ---Tous---" FROM tbAffectation.Affectation;
Voilà si quelqu'un voit quelque-chose qui cloche n'hésitez pas à me le dire !

Seb
rafalemirage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 08h25   #4
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
Ca, ça sent la table liée.

Avez-vous mis à jour la laison entre la base frontale et la base tbAffectation.mdb ?


En effet, si la table n'existait pas, il y aurait une erreur SQL se type "table inconnue". Là, c'est Access qui dit qu'il ne trouve pas la base de donnée.
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 09h01   #5
Futur Membre du Club
 
Inscription : avril 2009
Messages : 81
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 81
Points : 15
Points : 15
Bonjour dumas.blr,

Je viens d'aller dans le menu Outils, Utilitaires de base de données, Gestionnaire d'attaches. Access me dit "Il n'y a pas de tables attachées dans la base de données en cours". Faut-il que j'attache les tables à la base de données ?

Seb
rafalemirage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 11h06   #6
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
Comment sont stockées les tables ? Dans des bases de données différentes ?
Si c'est le cas, il faut bien les relier entre elles.
Si ce n'est pas le cas, c'est que le SQL n'est pas bon.

J'ai regardé plus attentivement la requête qui ne fonctionnait pas

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT tbAffectation.Affectation FROM tbTypeCrible 
RIGHT JOIN (tbLieux RIGHT JOIN (tbGrilles 
RIGHT JOIN (tbEmplacement 
RIGHT JOIN (tbAffectation 
RIGHT JOIN tbMouvementGrille 
ON tbAffectation.Affectation = tbMouvementGrille.Affectation) 
ON tbEmplacement.TypeEtat = tbMouvementGrille.TypeEtat) 
ON tbGrilles.MarquageGrille = tbMouvementGrille.MarquageGrille) 
ON tbLieux.Lieux = tbAffectation.Lieux) 
ON tbTypeCrible.idTypeCrible = tbGrilles.idTypeCrible 
WHERE (((tbTypeCrible.TypeCrible)=IIf([Formulaires]![Formulaire1]![cboTypeCrible]=0,[tbTypeCrible]![TypeCrible],[Formulaires]![Formulaire1]![cboTypeCrible])) 
AND ((tbMouvementGrille.TypeEtat)=IIf([Formulaires]![Formulaire1]![cboTypeEmplacement]=" ---Tous---",[tbMouvementGrille]![TypeEtat],[Formulaires]![Formulaire1]![cboTypeEmplacement])) 
AND ((tbLieux.Lieux)=IIf([Formulaires]![Formulaire1]![cboLieux]=" ---Tous---",[tbLieux]![Lieux],[Formulaires]![Formulaire1]![cboLieux])) 
AND ((tbMouvementGrille.DateDebutEtat)>[Formulaires]![Formulaire1]![DateDebut]) 
AND ((tbMouvementGrille.DateFinEtat)<[Formulaires]![Formulaire1]![DateFin])) 
ORDER BY tbAffectation.Affectation; 
UNION SELECT " ---Tous---" FROM tbAffectation.Affectation;
Le ';' devant le UNION va causer une erreur.
En effet, le ';' indique la fin d'une requête SQL. Le reste de la requête ne sera pas pris en compte. Peut-être que dans ce cas, Access va chercher un autre emplacement; mais en tout état de cause, le SQL ne marchera pas.
Il faut enlever le ';' et tester.
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 11h20   #7
Futur Membre du Club
 
Inscription : avril 2009
Messages : 81
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 81
Points : 15
Points : 15
Bonjour,

effectivement, j'avais oublié de supprimer le ";" sur le code de la liste que je t'ai donné, j'ai modifié ca mais sans succès. Je vais relire le code de l'exemple du tuto pour voir de ce qui change.

Seb
rafalemirage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 11h34   #8
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
Peux-tu me dire comment sornt ordonnées les bases de données ?

Y a t'il une seule base et est-ce que les tables sont toutes présentes dedans ?
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 12h34   #9
Futur Membre du Club
 
Inscription : avril 2009
Messages : 81
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 81
Points : 15
Points : 15
Je te met ci-joint mon tableau des relations avec mes tables :

Relations.JPG

Seb
rafalemirage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 15h16   #10
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
En regardant plus attentivement, je trouve que ta requête me parait bien compliquée. As tu utilisé l'assistant ou as-tu assayé de la construire tout seul (je pencherais pour le 2ème cas)

Remarque générale :Pourquoi utilise-tu des RIGHT JOIN (jointure ouverte) entre tes tables alors que toutes tes cardinalité sont de type 1-n. Des INNER JOIN sont amplement suffisantes.

Remarque secondaire:
Dans les combo box, tu souhaites afficher les occurences de tes tables tbTypeCrible, tbAffectation, tbLieux ...
Ta requête qui est le .rowsource de tes listes ne devrait pointer que sur la table d'origine. Il ne devrait pas y avoir de jointure. Il faut donc les simplifier au maximum.

Si la requête que tu présente est le résultat des sélections dans les combobox, alors il sera très compliqué de traiter cela uniquement en SQL.

Il me parait beaucoup plus simple et maintenable de coder cela en VBA, et de générer dynamiquement le SQL à partir du code, en combinant lersultat avaec des AND.
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 19h30   #11
Futur Membre du Club
 
Inscription : avril 2009
Messages : 81
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 81
Points : 15
Points : 15
Bonsoir,
pour ce qui est des requêtes, j'ai utilisé l'assistant en suivant les instructions du tuto de Jean BALLAT "Création d'un formulaire de recherche multicritères". Ces requêtes me servent à faire un formulaire de recherche multicritères. Pour ce qui est des RIGHT JOINs, c'est Access qui les générés tout seul.
rafalemirage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2010, 14h17   #12
Futur Membre du Club
 
Inscription : avril 2009
Messages : 81
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 81
Points : 15
Points : 15
Bonjour,

J'ai refait un formulaire de recherche multicritères plus simple mais j'ai un problème que je n'arrive pas à résoudre.
J'ai un formulaire avec 4 listes déroulantes (TypeEtat, TypeCrible, Affectation et Lieux), 4 checkbox (chkTypeEtat, chkTypeCrible, chkAffectation et chkLieux pour dire de tout selectionner ou non) et 2 zones de texte (DateDebut et DateFin)
J'ai créé un requête et voilà un exemple de ce que je met en critère dans un champ de ma requête :
Code :
VraiFaux([Formulaires]![FCreationEtat]![chkTypeEtat]=1;[tbEmplacement]![TypeEtat];[Formulaires]![FCreationEtat]![TypeEtat])
Le souci c'est que je n'arrive pas à tout sélectionner lorsque ma checkbox est cochée, car quand je la coche, j'ai toujours mon filtrage qui se fait suivant [Formulaires]![FCreationEtat]![TypeEtat].
J'ai essayé de remplacer [tbEmplacement]![TypeEtat] par "" mais rien de mieux. Je sais plus quoi faire

Seb
rafalemirage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/12/2010, 09h47   #13
Futur Membre du Club
 
Inscription : avril 2009
Messages : 81
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 81
Points : 15
Points : 15
Bonjour,

Bon ben j'ai réussi à faire marcher mon formulaire mais je ne sais pas trop comment, voici un exemple de ce que j'ai mis en critère de ma requête :

Code :
VraiFaux([Formulaires]![FCreationEtat]![chkTypeEtat]=Vrai;[tbEmplacement]![TypeEtat];[Formulaires]![FCreationEtat]![TypeEtat])
Bonne fêtes à tous

Seb
rafalemirage est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



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


 
 
 
 
Partenaires

Hébergement Web