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

Messages postés
7
Date d'inscription
vendredi 18 octobre 2019
Statut
Membre
Dernière intervention
7 novembre 2019
- - Dernière réponse : i_john
Messages postés
7
Date d'inscription
vendredi 18 octobre 2019
Statut
Membre
Dernière intervention
7 novembre 2019
- 20 oct. 2019 à 00:09
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/open?id=1HPoCQ8UpM3h9DFmJXixiEAu_VOqb_Paq
Afficher la suite 

1 réponse

Messages postés
8909
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
12 novembre 2019
449
0
Merci
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?
i_john
Messages postés
7
Date d'inscription
vendredi 18 octobre 2019
Statut
Membre
Dernière intervention
7 novembre 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://drive.google.com/open?id=1nLhRf0Nbcu4ltbSRwHNiw9d6d-1zSmja

A+
yg_be
Messages postés
8909
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
12 novembre 2019
449 > i_john
Messages postés
7
Date d'inscription
vendredi 18 octobre 2019
Statut
Membre
Dernière intervention
7 novembre 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.
i_john
Messages postés
7
Date d'inscription
vendredi 18 octobre 2019
Statut
Membre
Dernière intervention
7 novembre 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"
yg_be
Messages postés
8909
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
12 novembre 2019
449 > i_john
Messages postés
7
Date d'inscription
vendredi 18 octobre 2019
Statut
Membre
Dernière intervention
7 novembre 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).
i_john
Messages postés
7
Date d'inscription
vendredi 18 octobre 2019
Statut
Membre
Dernière intervention
7 novembre 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://drive.google.com/open?id=1Jee2OkHgLZNCIA-BA7fKZ_5M01ROmoZhTfqj8ycHatQ

Merci de tout cœur pour votre patience

BDD:
https://drive.google.com/open?id=1cfl-RNTM17WZk7IR1HBN_hLqEkptKt0S
Commenter la réponse de yg_be