formateur informatique

Transmettre données entre formulaires par VBA Access

Accueil  >  Bureautique  >  Access  >  Access VBA  >  Transmettre données entre formulaires par VBA Access
Livres à télécharger


Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :


Inscription Newsletter    Abonner à Youtube    Vidéos astuces Instagram
Sujets que vous pourriez aussi aimer :


Transmettre des informations entre formulaires par le code VBA

Nous reprenons ici les travaux que nous avons commencés dans la formation précédente pour charger dynamiquement le contenu d'une liste déroulante en fonction des informations de tables. Il s'agit à l'issue de bâtir une application Access capable d'évaluer les candidats par des questionnaires à choix multiples. Mais nous progressons pas à pas. Dans cette partie, nous devons faire communiquer deux formulaires, en transmettant des données de l'un à l'autre. Au choix du questionnaire par l'utilisateur dans la liste déroulante du premier formulaire, le formulaire questions doit s'afficher en proposant de dérouler le QCM, selon les informations transmises, traitées et récupérées.

Choix dans liste déroulante pour transmission données formulaire en VBA Access

La base de données de l'application Access
Nous allons récupérer la base de données qui propose déjà le contenu chargé dynamiquement. Le formulaire questions existe déjà. Il a été conçu sur l'une des tables de questionnaires qui ont toutes la même structure. Au choix dans la liste déroulante, il s'agit de commander l'ouverture du formulaire questions avec, comme source de données, la table correspondant au questionnaire choisi par l'utilisateur. Sur ce formulaire, il existe une étiquette nommée transf qui sert à afficher le nom du questionnaire. Nous devons donc être capables de passer cette information par le code VBA. Ces informations ne peuvent se transmettre que lorsque le formulaire est ouvert en mode conception (Design) par le code.
  • Dans le volet des objets Access, cliquer avec le bouton droit sur le formulaire Listes,
  • Dans le menu contextuel, choisir mode Création,
  • Cliquer sur le bouton Feuille de propriétés du ruban Création si elle n'est pas visible,
  • Sélectionner la liste déroulante,
  • Activer l'onglet Evénement de sa feuille de propriétés,
  • Cliquer sur le bouton de son événement AVANT MAJ,
  • Dans la boîte de dialogue, choisirGénérateur de code et valider,
Nous basculons dans l'éditeur de code, entre les bornes de la procédure Liste_BeforeUpdate (Cancel As Integer). Les instructions que nous y écrirons, se déclencheront à la mise à jour de la liste, qui se produira par exemple au clic sur l'un de ses éléments.

Vous notez la présence dans ce module, du code de la procédure Form_Load, que nous avons développée dans la formation précédente. C'est ainsi que nous avons chargé dynamiquement le contenu de la liste déroulante, en fonction des informations des tables existantes.
  • Entre les bornes de la procédure événementielle Liste_BeforeUpdate, ajouter le code suivant :
DoCmd.OpenForm 'questions', acDesign
Form_questions.transf.Caption = Liste.Text
DoCmd.Close acForm, 'questions', acSaveYes

DoCmd.OpenForm 'questions', acNormal


L'interaction entre les objets Access par le code VBA et notamment les formulaires, se réalise grâce à l'objet DoCmd. Sa méthode OpenForm permet d'accéder au formulaire désigné en paramètre, en conception (acDesign), afin d'y apporter une modification avant de commander son ouverture. La propriété Caption du Label permet alors d'affecter son contenu à celui du nom choisi par l'utilisateur dans la liste déroulante. En l'occurrence, il s'agit du nom d'une table correspondant à un questionnaire. Il suffit donc de fermer ce formulaire (méthode Close), en enregistrant les modifications (Paramètre acSaveYes). Ainsi nous pouvons commander son exécution dans la foulée (Méthode OpenForm et paramètre acNormal) pour constater que les modifications ont pris effet.
Transférer données entre formulaires par Visual Basic Access
  • Enregistrer les modifications (CTRL + S) et basculer sur l'application Access (ALT + F11),
  • Double cliquer sur le formulaire Listes depuis le volet des objets Access,
  • Choisir un questionnaire dans la liste déroulante,
Vous constatez l'ouverture du formulaire questions avec l'information correctement transmise au contrôle étiquette du formulaire de destination. En revanche, le contenu du questionnaire n'est pas cohérent. Il ne correspond pas encore au titre annoncé. Nous avons en effet réussi à transmettre une donnée d'un formulaire à un autre, grâce à un contrôle et au code VBA Access. Mais nous n'avons pas encore exploité cette donnée pour modifier la source du formulaire de destination dynamiquement.

Modifier la source d'un Formulaire Access par le code VBA
Le nom de cette source est connu. Il a été transmis par le formulaire de la liste déroulante, au contrôle Label nommé transf, grâce au code Visual Basic. Il s'agit donc de récupérer ce paramètre au chargement du formulaire questions et de l'affecter comme sa source de contrôle.
  • Fermer les deux formulaires,
  • Dans le volet des objets Access, cliquer avec le bouton droit sur le formulaire questions,
  • Dans le menu contextuel, choisir Mode Création,
  • Activer l'onglet Evénement de la feuille de propriétés du formulaire,
  • Cliquer sur le bouton de son événement Sur chargement,
  • Dans la boîte de dialogue qui suit, choisir Générateur de code et valider,
Code VBA sur ouverture formulaire Access pour modifier source contrôle

Nous sommes de retour dans l'éditeur de code Visual Basic Access entre les bornes de la procédure événementielle Form_Load pour le formulaire questions. C'est ce qu'illustre la capture ci-dessus.
  • Entre les bornes de la procédure, ajouter les deux lignes de code suivantes :
Me.RecordSource = transf.Caption
REPONSES.SetFocus


Me est un objet de programmation qui fait référence à l'instance de la classe en cours. En d'autres termes, il désigne l'objet parent actif, soit le formulaire lui-même. C'est pourquoi en découlent les propriétés et méthodes d'un objet formulaire, comme la propriété RecordSource. Cette dernière désigne la source de contrôle. Comme nous l'affectons à la valeur transmise dans l'étiquette transf, nous fixons la source de contrôle du formulaire sur le nom de la table choisi par l'utilisateur et transmis par le code VBA. Dans la foulée, la méthode SetFocus d'un contrôle de formulaire, permet d'activer la zone de saisie REPONSES afin de ne pas placer le pointeur sur le contrôle contenant la question.

Il reste à faire une vérification complète pour confirmer qu'après avoir transmis le paramètre entre formulaires, nous avons bien réussi à recalibrer dynamiquement la source de données du formulaire de destination, afin que ce dernier adapte son contenu, selon la demande de l'utilisateur, par le biais de la liste déroulante.
  • Enregistrer les modifications (CTRL + S) et basculer sur Access (ALT + F11),
  • Double cliquer sur le formulaire Listes depuis le volet des objets Access,
  • Choisir un questionnaire dans la liste déroulante,
Définir dynamiquement la source de données du formulaire Access par code VBA



Tout fonctionne parfaitement. Le formulaire Questions réceptionne la donnée émanant du formulaires Listes, transmise par le code VBA. Elle l'exploite au chargement, toujours par le code Visual Basic, afin d'adapter sa source de données et de proposer le contenu correspondant à la demande.

Pas à pas, notre application Access d'évaluation sous forme de QCM évolue. Dans une prochaine étape, il s'agira de proposer à l'utilisateur de formuler un choix de réponse, par le biais d'un bouton par exemple. Ce choix devra être comparé avec la bonne réponse archivée dans la table, pour comptabiliser les points et fournir une synthèse de l'évaluation à l'issue.

Pour information, les questionnaires proposés dans cette base de données sont anciens. Ils ne sont donc plus en adéquation avec les actuelles versions des logiciels concernés. Mais ils sont tout à fait exploitables pour monter l'application dynamique. Lorsque le QCM Access sera totalement fonctionnel, chaque ajout de questionnaire sera intégré dynamiquement par l'application Visual Basic.
 
Sur Facebook
Sur Youtube
Les livres
Contact
Mentions légales



Abonnement à la chaîne Youtube
Partager la formation
Partager sur Facebook
Partager sur Twitter
Partager sur LinkedIn