Lien entre tables ACCESS 2003 [Résolu]

Signaler
Messages postés
11
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
1 août 2006
-
Messages postés
124
Date d'inscription
mercredi 23 novembre 2005
Statut
Membre
Dernière intervention
19 septembre 2013
-
Bonjour,

J'ai créé une base de données Access à mon travail pour regrouper
mes informations clients.
Il y a une table 'client' avec les données générales (nom, adresse,
contact etc) puis des tables annexes 'compta', 'paie', 'gescom'
(précisions que je vends des logiciels de gestion).

J'ai donc créé un formulaire qui récapitule les données de la base
'client' et j'ai ajouté des boutons de commandes menant aux 3 autres
tables.

Le problème c'est que si je suis par exemple sur le client n°20 et
que je clique sur le bouton 'compta' pour connaître les infos
concernant son logiciel de compta, ça m'ouvre le formulaire 'compta'
mais je me remets au client n°1 !

Comment puis-je faire pour qu'il me mette directement les infos du
même numéro client ?
Est-ce qu'il faut mettre du code ? (car je ne sais pas faire...)

Merci de votre aide précieuse !
Raphaëlle

21 réponses

Messages postés
189
Date d'inscription
mercredi 21 août 2002
Statut
Membre
Dernière intervention
19 janvier 2011

il faut (de mes souvenirs d'access) insérer ton formulaire compta dans le formulaire client en tant que sous formulaire, et spécifier les propriétés champs père et champs fils, pour indiquer au sous formulaire compta que tu veux voir les infos liée/correspondant à celle de ton formulaire principal.
Messages postés
124
Date d'inscription
mercredi 23 novembre 2005
Statut
Membre
Dernière intervention
19 septembre 2013
3
Bonjour,


Sur le bouton qui ouvre le formulaire, il y a du code. Tu dois avoir du code style :


DoCmd.OpenForm "Compta", ......

Compta est le nom supposé de ton formulaire.


Après cette ligne, tu rajoutes :
Forms!Compta.Recordset.Filter "[N Client] " & Me.[N Client]


[N Client] est le nom du champ de la table Compta qui contient les numéros de client


Me.[N Client] est le nom du contrôle qui contient le numéro de client du formulaire principal qui te sert à ouvri r les autres.

Yann
Messages postés
189
Date d'inscription
mercredi 21 août 2002
Statut
Membre
Dernière intervention
19 janvier 2011

essaie de mettre Forms!client à la place de Me .... à tout hasard.
enfin le nom du form client.
Messages postés
124
Date d'inscription
mercredi 23 novembre 2005
Statut
Membre
Dernière intervention
19 septembre 2013
3
Ca me parait difficilement insérable dans une macro. Ce n'est pas très compliqué d'ouvrir un formulaire en code VBA :


Formulaire pricipal en mode création - Clique 2 fois sur le bouton pour avoir la fenêtre propriété - Dans l'onglet Evenement - Sur Clic - Clique sur les (...) à droite. Tu tombes dans l'éditeur VBA

Il te place en dessous d'une private Sub - Tu tapes :

Docmd.OpenForm "Compta"Forms!compta.Recordset.Filter "[Client] " & Me.[Intitulé]

La première ligne est pour ouvrir le formulaire que tu veux en le désignant par son nom ("Compta"). Docmd.OpenForm est une commande spéciale Access.
La deuxième ligne spécifie au formulaire que tu as ouvert que tu veux appliquer un filtre. Tu n'auras donc que les enregistrements qui t'intéressent.
Forms!Compta est pour désigner le formulaire - Recordset est la source du formulaire qui se charge automatiquement à l'ouverture (contenu de la table compta) - Filter est la commande pour appliquer un  filtre sur le recordset.

Yann
Messages postés
11
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
1 août 2006

Effectivement, de cette façon ça fonctionne mais comme il y a beaucoup d'informations sur chaque client, j'aurais préféré avoir plusieurs pages avec des liens entre elles par le nom du client ?

N'existe-il donc pas une autre solution ?
Messages postés
11
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
1 août 2006

Voilà ce que je craignaias... du code VBA...


Alors en fait je n'ai pas de code pour ouvrir le formulaire mais une macro toute bête qui ouvre le formulaire.
Donc j'ai essayé d'ajouter dans ma macro 'ExécuterCode' puis
Forms!compta.Recordset.Filter "[Client] " & Me.[Intitulé]

Où [Client] est le nom du champ client dans ma table 'compta' et où [Intitulé] est le champ du nom du client dans mon formulaire prinicpal 'client'

Ca ne fonctionne pas et ça me met le message suivant : "l'objet ne contient pas d'objet d'automatisation 'Me'." puis une fenêtre disant que l'action a échoué.

Pour info, je n'ai pas défini de clé primaire dans mes tables et les relations créées entre les tables n'ont aps d'intégrité rférencielle, est-ce que ça pose problème ?<?xml:namespace prefix v ns "urn:schemas-microsoft-com:vml" /??><v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"> <v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /??><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype>
Messages postés
11
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
1 août 2006

bah pas mieux :


"l'ojet auquel vous avez fait référence dans la procédure VB comme objet OLE n'est aps un objet OLE"

Alors docteur c'est grave ?
Messages postés
11
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
1 août 2006

Malheureusement rien ne se passe, j'ai écrit le code comme tu m'as dit mais après enregistrement des modifs, quand je rouvre le formulaire et que je clique sur le bouton de commande, ça ne marche pas.
Messages postés
124
Date d'inscription
mercredi 23 novembre 2005
Statut
Membre
Dernière intervention
19 septembre 2013
3
Fais une copie du contenu de l'éditeur VBA et colle le ici

Yann
Messages postés
11
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
1 août 2006

Option Compare Database


Private Sub COMPTA_Click()
DoCmd.OpenForm "COMPTA"Forms!COMPTA.Recordset.Filter "[Client] " & Me.[Intitulé]


End Sub
Messages postés
124
Date d'inscription
mercredi 23 novembre 2005
Statut
Membre
Dernière intervention
19 septembre 2013
3
Bah ca parait bon,


Qu'est ce que tu entends par ca ne marche pas ? Le formulaire ne s'ouvre pas ? Il n'affiche pas ce que tu veux ?
As-tu d'écrit [procédure evenementielle] en face de "Sur Clic" dans l'onglet Evenement de la propriété du bouton ?

Yann
Messages postés
124
Date d'inscription
mercredi 23 novembre 2005
Statut
Membre
Dernière intervention
19 septembre 2013
3
Autre méthode au lieu du code de tout à l'heure :

Private Sub COMPTA_Click()
DoCmd.OpenForm "COMPTA"Forms!COMPTA.Recordsource "Select * from Compta Where [Client] " & me.[intitulé]

End Sub

Si Me.Intitulé est du texte, il faut écrire :
[Client] = '" & me.[intitulé] & "'"

Yann
Messages postés
124
Date d'inscription
mercredi 23 novembre 2005
Statut
Membre
Dernière intervention
19 septembre 2013
3
Dans la syntaxe "From Compta", "Compta" désigne le nom de la table source du formulaire. Si elle a un nom différent du formulaire, il faut modifier la syntaxe.

Yann
Messages postés
11
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
1 août 2006

Alors répnse dans l'ordre :
- Oui le formulaire ne s'ouvre pas
- J'ai essayé sans [procédure évènementielle] et avec mais quand elle est affichée, ça m'ouvre VBA et ça me dit qu'il y a une erreur de code.
- Effectivement c'est bien du texte dans [Intitulé] donc peut-être que ça va marché
- Ma table compta a le même nom que mon formulaire compta

J'essaye les modifs...
Messages postés
11
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
1 août 2006

Toujours rien....
Messages postés
124
Date d'inscription
mercredi 23 novembre 2005
Statut
Membre
Dernière intervention
19 septembre 2013
3
Quelle erreur ?

Yann
Messages postés
11
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
1 août 2006

Euh ça me remet dans le code après un 'when' que je n'ai jamais écrit... et ça me dit "erreur de compilation : instruction incorrecte à l'extérieur d'une procédure"
je fais OK et le code que j'avais est parti...

Bref je pense que je vais opter pour les sous-formulaires... dans la mesure où on peut en mettre 3 et créer des onglets qui mettent en avant la page souhaitée histoire de gagner de la place
Messages postés
11
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
1 août 2006

Pour faire plus simple et si tu as le temps de jeter un oeil, je possède netviewer (logiciel type PCAnywhere) on se connecte et je te laisse regarder ma base.


j'ai juste à t'envoyer l'éxécutable rien de plus
Messages postés
124
Date d'inscription
mercredi 23 novembre 2005
Statut
Membre
Dernière intervention
19 septembre 2013
3
Désolé, je ne peux pas trop me permettre, je suis au boulot et j'ai un soucis d'internet chez moi. Si c'est une mdb, essaie de l'envoyer par mail sur [mailto:ytriquet@gmail.com ytriquet@gmail.com]

Yann
Messages postés
11
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
1 août 2006

c'est fait, merci
PS : enlève ton denrier message pour éviter le SPAM...