Attaquons en essayant d'être le plus synthétique possible :
1- le langage VBA est un langage basé sur plusieurs bibliothèques. Tu peux les explorer en faisant F2 depuis un module quelconque. (Je dirai même, tu DOIS les explorer...). Pour gérer ces bibliothèques, il faut aller dans Outils/Références, où une boite de dialogue te liste les références actives dans le projet (la base de données...) et les autres références existant sur ton ordinateur.
2- pour trouver de l'aide il te faut prendre de bonnes habitudes : la rechercher d'abord dans l'aide en ligne. Pour cela, sur les mots que tu ne connais pas, appuies sur le touche F1. Tu obtiendras ainsi l'aide relative au mot sélectionné. C'est une partie extrêmement importante. Il faut lire beaucoup d'informations pour progresser en VBA. la rechercher ensuite dans les posts existant sur le site. Pour cela, il y a un outils rechercher en haut de chaque page. Enfin, si après tout cela, tu n'as toujours pas trouvé, alors il faut poser la question le plus clairement possible en donnant tous les moyens à ceux qui seraient amenés à te répondre de comprendre ce que tu veux. J'en profite pour t'indiquer que le lien dans ma signature m'a beaucoup fait rire, à propos de la manière de poser des questions.
Ceci étant posé, examinons ton problème.
Tu souhaite que, lorsque tu cliques sur un bouton d'un premier formulaire (formAuteurs), un autre formulaire (formLivres) s'ouvre et que ce dernier soit prérempli avec une information venant du premier formulaire.
En examinant ce problème, on détermine 2 prédicats importants : Quand et Quoi.
Quoi détermine la ou les actions à entreprendre.
Quand détermine le moment où elles sont déclenché, l'évènement qui les lance.
Examinons d'abord le QUOI
Ouvrir un formulaire donné (formLivres) en lui passant un élément du formulaire courant. Cette ouverture doit se faire en mode ajout.
Nous avons donc préparé un formulaire formLivres basé sur la table des livres.
Si nous travaillions de manière interactive avec access, nous prendrions l'option 'OUVRIR' du formulaire, après avoir sélectionné son nom. Nous allons faire de même, mais en code. La ligne suivante :
Application. DoCmd . OpenForm " formLivres " ,,,,acFormAdd,,me. [N°Auteur]
|
retrace exactement cette demande :
On y retrouve une première indication importante :
Application. DoCmd . OpenForm
|
qu'on pourrait traduire par : "Dans l'application Access en cours (Application), faire la commande (DoCmd) ouvrir le formulaire (OpenForm)"
Ouvrir le formulaire d'accord, mais lequel ? Comment ? en mode création ? en boite de dialogue ? en filtrant les données ? ... beaucoup de questions dont on trouvera la réponse dans la suite de la ligne :
Copies la ligne dans un module, puis fait F1 après avoir sélectionné OpenForm. Voici un extrait de ce que tu obtiendras :
l'aide Access a écrit:
expression.OpenForm(NomFormulaire, Afficher, NomFiltre, ConditionWhere, ModeDonnées, Modefenêtre, ArgOuverture)
Il s'agit de la syntaxe utilisées pour la méthode OpenForm.
La première chose attendue : Le nom du formulaire. Comme c'est du texte qui est attendu, on le mettra entre guillemets""
Afficher correspond au mode d'affichage : en mode création, en mode formulaire, ... par défaut, c'est à dire si tu ne mets rien, ce sera en mode formulaire.
NomFiltre et ConditionWhere correspondent à des manières différentes de filtrer, de n'afficher qu'une certaine quantité d'enregistrements.
ModeDonnées te permet notamment en mettant acFormAdd de dire que tu ne souhaite qu'ajouter de nouvelles données. ModeFenêtre te permettra par exemple de faire une boite de dialogue
Enfin ArgOuverture (que nous appelons, bicoz VBA is in inglich , OpenArgs) te permet de définir une chaine de caractères que recevra le formulaire qui s'ouvre. C'est la raison pour laquelle nous y mettons ME.[N°Auteur], ce qui corresponda à dire : La valeur du contrôle [N°Auteur] qui est en Moi(sous-entendu le formulaire dans lequel se trouve ce code).
Voyons maintenant le QUAND
Il s'agit, d'après ton énoncé de cliquer sur un bouton...
Donc, cette action décrite plus haut se fera sur le clique du bouton.
Chaque objet des formulaires contient des évènements (actions de l'utilisateur ou du système) que nous pouvons intercepter pour y mettre une série d'actions à entreprendre. Lorsque nous programmons en VBA ces évènements, nous céons ce que nous appelons des procédure evènementielles.
Dans ton cas, si tu demandes les propriétés de ton bouton, que tu regardes l'onglet evènements, tu trouveras l'évènement sur clic. Un double-clic dans la zone blanche de droite fera apparaitre [Procédure évènementielle]. Cliques maintenant sur les 3 points à droite, et tu te retrouvera dans un module (celui du formulaire, c'est inscrit dans la barre de titre du module) dans une sub (procédure) déclarée Private( car limitée au formulaire) qui a un nom composé :
Private sub cmdLivres_Click ()
End Sub
|
Je suis parti du principe que le bouton s'appelait cmdLivres
La première partie du nom fait référence au nom de l'objet, la deuxième à l'évènement concerné.
Pour précisier que c'est à ce moment là que nous voulons faire l'action examinée plus haut, il va falloir mettre l'action dans la procédure, ce qui donne le résultat suivant :
Private sub cmdLivres_Click ()
Application. DoCmd . OpenForm " formLivres " ,,,,acFormAdd,,me. [N°Auteur]
End Sub
|
La première partie du travail est terminée.
Maintenant que nous avons réussi à ouvrir un formulaire en lui passant des informations, il va falloir que ce dernier (formLivres) exploite ces informations. Alors ? Il va faire QUOI et QUAND ?
Tu remarques que nous sommes toujours dans le même cas du Quoi et du Quand!
QUOI
Il va vérifier s'il a recu un openarg. si c'est le cas, il mettra la valeur recue dans son [N°Auteur], sinon, il n'y a rien lieu de faire.
Cela se traduit comme suit :
If IsNull (Me. OpenArgs ) Then
Else
Me. [N°Auteur]= Clng (Me. OpenArgs )
End if
|
Si en moi (Me) les OpenArgs ne sont pas définis (IsNull()), alors
puisqu'il n'y a rien à faire, nous ne préciserons aucune ligne particulière en dessous, mais juste un petit commentaire. On le fait toujours précéder d'un '(apostrophe). Sinon (Else) mets la valeur de l'openarg convertie en entier long (Clng(Me.OpenArg)) dans le contrôle [N°Auteur] qui est en Moi.
Fin des tests (End If).
Reste à savoir quand cette vérification doit se faire !
A l'ouverture du formulaire semble êstre une bonne solution.
QUAND
Dans les propriétés du formulaire formlivres, tu regardes l'onglet des évènements, et tu trouves sur ouverture. tu accède à la procédure évènementielle de la même manière que pour le bouton et tu obtiens :
Private Sub Form_Open (Cancel As Integer)
End Sub
|
Pour que la série d'actions décrites ci-dessus s'accomplissent, tu n'as plus qu'à les mettre dans cette procédure d'évènement. Le résultat est donc :
Private Sub Form_Open (Cancel As Integer)
If IsNull (Me. OpenArgs ) Then
Else
Me. [N°Auteur]= Clng (Me. OpenArgs )
End if
End Sub
|
En résumé, tu as fait 2 procédure évènementielles; Une que tu déclenches en cliquant sur un bouton. une qui se déclenche à chaque ouverture du formulaire livres. Dans chaque procédure, tu as mis les actions que tu voulais voir s'accomplir à ce moment précis.
Ce sont les principe de base que tu viens de voir ici.
Il ne te reste plus qu'à acquérir plus de vocabulaire, et de syntaxes. C'est l'expérience ou la formation qui t'amèneront tout ca. Mais dans tous les cas, la lecture de l'aide reste indispensable!
|