OVH Cloud OVH Cloud

Sélection variable

25 réponses
Avatar
Luis
Le 1er formulaire s’appelle ‘Commandes’ le formulaire que l’on ouvre
s’appelle ‘Selection’

Depuis le formulaire ‘Commandes’ j’ouvre le formulaire ‘Selection’ avec le
code suivant :

DoCmd.OpenForm " Selection ", acNormal, ,
"([COMPETENCE]=[forms]![Commandes].[Qualification] And ([langue]=
[Forms]![Commandes].[langue]) And [REGION] = [Forms]![Commandes].[REGION])"

J’aimerais savoir comment écrire cette commande pour que dans le cas ou le
champ [langue] ou/et le champ [REGION] du formulaire ‘Commandes’ est vide ce
critère soit ignoré et la sélection se fasse uniquement avec [COMPETENCE] et
[REGION] ou avec [COMPETENCE] et [langue] ou avec [COMPETENCE].

J’ai essayé avec des "if" mais ça ne marche pas.

Merci pour votre aide.

Luis

5 réponses

1 2 3
Avatar
Luis
Voilà,
j'ai besoin de récupérer le NOM; PRENOM; ADRESSE; TEL; MOBILE... tous ces
champs sont dans la table CANDIDATS.

La sélection doit se faire depuis le formulaire 'COMMANDES' sur le champ
'Qualification', le champ 'Langue' et le champ 'REGION'.
(Mais ces champs ne doivent pas nécéssairement être visibles dans le
formulaire 'Sélection'.)
Ces trois critères sont dans la table 'COMMANDES' et sur des tables
indépendantes que je liais à la table 'CANDIDATS' par [IDCANDIDAT] dans la
requête du formulaire 'Selection'.
Les tables liées dans ce formulaire 'Selection' sont la table 'CANDIDATS',
la table 'COMPETENCES' la table 'LANGUESCONNUES' et la tables REGIONS.

Luis


il va falloir choisir:
- quels sont les champs qu'il faut que tu récupères dans ta requête ?
- il y a regroupement sur le nom (et Id certainement) donc que faire pour
les autres colonnes ? il faut faire une opération

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Luis" a écrit dans le message de news:

Bonjour Raymond,
D'accord, Langue et REGION ne seraient pas visibles mais comment faire la
sélection quand même, car j'ai essayé mais dès que l'on supprime les
champs
[Langue] et [REGION] du formulaire 'Selection', j'ai une erreur.
Luis








Avatar
Raymond [mvp]
Bonjour Luis.

Tous ces champs sont dans une seule table, comment peux-tu avoir des
doublons ? même une requête regroupement ne sert à rien.

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Luis" a écrit dans le message de news:

Voilà,
j'ai besoin de récupérer le NOM; PRENOM; ADRESSE; TEL; MOBILE... tous ces
champs sont dans la table CANDIDATS.

La sélection doit se faire depuis le formulaire 'COMMANDES' sur le champ
'Qualification', le champ 'Langue' et le champ 'REGION'.
(Mais ces champs ne doivent pas nécéssairement être visibles dans le
formulaire 'Sélection'.)
Ces trois critères sont dans la table 'COMMANDES' et sur des tables
indépendantes que je liais à la table 'CANDIDATS' par [IDCANDIDAT] dans la
requête du formulaire 'Selection'.
Les tables liées dans ce formulaire 'Selection' sont la table 'CANDIDATS',
la table 'COMPETENCES' la table 'LANGUESCONNUES' et la tables REGIONS.

Luis



Avatar
Luis
A ta première remarque:
J'ai des doublons car la requête regroupement avec les autres tables créent
les doublons.
Tu me dis que la requête ne sert à rien, mais justement la requête me sert à
trouver tous les critères qui ne sont pas sur la table 'Candidats' c'est-à
dire le champ 'langue' dans la table 'langues connues', le champ 'COMPETENCE'
dans la table 'COMPETENCES', le champ 'Langue' dans la table
'LANGUESCONNUES', le champ 'REGION' dans la table 'REGIONS' car ces valeurs
ne sont pas sur la table candidats.
C'est pour cette raison que je me demandais si une requête intermédiaire ne
pouvait pas faire l'affaire.
En passant par un strWhere = "Candidats.IDCANDIDAT in (" & strSQL & ").

D'une part je ne sais pas si c'est une bonne solution et d'autre part je ne
sais pas ou mettre le strWhere dans

DoCmd.OpenForm "Sélection", acNormal, , Msg

Luis


Bonjour Luis.

Tous ces champs sont dans une seule table, comment peux-tu avoir des
doublons ? même une requête regroupement ne sert à rien.

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Luis" a écrit dans le message de news:

Voilà,
j'ai besoin de récupérer le NOM; PRENOM; ADRESSE; TEL; MOBILE... tous ces
champs sont dans la table CANDIDATS.

La sélection doit se faire depuis le formulaire 'COMMANDES' sur le champ
'Qualification', le champ 'Langue' et le champ 'REGION'.
(Mais ces champs ne doivent pas nécéssairement être visibles dans le
formulaire 'Sélection'.)
Ces trois critères sont dans la table 'COMMANDES' et sur des tables
indépendantes que je liais à la table 'CANDIDATS' par [IDCANDIDAT] dans la
requête du formulaire 'Selection'.
Les tables liées dans ce formulaire 'Selection' sont la table 'CANDIDATS',
la table 'COMPETENCES' la table 'LANGUESCONNUES' et la tables REGIONS.

Luis








Avatar
Raymond [mvp]
Si tu veux inclure les données de langues et régions dans tes
enregistrements tu auras forcément plusieurs lignes pour le même candidat,
tu ne peux faire autrement.

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Luis" a écrit dans le message de news:

A ta première remarque:
J'ai des doublons car la requête regroupement avec les autres tables
créent
les doublons.
Tu me dis que la requête ne sert à rien, mais justement la requête me sert
à
trouver tous les critères qui ne sont pas sur la table 'Candidats' c'est-à
dire le champ 'langue' dans la table 'langues connues', le champ
'COMPETENCE'
dans la table 'COMPETENCES', le champ 'Langue' dans la table
'LANGUESCONNUES', le champ 'REGION' dans la table 'REGIONS' car ces
valeurs
ne sont pas sur la table candidats.
C'est pour cette raison que je me demandais si une requête intermédiaire
ne
pouvait pas faire l'affaire.
En passant par un strWhere = "Candidats.IDCANDIDAT in (" & strSQL & ").

D'une part je ne sais pas si c'est une bonne solution et d'autre part je
ne
sais pas ou mettre le strWhere dans

DoCmd.OpenForm "Sélection", acNormal, , Msg

Luis



Avatar
Luis
Bonjour Raymond,
J'ai trouvé!!!

J'ai fait avec une requête intermédiaire.
Le code:
Dim strWhere As String, qry As DAO.QueryDef
Dim strSQL As String
Set qry = CurrentDb.QueryDefs("R_INTERMEDIAIRE_SELECTCOMMANDES ")
strSQL = qry.SQL

strWhere = "Candidats.IdCandidat In(" & strSQL & ")"

Set qry = Nothing

Dim Msg As String
Msg = Msg & " And [COMPETENCE]='" & [Forms]![Commandes].[Qualification] & "'"
If Nz(Me.langue, "") <> "" Then
Msg = Msg & " And [langue]= '" & [Forms]![Commandes].[langue] & "'"
End If
If Nz(Me.REGION, "") <> "" Then
Msg = Msg & " And [REGION]= '" & [Forms]![Commandes].[REGION] & "'"
End If
DoCmd.OpenForm "Sélection", acNormal, , strWhere

La requête intermédiaire:

SELECT CANDIDATS.IDCANDIDAT AS Expr1
FROM ((CANDIDATS INNER JOIN COMPETENCES ON CANDIDATS.IDCANDIDAT =
COMPETENCES.IDCANDIDAT) INNER JOIN LANGUESCONNUES ON CANDIDATS.IDCANDIDAT =
LANGUESCONNUES.IDCANDIDAT) INNER JOIN REGIONS ON CANDIDATS.IDCANDIDAT =
REGIONS.IDCANDIDAT
WHERE (((LANGUESCONNUES.LANGUE) Like "*" &
nz([Formulaires]![Commandes]![langue]) & "*") AND ((REGIONS.REGION) Like "*"
& nz([Formulaires]![Commandes]![REGION]) & "*") AND ((COMPETENCES.COMPETENCE)
Like "*" & nz([Formulaires]![Commandes]![Qualification]) & "*") AND
((CANDIDATS.LIBRE)="Libre" Or (CANDIDATS.LIBRE)="dossier") AND
((CANDIDATS.PersonnelTS)<>"Tempo") AND ((CANDIDATS.Fiche_active)="O")) OR
(((LANGUESCONNUES.LANGUE) Like "*" & nz([Formulaires]![Commandes]![langue]) &
"*") AND ((REGIONS.REGION) Like "*" & nz([Formulaires]![Commandes]![REGION])
& "*") AND ((COMPETENCES.COMPETENCE) Like "*" &
nz([Formulaires]![Commandes]![Qualification]) & "*") AND
((CANDIDATS.LIBRE)="Libre" Or (CANDIDATS.LIBRE)="dossier") AND
((CANDIDATS.PersonnelTS)<>"Tempo") AND ((CANDIDATS.Fiche_active)="O")) OR
(((LANGUESCONNUES.LANGUE) Like "*" & nz([Formulaires]![Commandes]![langue]) &
"*") AND ((REGIONS.REGION) Like "*" & nz([Formulaires]![Commandes]![REGION])
& "*") AND ((COMPETENCES.COMPETENCE) Like "*" &
nz([Formulaires]![Commandes]![Qualification]) & "*") AND
((CANDIDATS.LIBRE)="Libre" Or (CANDIDATS.LIBRE)="dossier") AND
((CANDIDATS.PersonnelTS)<>"Tempo") AND ((CANDIDATS.Fiche_active)="O")) OR
(((LANGUESCONNUES.LANGUE) Like "*" & nz([Formulaires]![Commandes]![langue]) &
"*") AND ((REGIONS.REGION) Like "*" & nz([Formulaires]![Commandes]![REGION])
& "*") AND ((COMPETENCES.COMPETENCE) Like "*" &
nz([Formulaires]![Commandes]![Qualification]) & "*") AND
((CANDIDATS.LIBRE)="Libre" Or (CANDIDATS.LIBRE)="dossier") AND
((CANDIDATS.PersonnelTS)<>"Tempo") AND ((CANDIDATS.Fiche_active)="O")) OR
(((LANGUESCONNUES.LANGUE) Like "*" & nz([Formulaires]![Commandes]![langue]) &
"*") AND ((REGIONS.REGION) Like "*" & nz([Formulaires]![Commandes]![REGION])
& "*") AND ((COMPETENCES.COMPETENCE) Like "*" &
nz([Formulaires]![Commandes]![Qualification]) & "*") AND
((CANDIDATS.LIBRE)="Libre" Or (CANDIDATS.LIBRE)="dossier") AND
((CANDIDATS.PersonnelTS)<>"Tempo") AND ((CANDIDATS.Fiche_active)="O")) OR
(((LANGUESCONNUES.LANGUE) Like "*" & nz([Formulaires]![Commandes]![langue]) &
"*") AND ((REGIONS.REGION) Like "*" & nz([Formulaires]![Commandes]![REGION])
& "*") AND ((COMPETENCES.COMPETENCE) Like "*" &
nz([Formulaires]![Commandes]![Qualification]) & "*") AND
((CANDIDATS.LIBRE)="Libre" Or (CANDIDATS.LIBRE)="dossier") AND
((CANDIDATS.PersonnelTS)<>"Tempo") AND ((CANDIDATS.Fiche_active)="O"));

J'ai encore un soucis c'est le fait que si dans [Qualification] du
Formulaire [Commandes] est par exemple 'Secrétaire' dans la sélection je vais
avoir aussi des 'secrétaires comptables' ou 'secrétaires réceptionnistes'
alors que je ne cherche que les candidats avec 'Secrétaire'.

Je pense que ça vient de ((COMPETENCES.COMPETENCE) Like "*" &
nz([Formulaires]![Commandes]![Qualification]) & "*") de la requête
intermédiaire mais je n'ai pas encore trouvé.

Luis


Si tu veux inclure les données de langues et régions dans tes
enregistrements tu auras forcément plusieurs lignes pour le même candidat,
tu ne peux faire autrement.

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Luis" a écrit dans le message de news:

A ta première remarque:
J'ai des doublons car la requête regroupement avec les autres tables
créent
les doublons.
Tu me dis que la requête ne sert à rien, mais justement la requête me sert
à
trouver tous les critères qui ne sont pas sur la table 'Candidats' c'est-à
dire le champ 'langue' dans la table 'langues connues', le champ
'COMPETENCE'
dans la table 'COMPETENCES', le champ 'Langue' dans la table
'LANGUESCONNUES', le champ 'REGION' dans la table 'REGIONS' car ces
valeurs
ne sont pas sur la table candidats.
C'est pour cette raison que je me demandais si une requête intermédiaire
ne
pouvait pas faire l'affaire.
En passant par un strWhere = "Candidats.IDCANDIDAT in (" & strSQL & ").

D'une part je ne sais pas si c'est une bonne solution et d'autre part je
ne
sais pas ou mettre le strWhere dans

DoCmd.OpenForm "Sélection", acNormal, , Msg

Luis








1 2 3