Faire disparaître de la liste déroulante toute valeur déjà selectionnée [Résolu]

Signaler
Messages postés
9
Date d'inscription
vendredi 18 octobre 2019
Statut
Membre
Dernière intervention
13 décembre 2019
-
Messages postés
9
Date d'inscription
vendredi 18 octobre 2019
Statut
Membre
Dernière intervention
13 décembre 2019
-
Bonjour,



Configuration: Windows / Chrome 77.0.3865.120


Bonjour à tous,
J’ai un problème identite à Issakol
En vue de préparer une distribution de bon de restauration et au regard du nombre de personnes ciblé, j’envisage créer une base de données sous access 2003 pour le suivi de cette activité
Informations :
1)les bénéficiaires seront enregistrés avant le début de l’opération
2)chaque semaine, des bons de restauration sont remis à ceux qui se présentent
3)le lendemain de chaque opération, deux états doivent être établis ; ceux qui se sont présentés d’un côté et ceux qui ne sont pas venus de l’autre
4)en fin d’année, une situation globale est établie à destination de plusieurs intervenants
De ce fait, j’ai pensé à la confection de trois tables et un formulaire comme ceci :
Tblbenef
idbe Nom Prénom Genre Localité Piece_id civilite

Tblbons
idbo Nature

Tbldistrib
Iddis Date Nom Nature

La table tbldistrib est utilisée comme formulaire nommé formdistrib
A partir de ce formulaire, je voudrais pouvoir enlever toute valeur sélectionnée dans les deux listes déroulantes afin qu’à la sélection suivante on ne les voit plus.
Ceci me permettra d’imprimer les deux états cités-dessus
Ci-Joint la BDD

https://drive.google.com/file/d/1HPoCQ8UpM3h9DFmJXixiEAu_VOqb_Paq/view?usp=drive_open

1 réponse

Messages postés
11779
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
9 août 2020
674
bonjour, je suggère plutôt les champs suivants dans la table Tbldistrib :
Iddis Date idbe idbo

Nous ne pouvons pas faire l'exercice à ta place: qu'as-tu essayé, as-tu une question?
Messages postés
9
Date d'inscription
vendredi 18 octobre 2019
Statut
Membre
Dernière intervention
13 décembre 2019

Bonjour et Merci yg_be.

j'ai changé les nom des champs de la table Tbldistrib comme suggérer et leux deux champs dans le formulaire Formdistrib fonctionnent comme je le souhaitais ; à savoir qu'après un choix dans l'un ou l'autre des champs la valeur sélectionnée ne peut plus l'être à nouveau à moins de procéder à une réinitialisation. Voila mes codes :

code pour la réinitialisation des 2 champs

Private Sub CommandReinitialiser_Click()
DoCmd.SetWarnings False
DoCmd.RunSQL "Update tblbenef Set tblbenef.x = False;"
DoCmd.RunSQL "Update tblbons Set tblbons.y = False;"
DoCmd.SetWarnings True

Me.Requery: Me.Refresh

End Sub


code pour le champ idbe

Private Sub idbe_AfterUpdate()
Dim strSQL As String

' mise à jour de la table tblbenef sélection
strSQL = "Update tblbenef Set x = true Where idbe = " & Me.idbe.Column(1) & ";"
CurrentDb.Execute strSQL, dbFailOnError

' rechargement de la liste avec les nouvelles valeurs
Me.idbe.RowSource = Me.idbe.RowSource

End Sub


Code pour le champ idbo

Private Sub idbo_AfterUpdate()
Dim strSQL As String

' mise à jour de la table tblbons après sélection
strSQL = "Update tblbons set y = True where idbo = " & Me.idbo.Column(2) & ""
CurrentDb.Execute strSQL, dbFailOnError

'rechargement de la liste avec les nouvelles valeurs
Me.idbo.RowSource = Me.idbo.RowSource
End Sub


Mon problème réside au niveau de l'état
Quand je le crée, je n'ai au maximum que 4 champs qui s'affiche avec leurs données ; les données de la table Tbldistrib alors que je voudrais que même des données des tables Tblbenef et Tblbons puissent aussi s'afficher sur l'état parce que je me dis qu'elles sont liées à la table Tbldistrib.
j'ai crée des champ indépendant dans l'état et tenté par exemple [idbo].[Column](2) mais rien
J'ai essayé de modifier la source de l'état en utilisant SQL tels :
Select from left join where ou Select from inner join where mais la aussi je bute
dans tous les cas, j'ai le résultat suivant : #Nom ?

Voila en gros mon problème. Si d'autres informations vous sont nécessaire je reste ouvert
https://accounts.google.com/ServiceLogin?service=wise&passive=1209600&continue=https://drive.google.com/open?id%3D1nLhRf0Nbcu4ltbSRwHNiw9d6d-1zSmja&followup=https://drive.google.com/open?id%3D1nLhRf0Nbcu4ltbSRwHNiw9d6d-1zSmja

A+
Messages postés
11779
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
9 août 2020
674 >
Messages postés
9
Date d'inscription
vendredi 18 octobre 2019
Statut
Membre
Dernière intervention
13 décembre 2019

il est préférable de d'abord tester la requête hors de l'état.
n'hésite pas à être précis: tu ne partages pas la syntaxe de la requête, et tu n'expliques pas précisément le résultat que tu attends.
utiliser "x" et "y" comme nom de champ n'est vraiment pas une manière de clarifier la situation.
Messages postés
9
Date d'inscription
vendredi 18 octobre 2019
Statut
Membre
Dernière intervention
13 décembre 2019

Ok avec le code ci-dessous j'ai une résultat ASSEZ bon mais qui ne convainc pas

SELECT *
FROM tblbenef LEFT JOIN tbldistrib ON tblbenef.idbe = tbldistrib.iddis;


Je m'explique :
j'aurai voulu que la requête puisse lier les tables Tblbenef et Tblbons à la table Tbldistrib. Mais cette dernière ne peut faire le lien qu'avec l'une ou l'autre des 2 tables.

Quand j'essaie de lier les tables Tblbenef et Tblbons à la table Tbldistrib avec le code ci-après

SELECT *
FROM (tblbenef LEFT JOIN tbldistrib ON tblbenef.idbe = tbldistrib.iddis) RIGHT JOIN tblbons ON tbldistrib.iddis = tblbons.idbo;


ce message apparaît : "instruction SQL non exécutée en raison de jointures externes ambiguës"
Messages postés
11779
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
9 août 2020
674 >
Messages postés
9
Date d'inscription
vendredi 18 octobre 2019
Statut
Membre
Dernière intervention
13 décembre 2019

tu montres la syntaxe, il est utile aussi d'expliquer ce que tu veux obtenir.
commence pas faire des jointures simples, ou fais deux jointures de même sens (deux gauches ou deux droites).
Messages postés
9
Date d'inscription
vendredi 18 octobre 2019
Statut
Membre
Dernière intervention
13 décembre 2019

Bonsoir,

Vous aviez parfaitement raison à propos de la structure même de la BDD.
J’ai d’abord revu toutes les relations entre les 3 tables à savoir tblbenef, tblbons et tbldistrib.
Les 2 premières tables sont tous liées à la table tbldistrib par les relations « un-à-plusieurs » par les champs idbe (clé primaire) de tblbenef à idbe de tbldistrib et idbo (clé primaire de tblbons à idbo de tbldistrib ; tous logés dans des champs de type numérique.

Ensuite avec vos conseils, j’ai le SQL suivant :

SELECT [Nom] & " " & [prenom] AS A, *
FROM tblbons INNER JOIN (tblbenef INNER JOIN tbldistrib ON tblbenef.idbe = tbldistrib.idbe) ON tblbons.idbo = tbldistrib.idbo;


Enfin, l’état est comme je le voulais. Il peut afficher les données souhaitées de toutes les tables.

https://docs.google.com/document/d/1Jee2OkHgLZNCIA-BA7fKZ_5M01ROmoZhTfqj8ycHatQ/edit?usp=drive_open&ouid=0

Merci de tout cœur pour votre patience

BDD:
https://drive.google.com/file/d/1cfl-RNTM17WZk7IR1HBN_hLqEkptKt0S/view?usp=drive_open