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

Tablie liée à 2 autres

6 réponses
Avatar
franck001
Bonjour à tous,

voici mon petit casse tête dont la solution doit être simple pour ceux qui
maitrisent mais je n'ai pas trouvé de solution sur le forum.
J'ai 3 tables A, B, C
Ma table C est liée par ses champs "ChampA" et "ChampB" à mes tables A et B
J'arrive à faire ma première étape qui consiste à créer via un formulaire
mes Enregistrements de la Table A et de créer par un sous-fourmulaire associé
mes Enregistrements associés de la Table C

C'est à l'étape 2 que je bloque, je voudrais sur un formulaire créer mes
enregistrements de ma Table B et via un sous formulaire par exemple choisir
les enregistrements de la Table C (Déjà créés précédemment à l'étape 1) que
je veux associé à ce nouvel enregistrement ?

Avez vous quelque chsoe dans le genre?

Merci d'avance

------(-_-)°zZz------
Franck
http://www.deschamps-web.com

6 réponses

Avatar
Dragan
Bonjour,
d'après ce que j'ai compris les enegistrements de la tableC que tu cherches
sont ceux qui ont un champA non-null et champB null.

"franck001" a écrit :

Bonjour à tous,

voici mon petit casse tête dont la solution doit être simple pour ceux qui
maitrisent mais je n'ai pas trouvé de solution sur le forum.
J'ai 3 tables A, B, C
Ma table C est liée par ses champs "ChampA" et "ChampB" à mes tables A et B
J'arrive à faire ma première étape qui consiste à créer via un formulaire
mes Enregistrements de la Table A et de créer par un sous-fourmulaire associé
mes Enregistrements associés de la Table C

C'est à l'étape 2 que je bloque, je voudrais sur un formulaire créer mes
enregistrements de ma Table B et via un sous formulaire par exemple choisir
les enregistrements de la Table C (Déjà créés précédemment à l'étape 1) que
je veux associé à ce nouvel enregistrement ?

Avez vous quelque chsoe dans le genre?

Merci d'avance

------(-_-)°zZz------
Franck
http://www.deschamps-web.com


Avatar
franck001
Le problème n'est pas d'afficher les enregistrements qui ont un champA
non-null et champB null. C'est de trouver une manière de pouvoir associé les
enregistrements de la table C à la table B en partant d'un formulaire de
création d'un enregistrement de la table B.

------(-_-)°zZz------
Franck
http://www.deschamps-web.com


"Dragan" a écrit :

Bonjour,
d'après ce que j'ai compris les enegistrements de la tableC que tu cherches
sont ceux qui ont un champA non-null et champB null.

"franck001" a écrit :

> Bonjour à tous,
>
> voici mon petit casse tête dont la solution doit être simple pour ceux qui
> maitrisent mais je n'ai pas trouvé de solution sur le forum.
> J'ai 3 tables A, B, C
> Ma table C est liée par ses champs "ChampA" et "ChampB" à mes tables A et B
> J'arrive à faire ma première étape qui consiste à créer via un formulaire
> mes Enregistrements de la Table A et de créer par un sous-fourmulaire associé
> mes Enregistrements associés de la Table C
>
> C'est à l'étape 2 que je bloque, je voudrais sur un formulaire créer mes
> enregistrements de ma Table B et via un sous formulaire par exemple choisir
> les enregistrements de la Table C (Déjà créés précédemment à l'étape 1) que
> je veux associé à ce nouvel enregistrement ?
>
> Avez vous quelque chsoe dans le genre?
>
> Merci d'avance
>
> ------(-_-)°zZz------
> Franck
> http://www.deschamps-web.com


Avatar
Dragan
Oui, et donc.
tu dis avoir une tableC contenant un CHAMPA commun avec la tableA et CHAMPB
commun avec la tableB.
Tu as créé un enregistrement dans la tableA, et les enregistrements
correspondant dans la tableC; par conséquent ces enregistrements ont un
CHAMPB null ou ="" ou =0.
Lors de la création d'un enrgistrement dans la tableB seul les
enregistrements de la tableC dont le CHAMPB n'a pas déjà été rempli sont
concernés.
Maintenant, tu as le choix :

Soit tu fais le choix d'ajouter un enregitrement dans B en cliquant dans la
colonne correspondante dans le sousformulaireC.

Soit dans le formulaireB; tu ajoutes une liste contenant les
enregistrements de C dont le champB est null (ou="" ou =0) et tu mets à jour
le champb de ceux tu auras sélectionné parmi cette liste.

Soit c'est uniquement à partir d'un formulaire pour C que tu :
1) Sélectionnes ou ajoutes un enregistrement de A
2) Sélectionnes ou ajoutes un enregistrement de B
Avatar
franck001
Bonjour Dragan,

merci de passer du temps sur mon pb, donc effectivement ej veux faire ta
solution 2: "dans le formulaireB; tu ajoutes une liste contenant les
enregistrements de C dont le champB est null (ou="" ou =0) et tu mets à jour
le champb de ceux tu auras sélectionné parmi cette liste."

Comment fais tu pour "ajouter une liste" en allant taper dans les
enregistrements C dont ChampB est Null.

Merci encore

Franck

"Dragan" a écrit :

Oui, et donc.
tu dis avoir une tableC contenant un CHAMPA commun avec la tableA et CHAMPB
commun avec la tableB.
Tu as créé un enregistrement dans la tableA, et les enregistrements
correspondant dans la tableC; par conséquent ces enregistrements ont un
CHAMPB null ou ="" ou =0.
Lors de la création d'un enrgistrement dans la tableB seul les
enregistrements de la tableC dont le CHAMPB n'a pas déjà été rempli sont
concernés.
Maintenant, tu as le choix :

Soit tu fais le choix d'ajouter un enregitrement dans B en cliquant dans la
colonne correspondante dans le sousformulaireC.

Soit dans le formulaireB; tu ajoutes une liste contenant les
enregistrements de C dont le champB est null (ou="" ou =0) et tu mets à jour
le champb de ceux tu auras sélectionné parmi cette liste.

Soit c'est uniquement à partir d'un formulaire pour C que tu :
1) Sélectionnes ou ajoutes un enregistrement de A
2) Sélectionnes ou ajoutes un enregistrement de B




Avatar
Dragan
Bonjour,

Pour l'exemple j'appelle :
- ChampB, le champ commun aux TableB et TableC
- CleC, la clé primaire de la TableC
- SousFormC, le contrôle sous-formulaire de la TableC
- ListeC, le contrôle zone de liste

1) place dans le formulaire B le sous-formulaire C pour pouvoir consulter
les enregistrements de C.
2) crée une liste dans formulaire B dont la requête source est :
SELECT * FROM TableC WHERE ChampB=0; (si le champB est numérique , ="" si
c'est du texte..)

3) Choisis "Procédure événementielle" pour l'événement Sur double Clique de
la liste LISTEC puis Clique sur le bouton ... (à droite) et tu écris ce code

Private Sub ListeC_DblClick(Cancel as Integer)
'Si l'enregistrement TableB n' a pas été créé alors Ne rien faire
IF ISNULL([ChampB]) THEN CANCEL=1:EXIT SUB
'Mis à jour du champB de l'enregistrement de la TableC choisis lors du
DblClique
DOCMD.RUNSQL "UPDATE TableC SET ChampB=" & [ChampB] & " WHERE [CleC]=" &
ListeC.Value
'Rafraichissement de sous-formulaire C; pour voir le nouvel enregistrement
dans la liste
SOUSFORMC.FORM.REQUERY
'Rafraichissement de la liste LISTEC pour ne plus voir l'enregistrement de
la TableC mis à jour
LISTEC.REQUERY
End sub
Avatar
franck001
Merci c pas mal du tout et assez intuitif !


------(-_-)°zZz------
Franck
http://www.deschamps-web.com


"Dragan" a écrit :

Bonjour,

Pour l'exemple j'appelle :
- ChampB, le champ commun aux TableB et TableC
- CleC, la clé primaire de la TableC
- SousFormC, le contrôle sous-formulaire de la TableC
- ListeC, le contrôle zone de liste

1) place dans le formulaire B le sous-formulaire C pour pouvoir consulter
les enregistrements de C.
2) crée une liste dans formulaire B dont la requête source est :
SELECT * FROM TableC WHERE ChampB=0; (si le champB est numérique , ="" si
c'est du texte..)

3) Choisis "Procédure événementielle" pour l'événement Sur double Clique de
la liste LISTEC puis Clique sur le bouton ... (à droite) et tu écris ce code

Private Sub ListeC_DblClick(Cancel as Integer)
'Si l'enregistrement TableB n' a pas été créé alors Ne rien faire
IF ISNULL([ChampB]) THEN CANCEL=1:EXIT SUB
'Mis à jour du champB de l'enregistrement de la TableC choisis lors du
DblClique
DOCMD.RUNSQL "UPDATE TableC SET ChampB=" & [ChampB] & " WHERE [CleC]=" &
ListeC.Value
'Rafraichissement de sous-formulaire C; pour voir le nouvel enregistrement
dans la liste
SOUSFORMC.FORM.REQUERY
'Rafraichissement de la liste LISTEC pour ne plus voir l'enregistrement de
la TableC mis à jour
LISTEC.REQUERY
End sub