OVH Cloud OVH Cloud

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

6 réponses

1 2
Avatar
Eric
re,

Petite précision mais qui a une énorme importance, il me faudrait la bd
au format Access 2000 car je n'ai ni Access XP, ni Access 2003.
J'avais oublié de préciser :-(

A+
Eric
Avatar
Luis
Avec ce lien elle est au format Access2000
http://cjoint.com/?hptXGAv5dE
Bon WE.
Luis


re,

Petite précision mais qui a une énorme importance, il me faudrait la bd
au format Access 2000 car je n'ai ni Access XP, ni Access 2003.
J'avais oublié de préciser :-(

A+
Eric



Avatar
Eric
Bonjour Luis,

Lien ici : http://cjoint.com/?hqkGfJRsVx

Les modifications :
Dès lors que tu ne veux voir qu'un seul item des candidats répondant à
ton critere de recherche compte tenu de tes relations entre les 3
tables, j'ai du enlever les champs Formation.Diplome et DESCRTRAVAIL du
formulaire Sélection Aléatoire ET de la requête STABLES DISPO_ALEATOIRE.
(Ceci ne devrait pas avoir d'incidences sur ton formulaire d'affichage
car tu ne souhaitais voir qu'un seule fois chaque candidat). Ceci
empeche donc le filtrage puisque les données ne sont plus dans la source.

Contournement pour le filtrage:
Par souci de simplification, j'ai créé une requête intermediaire
REQ_INTERMED, dans l'onglet des Requêtes, qui fait appel à ta zone de
saisie txtMot et retourne les IdCandidat distincts correspondants .
(Voir en mode création).
Le Sql de cette requête est récupéré dans le code sur l'évènement click
du bouton btnOk et va servir de condition Where pour l'ouverture du
formulaire Sélection Aléatoire

Private Sub btnOK_Click()
Dim strWhere As String, qry As DAO.QueryDef
Dim strSQL As String
Set qry = CurrentDb.QueryDefs("REQ_INTERMED")
strSQL = qry.SQL
strWhere = "Candidats.IdCandidat In(" & strSQL & ")"
Set qry = Nothing
DoCmd.OpenForm "Sélection aléatoire", acNormal, , strWhere
...
End Sub

Au final, pour la saisie de 'assist' le formulaire affiche 3
enregistrements(3 personnes) contre 28 pour 3 personnes précédemment et
pour 'trust' 2 personnes contre 6. C'est ce que tu attendais, je suppose.


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

Je crois que dans les propriétés du formulaire Sélection Aléatoire,
onglet Données, il est resté quelque chose sur la ligne Filtré par du
genre : "[DESCRTRAVAIL] LIKE '*" & Nz(Me!txtMot) & "*'" ...
Tu peux vider cette ligne puisque le filtrage se fait maintenant par la
requête.

--
A+
Eric
http://users.skynet.be/mpfa/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Avatar
Luis
Bonjour Eric,
C'et exactement ça.
Tout d'abord excuse-moi, de ne pas avoir répondu avant, mais impossible de
me connecter, pour lire ta réponse et te répondre.
Et deuxièment un Wagon de mercis, car c'est exactement la solution que je
cherchais.

Luis


..../...

Je crois que dans les propriétés du formulaire Sélection Aléatoire,
onglet Données, il est resté quelque chose sur la ligne Filtré par du
genre : "[DESCRTRAVAIL] LIKE '*" & Nz(Me!txtMot) & "*'" ...
Tu peux vider cette ligne puisque le filtrage se fait maintenant par la
requête.

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



Avatar
Eric
Bonjour Luis,

Pas grave pour le délai de réponse, le plus pressé c'était pas moi ;-)
et merci pour le retour.

Bonjour Eric,
C'et exactement ça.
Tout d'abord excuse-moi, de ne pas avoir répondu avant, mais impossible de
me connecter, pour lire ta réponse et te répondre.
Et deuxièment un Wagon de mercis, car c'est exactement la solution que je
cherchais.


--
A+
Eric
http://users.skynet.be/mpfa/

1 2