Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Comment avoir 1 fois chaque sélection dans un formulaire en cont in

16 réponses
Avatar
Luis
Bonjour à tous,
Voilà mon problème:
Depuis un formulaire je lance la sélection de candidats selon un critère "x".
Sur clic de boouton:
Dim strCritere As String

strCritere = "[DESCRTRAVAIL] LIKE '*" & Nz(Me!txtMot) & "*'" _
& " or [Formation.DIPLOME] LIKE '*" & Nz(Me!txtMot) & "*'"

'DoCmd.Close

DoCmd.OpenForm "Sélection aléatoire", acNormal, , strCritere
[Forms]![Sélection aléatoire].[TITRE] = " TOUS CANDIDATS LIBRES, TOUTES
QUALIFICATIONS, SELON CRITERE PERSONNEL "
[Forms]![Sélection aléatoire].[MétierCV] = Me.txtMot

Ce qui m'ouvre un formulaire en continu avec la liste de tous les candidats
correspondant au critère "X".

Mon problème est que même avec une requête 'Opération: Regroupement'
J'ai par exemple 7 fois un candidat, 2 fois un autre, 19 fois un autre etc..

Ceci vient du fait que je [DESCRTRAVAIL] et [Formation.DIPLOME] peuvent se
trouver plusieurs fois chez un candidat et que le critère peut évidement se
trouver dans plusieurs [DESCRTRAVAIL] et [Formation.DIPLOME] du même candidat.

Comment faire pour que la liste proposée se limite à une fois chaque candidat.

Je vous mets la requête qui est derrière le formulaire"Sélection aléatoire":

SELECT DISTINCTROW CANDIDATS.DIPLOME, CANDIDATS.LANGUEMATERNELLE,
CANDIDATS.AGENCE, CANDIDATS.[CODE AGENCE], CANDIDATS.LIBRE, CANDIDATS.NOM,
CANDIDATS.PRENOM, CANDIDATS.IDCANDIDAT, CANDIDATS.TEL, CANDIDATS.NATEL,
CANDIDATS.[E-MAIL], CANDIDATS.OBSERVATIONS, CANDIDATS.NAISSANCE,
CANDIDATS.OK_OUI_NON, CANDIDATS.ADRESSE, CANDIDATS.NP, CANDIDATS.LOCALITE,
CANDIDATS.FREQUENCE, CANDIDATS.PERMIS_CONDUIRE, CANDIDATS.[QUALIF 2],
CANDIDATS.REGION, CANDIDATS.Champ1, CANDIDATS.DOMAINE, CANDIDATS.PersonnelTS,
candidats.POLITESSES & " " & [PRENOM] & " " & [NOM] AS Expr1,
CANDIDATS.[actif/dcd], CANDIDATS.OCCUPATION, CANDIDATS.PLEINTEMPS, [EMPLOI
PRECEDENT].DESCRTRAVAIL, FORMATION.DIPLOME
FROM (CANDIDATS INNER JOIN [EMPLOI PRECEDENT] ON CANDIDATS.IDCANDIDAT =
[EMPLOI PRECEDENT].IDCANDIDAT) INNER JOIN FORMATION ON CANDIDATS.IDCANDIDAT =
FORMATION.IDCANDIDAT
GROUP BY CANDIDATS.DIPLOME, CANDIDATS.LANGUEMATERNELLE, CANDIDATS.AGENCE,
CANDIDATS.[CODE AGENCE], CANDIDATS.LIBRE, CANDIDATS.NOM, CANDIDATS.PRENOM,
CANDIDATS.IDCANDIDAT, CANDIDATS.TEL, CANDIDATS.NATEL, CANDIDATS.[E-MAIL],
CANDIDATS.OBSERVATIONS, CANDIDATS.NAISSANCE, CANDIDATS.OK_OUI_NON,
CANDIDATS.ADRESSE, CANDIDATS.NP, CANDIDATS.LOCALITE, CANDIDATS.FREQUENCE,
CANDIDATS.PERMIS_CONDUIRE, CANDIDATS.[QUALIF 2], CANDIDATS.REGION,
CANDIDATS.Champ1, CANDIDATS.DOMAINE, CANDIDATS.PersonnelTS,
candidats.POLITESSES & " " & [PRENOM] & " " & [NOM], CANDIDATS.[actif/dcd],
CANDIDATS.OCCUPATION, CANDIDATS.PLEINTEMPS, [EMPLOI PRECEDENT].DESCRTRAVAIL,
FORMATION.DIPLOME
HAVING (((CANDIDATS.LIBRE)="Libre" Or (CANDIDATS.LIBRE)="dossier") AND
((CANDIDATS.PersonnelTS)="Stable" Or (CANDIDATS.PersonnelTS)="Stable et
Tempo" Or (CANDIDATS.PersonnelTS)="Tempo et Stable") AND
((CANDIDATS.[actif/dcd])="O"))
ORDER BY CANDIDATS.NOM;

Merci pour votre aide.
Luis

10 réponses

1 2
Avatar
Eric
Bonjour Luis,

Testes en remplaçant DistinctRow par Distinct dans ta requête
DistinctRow travaille sur tous les champs sous-jacents de(s) table(s) et
Distinct seulement sur les champs affichés dans la requête si je ne me
trompe pas.


Voilà mon problème:
Depuis un formulaire je lance la sélection de candidats selon un critère "x".
Sur clic de boouton:
Ce qui m'ouvre un formulaire en continu avec la liste de tous les candidats
correspondant au critère "X".

Mon problème est que même avec une requête 'Opération: Regroupement'
J'ai par exemple 7 fois un candidat, 2 fois un autre, 19 fois un autre etc..

Ceci vient du fait que je [DESCRTRAVAIL] et [Formation.DIPLOME] peuvent se
trouver plusieurs fois chez un candidat et que le critère peut évidement se
trouver dans plusieurs [DESCRTRAVAIL] et [Formation.DIPLOME] du même candidat.

Comment faire pour que la liste proposée se limite à une fois chaque candidat.

--

A+
Eric
http://users.skynet.be/mpfa/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
Luis
Bonjour Eric,
J'ai déjà essayé, mais le résultat est le même.
Luis


Bonjour Luis,

Testes en remplaçant DistinctRow par Distinct dans ta requête
DistinctRow travaille sur tous les champs sous-jacents de(s) table(s) et
Distinct seulement sur les champs affichés dans la requête si je ne me
trompe pas.


Voilà mon problème:
Depuis un formulaire je lance la sélection de candidats selon un critère "x".
Sur clic de boouton:
Ce qui m'ouvre un formulaire en continu avec la liste de tous les candidats
correspondant au critère "X".

Mon problème est que même avec une requête 'Opération: Regroupement'
J'ai par exemple 7 fois un candidat, 2 fois un autre, 19 fois un autre etc..

Ceci vient du fait que je [DESCRTRAVAIL] et [Formation.DIPLOME] peuvent se
trouver plusieurs fois chez un candidat et que le critère peut évidement se
trouver dans plusieurs [DESCRTRAVAIL] et [Formation.DIPLOME] du même candidat.

Comment faire pour que la liste proposée se limite à une fois chaque candidat.

--

A+
Eric
http://users.skynet.be/mpfa/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr




Avatar
Eric
et si tu décoches Afficher sur les champs où tu mets tes criteres comme
PersonnelTS, Libre, actif, et en remplacant ton group by ... Having par
seulement un Where ?

Bonjour Eric,
J'ai déjà essayé, mais le résultat est le même.
Luis

--

A+
Eric
http://users.skynet.be/mpfa/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
Luis
Là, il faudrait que tu me dise plus précisément où changer, car j'ai plein
d'erreurs.
Je dois surement faire quelque chose de faux.
Luis


et si tu décoches Afficher sur les champs où tu mets tes criteres comme
PersonnelTS, Libre, actif, et en remplacant ton group by ... Having par
seulement un Where ?

Bonjour Eric,
J'ai déjà essayé, mais le résultat est le même.
Luis

--

A+
Eric
http://users.skynet.be/mpfa/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr




Avatar
Luis
Dans mon mail précédent je parle d'erreurs, mais elles viennent car je ne
sais pas placer le "Where" en remplacement du "group by ... Having"
Merci pour ton aide.
Luis



et si tu décoches Afficher sur les champs où tu mets tes criteres comme
PersonnelTS, Libre, actif, et en remplacant ton group by ... Having par
seulement un Where ?

Bonjour Eric,
J'ai déjà essayé, mais le résultat est le même.
Luis

--

A+
Eric
http://users.skynet.be/mpfa/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr




Avatar
Eric
Essaies en copiant ca dans la fenêtre SQL d'une nouvelle requête et
regarde si les enregistrements sont uniques.

SELECT DISTINCT CANDIDATS.DIPLOME, CANDIDATS.LANGUEMATERNELLE,
CANDIDATS.AGENCE, CANDIDATS.[CODE AGENCE], CANDIDATS.NOM,
CANDIDATS.PRENOM, CANDIDATS.IDCANDIDAT, CANDIDATS.TEL, CANDIDATS.NATEL,
CANDIDATS.[E-MAIL], CANDIDATS.OBSERVATIONS, CANDIDATS.NAISSANCE,
CANDIDATS.OK_OUI_NON, CANDIDATS.ADRESSE, CANDIDATS.NP,
CANDIDATS.LOCALITE, CANDIDATS.FREQUENCE, CANDIDATS.PERMIS_CONDUIRE,
CANDIDATS.[QUALIF 2], CANDIDATS.REGION, CANDIDATS.Champ1,
CANDIDATS.DOMAINE, candidats.POLITESSES & " " & [PRENOM] & " " & [NOM]
AS Expr1, CANDIDATS.[actif/dcd], CANDIDATS.OCCUPATION,
CANDIDATS.PLEINTEMPS, [EMPLOI PRECEDENT].DESCRTRAVAIL, FORMATION.DIPLOME
FROM (CANDIDATS INNER JOIN [EMPLOI PRECEDENT] ON CANDIDATS.IDCANDIDAT [EMPLOI PRECEDENT].IDCANDIDAT) INNER JOIN FORMATION ON
CANDIDATS.IDCANDIDAT = FORMATION.IDCANDIDAT
WHERE (((CANDIDATS.LIBRE)="Libre" Or (CANDIDATS.LIBRE)="dossier") AND
((CANDIDATS.PersonnelTS)="Stable" Or (CANDIDATS.PersonnelTS)="Stable et
Tempo" Or (CANDIDATS.PersonnelTS)="Tempo et Stable") AND
((CANDIDATS.[actif/dcd])="O"))
ORDER BY CANDIDATS.NOM;

De plus dans la condition
strCritere = "[DESCRTRAVAIL] LIKE '*" & Nz(Me!txtMot) & "*'" _
& " or [Formation.DIPLOME] LIKE '*" & Nz(Me!txtMot) & "*'"
c'est normal que tu compares 2 champs au contenu de la même zone de texte ?

Dans mon mail précédent je parle d'erreurs, mais elles viennent car je ne
sais pas placer le "Where" en remplacement du "group by ... Having"
Merci pour ton aide.
Luis




et si tu décoches Afficher sur les champs où tu mets tes criteres comme
PersonnelTS, Libre, actif, et en remplacant ton group by ... Having par
seulement un Where ?


Bonjour Eric,
J'ai déjà essayé, mais le résultat est le même.
Luis



--
A+
Eric
http://users.skynet.be/mpfa/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr




--
A+
Eric
http://users.skynet.be/mpfa/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr



Avatar
Luis
Bonjour Eric,
Cette nouvelle requête n'a pas changé grand chose.

A ta question:
strCritere = "[DESCRTRAVAIL] LIKE '*" & Nz(Me!txtMot) & "*'" _
& " or [Formation.DIPLOME] LIKE '*" & Nz(Me!txtMot) & "*'"
c'est normal que tu compares 2 champs au contenu de la même zone de texte ?



Oui car les critères de recherche peuvent se trouver dans un ou l'autre des
2 champs, comme tu l'aura deviné ces 2 champs sont chacun dans un table
indépendante
le champ [DESCRTRAVAIL] dans la table "EMPLOI PRECEDENT"
et le champ [FORMATION.DIPLOME] dans la table "FORMATION"

De plus pour chaque IDCANDIDAT, il y a plusieurs fois le champ
[DESCRTRAVAIL] dans la table "EMPLOI PRECEDENT" et dans [FORMATION.DIPLOME]
dans la table "FORMATION".

J'explique pourquoi:

Ces deux tables font partie d'un formulaire "CV" avec un formulaire
principal et 2 sous-formulaires: "EMPLOI PRECEDENT" et "FORMATION"

A chaque sous formulaire "emploi precedent" il y a autant de saisies que
d'emploi effectué par le candidat.

A chaque sous "formulaire formation", il y a autant de saisies que de
formations suivies par le candidat.

As-tu d'autres idées?
Luis



Essaies en copiant ca dans la fenêtre SQL d'une nouvelle requête et
regarde si les enregistrements sont uniques.

SELECT DISTINCT CANDIDATS.DIPLOME, CANDIDATS.LANGUEMATERNELLE,
CANDIDATS.AGENCE, CANDIDATS.[CODE AGENCE], CANDIDATS.NOM,
CANDIDATS.PRENOM, CANDIDATS.IDCANDIDAT, CANDIDATS.TEL, CANDIDATS.NATEL,
CANDIDATS.[E-MAIL], CANDIDATS.OBSERVATIONS, CANDIDATS.NAISSANCE,
CANDIDATS.OK_OUI_NON, CANDIDATS.ADRESSE, CANDIDATS.NP,
CANDIDATS.LOCALITE, CANDIDATS.FREQUENCE, CANDIDATS.PERMIS_CONDUIRE,
CANDIDATS.[QUALIF 2], CANDIDATS.REGION, CANDIDATS.Champ1,
CANDIDATS.DOMAINE, candidats.POLITESSES & " " & [PRENOM] & " " & [NOM]
AS Expr1, CANDIDATS.[actif/dcd], CANDIDATS.OCCUPATION,
CANDIDATS.PLEINTEMPS, [EMPLOI PRECEDENT].DESCRTRAVAIL, FORMATION.DIPLOME
FROM (CANDIDATS INNER JOIN [EMPLOI PRECEDENT] ON CANDIDATS.IDCANDIDAT > [EMPLOI PRECEDENT].IDCANDIDAT) INNER JOIN FORMATION ON
CANDIDATS.IDCANDIDAT = FORMATION.IDCANDIDAT
WHERE (((CANDIDATS.LIBRE)="Libre" Or (CANDIDATS.LIBRE)="dossier") AND
((CANDIDATS.PersonnelTS)="Stable" Or (CANDIDATS.PersonnelTS)="Stable et
Tempo" Or (CANDIDATS.PersonnelTS)="Tempo et Stable") AND
((CANDIDATS.[actif/dcd])="O"))
ORDER BY CANDIDATS.NOM;

De plus dans la condition
strCritere = "[DESCRTRAVAIL] LIKE '*" & Nz(Me!txtMot) & "*'" _
& " or [Formation.DIPLOME] LIKE '*" & Nz(Me!txtMot) & "*'"
c'est normal que tu compares 2 champs au contenu de la même zone de texte ?

Dans mon mail précédent je parle d'erreurs, mais elles viennent car je ne
sais pas placer le "Where" en remplacement du "group by ... Having"
Merci pour ton aide.
Luis




et si tu décoches Afficher sur les champs où tu mets tes criteres comme
PersonnelTS, Libre, actif, et en remplacant ton group by ... Having par
seulement un Where ?


Bonjour Eric,
J'ai déjà essayé, mais le résultat est le même.
Luis



--
A+
Eric
http://users.skynet.be/mpfa/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr




--
A+
Eric
http://users.skynet.be/mpfa/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr






Avatar
Luis
Re bonjour Eric,
Je tourne en rond, tout ce que j'essaie rate.
Est-ce qu'il n'y a pas moyen d'agir directement sur le formulaire pour que
par exemple il y a un IDCANDIDAT, un seul s'affiche?
Luis


Essaies en copiant ca dans la fenêtre SQL d'une nouvelle requête et
regarde si les enregistrements sont uniques.

SELECT DISTINCT CANDIDATS.DIPLOME, CANDIDATS.LANGUEMATERNELLE,
CANDIDATS.AGENCE, CANDIDATS.[CODE AGENCE], CANDIDATS.NOM,
CANDIDATS.PRENOM, CANDIDATS.IDCANDIDAT, CANDIDATS.TEL, CANDIDATS.NATEL,
CANDIDATS.[E-MAIL], CANDIDATS.OBSERVATIONS, CANDIDATS.NAISSANCE,
CANDIDATS.OK_OUI_NON, CANDIDATS.ADRESSE, CANDIDATS.NP,
CANDIDATS.LOCALITE, CANDIDATS.FREQUENCE, CANDIDATS.PERMIS_CONDUIRE,
CANDIDATS.[QUALIF 2], CANDIDATS.REGION, CANDIDATS.Champ1,
CANDIDATS.DOMAINE, candidats.POLITESSES & " " & [PRENOM] & " " & [NOM]
AS Expr1, CANDIDATS.[actif/dcd], CANDIDATS.OCCUPATION,
CANDIDATS.PLEINTEMPS, [EMPLOI PRECEDENT].DESCRTRAVAIL, FORMATION.DIPLOME
FROM (CANDIDATS INNER JOIN [EMPLOI PRECEDENT] ON CANDIDATS.IDCANDIDAT > [EMPLOI PRECEDENT].IDCANDIDAT) INNER JOIN FORMATION ON
CANDIDATS.IDCANDIDAT = FORMATION.IDCANDIDAT
WHERE (((CANDIDATS.LIBRE)="Libre" Or (CANDIDATS.LIBRE)="dossier") AND
((CANDIDATS.PersonnelTS)="Stable" Or (CANDIDATS.PersonnelTS)="Stable et
Tempo" Or (CANDIDATS.PersonnelTS)="Tempo et Stable") AND
((CANDIDATS.[actif/dcd])="O"))
ORDER BY CANDIDATS.NOM;

De plus dans la condition
strCritere = "[DESCRTRAVAIL] LIKE '*" & Nz(Me!txtMot) & "*'" _
& " or [Formation.DIPLOME] LIKE '*" & Nz(Me!txtMot) & "*'"
c'est normal que tu compares 2 champs au contenu de la même zone de texte ?

Dans mon mail précédent je parle d'erreurs, mais elles viennent car je ne
sais pas placer le "Where" en remplacement du "group by ... Having"
Merci pour ton aide.
Luis




et si tu décoches Afficher sur les champs où tu mets tes criteres comme
PersonnelTS, Libre, actif, et en remplacant ton group by ... Having par
seulement un Where ?


Bonjour Eric,
J'ai déjà essayé, mais le résultat est le même.
Luis



--
A+
Eric
http://users.skynet.be/mpfa/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr




--
A+
Eric
http://users.skynet.be/mpfa/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr






Avatar
Eric
Bonjour Luis,

En fait, tu as une relation 1-N entre Candidat et Emploi_Precedent, de
même pour la relation Candidat et Formation.
Si bien que les equijointures (Inner Join) entre ces tables te
retournent autant d'occurences d'un candidat, en fonction du nb de
formations qu'il a effectuées et du nb d'emplois précédents qu'il a occupés.
Vu "de loin", c'est difficile de te conseiller.
Ce que tu peux faire, si les données ne sont pas confidentielles, c'est
importer dans une nouvelle BD, les tables (ou des extraits
significatifs), les requêtes et formulaires necessaires au traitement.
La compacter.
Zipper cette BD et la mettre sur : http://www.cjoint.com/
Attention fichier limité en taille à 250 Ko.
Puis tu postes, ici, le lien créé par cjoint. Je regarderai ce WE ce que
je peux te proposer.
--
A+
Eric
http://users.skynet.be/mpfa/

Re bonjour Eric,
Je tourne en rond, tout ce que j'essaie rate.
Est-ce qu'il n'y a pas moyen d'agir directement sur le formulaire pour que
par exemple il y a un IDCANDIDAT, un seul s'affiche?
Luis



Avatar
Luis
Rebounjour Eric,
Voici le lien : http://cjoint.com/?hpsT64OEWQ

Tu ouvre le formulaire "SLC" cela concerne le bouton nomé: "Sélection
Personnalisée",
Les autres te donnerons un message d'erreur, car les formulaires et requêtes
ne sont pas dans la base.

Pour tester dans le champ qui se trouve juste desous tu écrits par exemple
'trust' ou 'assist' etc... ( sans les ' ') et tu cliques sur le bouton
"Sélection Personnalisée", là le formulaire "Sélection aléatoire" va s'ouvrir
et tu auras le résultat.

Si tu trouves une solution, Chapeau bas.

Luis


Bonjour Luis,

En fait, tu as une relation 1-N entre Candidat et Emploi_Precedent, de
même pour la relation Candidat et Formation.
Si bien que les equijointures (Inner Join) entre ces tables te
retournent autant d'occurences d'un candidat, en fonction du nb de
formations qu'il a effectuées et du nb d'emplois précédents qu'il a occupés.
Vu "de loin", c'est difficile de te conseiller.
Ce que tu peux faire, si les données ne sont pas confidentielles, c'est
importer dans une nouvelle BD, les tables (ou des extraits
significatifs), les requêtes et formulaires necessaires au traitement.
La compacter.
Zipper cette BD et la mettre sur : http://www.cjoint.com/
Attention fichier limité en taille à 250 Ko.
Puis tu postes, ici, le lien créé par cjoint. Je regarderai ce WE ce que
je peux te proposer.
--
A+
Eric
http://users.skynet.be/mpfa/

Re bonjour Eric,
Je tourne en rond, tout ce que j'essaie rate.
Est-ce qu'il n'y a pas moyen d'agir directement sur le formulaire pour que
par exemple il y a un IDCANDIDAT, un seul s'affiche?
Luis






1 2