Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > IHM
IHM Ce forum est dédié aux questions relatives à la création de formulaires et d'états, avec ou sans code VBA, et macros.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/08/2011, 13h21   #1
Invité de passage
 
Inscription : octobre 2010
Messages : 3
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 3
Points : 1
Points : 1
Par défaut Formulaire + liste déroulante et 2 tables

Bonjour,

j'utilise Access (pour la 1er fois ) pour gérer deux tables d'une base de données "TAB1" et "TAB2"
j'ai créé un formulaire avec une liste déroulante de code_ID et des champs pour afficher les données de la table selon le Code_ID.
le principe est simple :
  • si Code_ID se trouve dans TAB1 --> afficher l'enregistrement du TAB1 dans le formulaire
  • si Code_ID se trouve dans TAB2 --> afficher l'enregistrement du TAB2 dans le formulaire

voila le code que j'utilise :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 
Private Sub Code_ID_AfterUpdate()
    Dim oDb As DAO.Database
    Dim oRst As DAO.Recordset
    Set oDb = CurrentDb
    SQL = "SELECT TAB1.nom_projet , TAB1.phase, TAB1.date_engagement, TAB1.commentaire   FROM TAB1 WHERE [code1] ='" & Me.Code_ID.Value & "'"
 
    Set oRst = oDb.OpenRecordset(SQL, dbOpenDynaset)
 
    If Not oRst.EOF Then
 
        Me.Libelle.Value = oRst.Fields(0)
        Me.Phase.Value = oRst.Fields(1)
        Me.date_engagement.Value = oRst.Fields(2)
        Me.commentaire.Value = oRst.Fields(3)
 
 
    Else
 
 
        SQL = "SELECT TAB2.nom_projet , TAB2.phase,    TAB2.date_engagement, TAB2.commentaire   FROM TAB2 WHERE [code2] ='" & Me.Code_ID.Value & "'"
        Set oRsta = oDba.OpenRecordset(SQL, dbOpenDynaset)
        Me.Libelle.Value = oRst.Fields(0)
        Me.Phase.Value = oRst.Fields(1)
        Me.date_engagement.Value = oRst.Fields(2)
        Me.commentaire.Value = oRst.Fields(3)
 
 
    End If
 
        oDb.Close
        Set oDb = Nothing
        oRst.Close
        Set oRst = Nothing      
 
End Sub
N.B : code1, code2 sont respectivement les clés des 2 tables TAB1 et TAB2

Apres lancement du formulaire, si le Code_ID se trouve dans TAB1, les valeurs du TAB1 sont affichées sur le formulaire, mais si le Code_ID se trouve dans TAB2 je vois le message d'erreur suivant :

Citation:
Erreur d’exécution '2113'
Valeur non valide pour ce champ
!!!!

pouvez vous m'aider SVP à identifier le probleme ? je vous remercie d'avance

moi je pense que j'ai pas le droit d'utiliser deux fois la même Database et la même Recodset pour deux requetes SQL différentes sur deux tables différents !!!
j'ai essayé de déclarer d'autres Database et Recodset mais j'ai pas arrivé à le faire

à vous de voir
nokwiw est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 14h47   #2
Rédacteur

 
Avatar de ClaudeLELOUP
 
Homme Claude LELOUP
Chercheur de loisirs (ayant trouvé !)
Inscription : novembre 2006
Messages : 5 242
Détails du profil
Informations personnelles :
Nom : Homme Claude LELOUP
Âge : 66
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de loisirs (ayant trouvé !)
Secteur : Finance

Informations forums :
Inscription : novembre 2006
Messages : 5 242
Points : 11 040
Points : 11 040
Bonjour,

Et si tu faisais tout simple ?

Par exemple, dans ton formulaire :
- avec comme source une requête sur TAB2, qui limite l'affichage à l'enregistrement où son Code_ID = la valeur de la zone de liste que j'évoque plus bas, tu affiches les champs de TAB2 qui t'intéressent ;

- une zone de liste modifiable dont la source est la liste des Code_ID de Tab1 ;
- dans l'événement "après mise à jour" de cette zdl (donc quand l'utilisateur a choisi), tu rafraîchis l'affichage des champs (me.requery).

N'est-ce pas ce que tu souhaites ?
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 15h39   #3
Invité de passage
 
Inscription : octobre 2010
Messages : 3
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 3
Points : 1
Points : 1
Merci ClaudeLELOUP pour ta réponse,

si j'ai bien compris ce que t'as proposé, on risque de louper les lignes qui ne se trouvent pas sous TAB1, puisque la Zdl ne récupère que les Code_ID de TAB1,
je pense que ta propsition détecte les lignes qui se trouvent en commun entre les deux tables !!

je te remercie encore une fois pour ta réponse
nokwiw est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 15h53   #4
Rédacteur

 
Avatar de ClaudeLELOUP
 
Homme Claude LELOUP
Chercheur de loisirs (ayant trouvé !)
Inscription : novembre 2006
Messages : 5 242
Détails du profil
Informations personnelles :
Nom : Homme Claude LELOUP
Âge : 66
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de loisirs (ayant trouvé !)
Secteur : Finance

Informations forums :
Inscription : novembre 2006
Messages : 5 242
Points : 11 040
Points : 11 040
J'ai sans doute mal compris ce que tu veux.

Est-ce ceci ?

- l'utilisateur choisit un code dans une liste de codes possibles (union de Code_ID de TAB1 et Code_ID de TAB2) ;

- si ce code est dans TAB1 alors afficher les données de TAB1 ;

- si non afficher les données de TAB2.
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 16h08   #5
Invité de passage
 
Inscription : octobre 2010
Messages : 3
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 3
Points : 1
Points : 1
oui c'est bien ça,

et le code que j'ai mis était bon

j'ai arrivé à afficher les données des tables en fonction du Code_ID choisi dan la liste, le problème était dans la liste déroulante et nn pas le code

je te remercie ClaudeLELOUP pour ton aide

Cordialement,
nokwiw est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 17h35   #6
Rédacteur

 
Avatar de ClaudeLELOUP
 
Homme Claude LELOUP
Chercheur de loisirs (ayant trouvé !)
Inscription : novembre 2006
Messages : 5 242
Détails du profil
Informations personnelles :
Nom : Homme Claude LELOUP
Âge : 66
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de loisirs (ayant trouvé !)
Secteur : Finance

Informations forums :
Inscription : novembre 2006
Messages : 5 242
Points : 11 040
Points : 11 040
Il n'empêche que tu peux faire beaucoup plus simple.

Lorsque le code est choisi, tu vérifies à l'aide d'un Dcount() si ce code se trouve dans ta TAB1.

Si oui, tu assignes TAB1 comme source du formulaire.
Si non, tu assignes TAB2 comme source du formulaire.


Si tu veux te documenter sur Dcount() vois :
-Les fonctions de domaine (Philippe JOCHMANS)
http://starec.developpez.com/tuto/fonctionsdomaines/
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h13.


 
 
 
 
Partenaires

Hébergement Web