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...)
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.
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 :
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.
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 ?
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>
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.
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 ?
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.
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
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
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.
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]