formateur informatique

Authentification et inscription en VBA Access

Accueil  >  Bureautique  >  Access  >  Access VBA  >  Authentification et inscription en 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    Inscription Newsletter
Sujets que vous pourriez aussi aimer :


Formulaire d'identification en VBA Access

Dans cette formation, nous reprenons le développement de l'application Access pour générer des QCM et évaluer les candidats. Jusqu'alors, nous avions réussi à charger la liste déroulante du formulaire d'accueil, en fonction des informations de tables de la base de données, correspondant aux différents questionnaires. Puis nous avions réussi à transmettre le choix de l'utilisateur à un autre formulaire, afin que l'évaluation sur le questionnaire choisi puisse débuter. Mais avant de permettre à un candidat de s'évaluer, nous souhaitons que ce dernier puisse s'identifier. Il doit en effet être enregistré en base de données afin que ses résultats soient archivés.



Formulaire Access authentification pour identifier inscrits en VBA

Une zone de texte avec un masque de saisie de type Password a été ajouté au formulaire d'accueil. Si l'utilisateur ne peut pas s'identifier, il ne peut pas être évalué. C'est la raison pour laquelle un lien est proposé afin de le rediriger vers le formulaire d'inscription.

Formulaire inscription Access avec insertion données dans table par code VBA

Ce formulaire d'inscription doit permettre d'ajouter les informations du nouveau candidat dans la table msy_inscrits. Ces deux objets ont été créés de façon à ce que nous puissions nous concentrer sur le code VBA. A l'issue, il faudra que le formulaire d'identification s'affiche au démarrage, en masquant l'ensemble des outils Access pour que le QCM fonctionne comme une application à part entière.

La base de données pour l'évaluation
Nous partons de la base de données existante que nous faisons évoluer à chaque étape de ces formations.
  • Télécharger la base de données identification-vba-access.accdb en cliquant sur son lien,
  • L'ouvrir dans Access et cliquer sur le bouton Activer le contenu si nécessaire,
  • Double cliquer sur la table msy_inscrits depuis le volet des objets Access,
Table des inscriptions dans base de données Access avec identifiants uniques en clé primaire

Cette table a volontairement été simplifiée pour archiver les informations des candidats. Elle ne propose qu'un seul enregistrement pour l'instant. Nous l'utiliserons pour tester le code d'identification par lequel nous allons débuter. L'identifiant est utilisé comme clé primaire. Il doit donc être unique. Fort logiquement, un candidat ne peut pas utiliser un identifiant déjà exploité par un autre.
  • Fermer la table en cliquant sur la croix de son onglet,
  • Puis, double cliquer sur le formulaire Listes depuis le volet des objets Access,
Comme vous le constatez, le formulaire s'ouvre en plein écran. Des macros incorporées au chargement des formulaires Listes et inscription, s'occupent d'agrandir leur fenêtre. La liste déroulante des thèmes n'est pas disponible, tant que l'utilisateur n'est pas authentifié.

Authentification par formulaire Access
Nous devons donc associer un code au bouton de la zone d'identification, pour comparer l'identification saisie aux identifiants présents dans la table des inscrits. Le code VBA doit déclencher une requête SQL avec une clause WHERE dynamique dépendant de cette saisie. Si le résultat est un succès, la zone de liste doit être déverrouillée afin de permettre au candidat de choisir un questionnaire.
  • Cliquer sur le bouton Affichage du ruban Accueil,
  • Dans la liste, choisir Mode Création,
  • Sélectionner le bouton Ok sur le formulaire,
  • Cliquer sur le bouton Feuille de propriétés du ruban Création si elle n'est pas visible,
  • Activer l'onglet Evénement de la feuille de propriétés du bouton,
  • Cliquer sur le petit bouton de son événement Au clic,
  • Dans la boîte de dialogue qui suit, choisir Générateur de code et valider,
Nous basculons dans l'éditeur de code Visual Basic Access, entre les bornes de la procédure valider_Click. Tout code VBA saisi entre ses bornes se déclenchera donc au clic sur ce bouton. Il est à noter que la référence à la librairie Microsoft ActiveX Data Objects a déjà été ajoutée par les développements préliminaires de l'application.

Le code VBA doit récupérer l'identifiant saisi par le candidat et le comparer aux identifiants de la table msy_inscrits, par le biais d'une requête sélection codée en SQL. Nous devons donc commencer par déclarer les variables nécessaires, notamment celles permettant de manipuler les objets de base de données.
  • Entre les bornes de la procédure du bouton, ajouter les déclarations suivantes :
Dim la_base As Database: Dim ligne As Recordset
Dim requete As String


Grâce à la librairie ActiveX Data Objects, nous pouvons déclarer un objet de type base de données (Database), afin de pointer sur la base de données en cours. De même, nous pouvons déclarer un objet pour manipuler les enregistrements d'une table (Recordset). Ces enregistrements seront filtrés par la requête que nous allons coder. C'est pourquoi nous déclarons une variable requete en tant que chaîne de caractères afin de pouvoir mémoriser l'instruction SQL.

Avant d'initialiser et d'affecter les variables, nous devons nous assurer qu'un identifiant a bien été saisi. Car si la zone de texte est vide, il n'est pas nécessaire de déclencher l'exécution du code. Ce test peut se vérifier grâce à l'instruction conditionnelle If en VBA.
  • Ajouter les bornes de l'instruction conditionnelle, à la suite du code :
If (identifiant.Value <> "") Then

Else

End If


La zone de saisie se nomme identifiant. C'est ainsi qu'elle a été paramétrée à l'aide de sa feuille de propriétés. Value est la propriété d'une zone de texte qui retourne son contenu. S'il n'est pas vide ( <> "" ), alors nous réaliserons le traitement de la recherche de l'identifiant. Dans le cas contraire (Else), nous devons inciter l'utilisateur à reprendre la saisie. Le plus simple est de lui afficher une information à l'écran par le biais de la fonction VBA MsgBox.
  • Entre le Else et le End If, ajouter la ligne de code suivante :
MsgBox "Vous devez taper votre identifiant avant de choisir un questionnaire !"
  • Enregistrer les modifications (CTRL + S) et basculer sur l'application Access (ALT + F11),
  • Exécuter le formulaire Listes en enfonçant la touche F5 du clavier par exemple,
  • Vider le contenu de la zone identifiant et cliquer sur le bouton Ok,
Comme l'illustre la capture ci-dessous, le critère n'ayant pas été validé par l'instruction conditionnelle de notre code VBA, une boîte de dialogue se déclenche et affiche le message que nous avons défini.
  • Valider ce message par Ok,
Rien ne se produit, car après la branche Else du If suit le End Sub qui met fin à la procédure.
  • Afficher de nouveau le formulaire en mode création et revenir dans l'éditeur de code,
Contrôle des informations identification saisies en Visual Basic Access

Lorsque le critère est validé, nous devons exécuter une requête sélection sur la table msy_inscrits pour vérifier si le candidat est effectivement enregistré dans la base de données. En SQL, c'est le mot clé SELECT qui permet d'initialiser une requête sélection. Pour la syntaxe, nous pouvons nous faire aider par l'éditeur Access.
  • Basculer de nouveau sur l'application Access,
  • Cliquer sur l'onglet Créer en haut de la fenêtre pour activer son ruban,
  • Dans la zone Requêtes, cliquer sur le bouton Création de requête ,
  • Dans la fenêtre qui suit, sélectionner la table msy_inscrtis,
  • Puis, cliquer sur Ajouter et sur Fermer,
  • Double cliquer sur le champ inscrit_identifiant pour l'ajouter dans la grille de requête,
  • Dans la zone Critères pour l'identifiant, taper l'information : 123456,
Créer requête sélection Access pour syntaxe SQL dans code VBA



Il s'agit effectivement du seul identifiant renseigné pour l'instant dans la table msy_inscrits.
  • Cliquer sur le bouton Exécuter du ruban Créer,
Access affiche le résultat de l'extraction en mode feuille de données. L'identifiant a bien été trouvé indiquant que l'utilisateur est bien inscrit. C'est le raisonnement que nous allons devoir reproduire par le code VBA.
  • Dans le ruban Créer, cliquer sur la flèche du bouton Affichage,
  • Dans la liste, choisir Mode SQL,
Dans l'éditeur SQL, Access affiche la syntaxe de la requête sélection que nous venons de concevoir :

SELECT msy_inscrits.inscrit_identifiant FROM msy_inscrits WHERE (((msy_inscrits.inscrit_identifiant) = "123456"));

Le préfixe msy_inscrits qui désigne la table n'est pas nécessaire. Dans la mesure où l'instruction FROM indique au SQL que la sélection s'effectue sur cette table, les champs seront par défaut considérés comme appartenant à cette table.
  • Supprimer les deux préfixes msy_inscrits. de la syntaxe directement depuis l'éditeur :
SELECT inscrit_identifiant FROM msy_inscrits WHERE inscrit_identifiant = "123456";

La syntaxe s'en trouve simplifiée. Nous en avons profité pour supprimer les parenthèses de la clause WHERE qui n'étaient pas nécessaires. Il n'y a en effet qu'un seul critère à vérifier sur le champ inscrit_identifiant. Cette instruction doit être adaptée dans le code VBA. Elle devra être encadrée de guillemets. Or l'identifiant est lui-même inscrit entre guillemets, car il s'agit d'un texte. Donc nous devons remplacer ces doubles cotes par des simples cotes dans l'expression.
  • Remplacer les guillemets de la clause WHERE par des simples cotes (Touche 4),
  • Copier l'intégralité de l'instruction SQL (CTRL + C),
  • Cliquer sur le bouton Exécuter du ruban Créer pour vérifier le résultat,
La requête retourne toujours la même sélection malgré nos modifications.
  • Fermer la requête sans l'enregistrer,
  • Revenir dans l'éditeur de code VBA (ALT + F11),
  • Entre le If et le Else du bouton, ajouter l'affectation suivante :
requete = "SELECT inscrit_identifiant FROM msy_inscrits WHERE inscrit_identifiant='123456';"

Entre les guillemets, nous avons donc collé l'instruction SQL précédemment construite. Bien sûr, elle doit être adaptée, car en l'état elle laissera passer tout le monde. L'identifiant de la clause WHERE doit être celui saisi dans la zone de texte du formulaire. Il s'agit donc d'une information dynamique à concaténer.
  • Sélectionner l'information 123456 et la supprimer,
  • A la place, ouvrir un guillemet suivi du caractère de concaténation (&),
  • Puis taper l'instruction identifiant.Value pour récupérer la saisie de l'utilisateur,
  • Ajouter un nouveau caractère de concaténation (&) suivi d'un guillemet,
Entre les simples cotes, nous avons donc remplacé l'information statique par l'information dynamique concaténée suivante : " & identifiant.Value &", ce qui donne :

requete = "SELECT inscrit_identifiant FROM msy_inscrits WHERE inscrit_identifiant ='" & identifiant.Value &"';"

L'information dynamique identifiant.Value est toujours encadrée de simples cotes pour que la comparaison textuelle de la requête puisse se faire sur le champ désigné. Nous devons maintenant exécuter cette requête et pour ce faire, nous devons initialiser et affecter les objets de base de données.
  • A la suite du code juste après la requête, ajouter les deux affectations suivantes :
Set la_base = Application.CurrentDb
Set ligne = la_base.OpenRecordset(requete, dbOpenDynaset)


Comme toujours, nous faisons pointer notre objet la_base sur la base de données en cours, grâce à la méthode CurrentDb de l'objet Application. Ainsi nous pouvons accéder aux enregistrements d'une table, directement par une instruction SQL grâce à la méthode OpenRecordset de notre objet de base de données ainsi instancié. Notez le deuxième paramètre dbOpenDynaset de la méthode pour accéder dynamiquement aux enregistrements filtrés par la requête. Maintenant que notre objet ligne a lui-même instancié la classe Recordset, il possède des méthodes et propriétés pour manipuler ces enregistrements. Et l'une d'entre elles permet de savoir si le résultat est concluant ou non.

C'est la propriété RecordCount d'un objet Recordset qui permet de retourner le nombre d'enregistrements filtrés par une requête sélection. En d'autres termes, si cette valeur est positive, cela signifie que l'identifiant a bien été trouvé et donc que l'utilisateur est bien inscrit. Dans ce cas, la liste déroulante doit être déverrouillée pour lui permettre de choisir un questionnaire.
  • Selon ces considérations, à la suite du code, ajouter l'instruction suivante :
If ligne.RecordCount > 0 Then Liste.Enabled = True

La propriété Enabled réglée à True pour un contrôle de formulaire, permet de le rendre disponible à nouveau. Avant de tester le code, comme toujours, nous allons décharger les variables objets que nous avons utilisées.
  • A la suite du code, toujours avant le Else, ajouter les instructions suivantes :
ligne.Close
la_base.Close

Set la_base = Nothing
Set ligne = Nothing


Tout d'abord nous fermons la connexion aux données grâce à la méthode Close des objets de base de données. Puis nous les déchargeons de la mémoire grâce au mot clé Nothing.
  • Enregistrer les modifications (CTRL + S) et basculer sur l'application Access (ALT + F11),
  • Exécuter le formulaire grâce à la touche F5 du clavier par exemple,
  • Taper le seul identifiant (123456) enregistré dans la table à ce stade,
  • Puis, cliquer sur le bouton Ok du formulaire pour exécuter le code,
Comme vous le constatez, l'identification est un succès. La liste déroulante est en effet déverrouillée et le candidat peut sélectionner un thème. Dans le cas d'un identifiant erroné, la liste reste en revanche indisponible. Dans ce cas, l'utilisateur doit cliquer sur le lien le redirigeant vers le formulaire d'inscription.

Mais avant cela, nous allons corriger un petit défaut. Lorsqu'un thème est choisi, le formulaire questions prend en effet le relais, mais le formulaire Listes n'est pas fermé.
  • Afficher de nouveau le formulaire Listes en mode Création,
  • Sélectionner la liste déroulante puis activer l'onglet Evénement de sa feuille de propriétés,
  • Cliquer sur le petit bouton de son événement Avant MAJ,
Vérification informations identification par code Visual Basic Access

Comme la procédure événementielle existe déjà, nous basculons directement dans l'éditeur de code VBA, entre les bornes de la procédure Liste_BeforeUpdate. Il s'agit du code que nous avions écrit pour transmettre des données au formulaire Questions, au choix de l'utilisateur dans la liste déroulante. Il s'agit simplement d'ajouter l'instruction permettant de fermer le formulaire Listes au moment où il passe la main.
  • A la fin de la procédure Liste_BeforeUpdate, avant le End Sub, ajouter la commande suivante :
DoCmd.Close acForm, "Listes", acSaveNo

L'objet VBA DoCmd permet d'exécuter des commandes comme la fermeture d'objets grâce à sa méthode Close. Nous désignons en premier paramètre le type d'objet à fermer et en second, son nom.
  • Enregistrer les modifications.
Si vous faites un test à ce stade, après l'identification et le choix de l'utilisateur, le formulaire Questions se déclenche en effet, comme c'était le cas jusqu'alors. Si vous fermez ensuite ce formulaire, vous remarquez que le formulaire Listes a disparu. Il a été fermé par le code VBA.

Le code VBA complet pour l'identification, est le suivant :

Private Sub valider_Click()
Dim la_base As Database: Dim ligne As Recordset
Dim requete As String

If (identifiant.Value <> "") Then
requete = "SELECT inscrit_identifiant FROM msy_inscrits WHERE inscrit_identifiant='" & identifiant.Value & "';"
Set la_base = Application.CurrentDb
Set ligne = la_base.OpenRecordset(requete, dbOpenDynaset)

If ligne.RecordCount > 0 Then
Liste.Enabled = True
ligne.Close
la_base.Close

Set la_base = Nothing
Set ligne = Nothing
Else
MsgBox "Vous devez taper votre identifiant avant de choisir un questionnaire!"
End If
End Sub




Formulaire d'inscription en VBA Access
Si le candidat ne peut pas s'identifier, il ne peut pas participer. C'est la raison pour laquelle un lien de redirection vers le formulaire inscription lui est proposé, depuis le formulaire Listes.
  • Afficher le formulaire inscription en mode création,
  • Sélectionner le bouton de validation,
  • Activer l'onglet Evénement de sa feuille de propriétés,
  • Cliquer sur le bouton de son événement Au clic,
  • Dans la boîte de dialogue qui suit, choisir Générateur de code et valider,
Nous sommes de retour dans l'éditeur de code Visual Basic Access, entre les bornes de la procédure valider_Click, pour le formulaire inscription comme en atteste l'explorateur de projet.

Nous avons besoin des mêmes variables que précédemment pour manipuler les données de la base, par le code VBA.
  • Entre les bornes de la procédure, ajouter les déclarations suivantes :
Dim la_base As Database: Dim ligne As Recordset
Dim requete As String


La variable requete sera exploitée à deux reprises cette fois. Une première fois elle permettra d'exécuter une requête sélection pour vérifier que nous ne sommes pas en train de tenter d'ajouter un identifiant existant. Une seconde fois, elle permettra d'insérer les données fournies, dans la table msy_inscrits en exécutant une requête Ajout (Insert Into).

La première chose à faire est de vérifier que tous les renseignements ont bien été saisis, car ils sont tous obligatoires. Dans le cas contraire, l'utilisateur doit en être informé et le code doit être stoppé.
  • A la suite du code, ajouter les bornes du test suivant :
If (inscrit_id.Value = "" Or IsNull(inscrit_id.Value) Or inscrit_nom.Value = "" Or IsNull(inscrit_nom.Value) Or inscrit_prenom.Value = "" Or IsNull(inscrit_prenom.Value) Or inscrit_mail.Value = "" Or IsNull(inscrit_mail.Value)) Then
MsgBox "Tous les renseignements sont obligatoires"
Else

End If


Il suffit que l'un des champs (OR) soit vide (= "") ou nul (IsNull) pour que le test soit concluant. En conséquence, nous en informons l'utilisateur par un MsgBox.
  • Enregistrer les modifications et basculer sur Access,
  • Double cliquer sur le formulaire inscription pour l'exécuter,
  • Cliquer directement sur son bouton de validation,
Contrôler saisie formulaire inscription Visual Basic Access

Le message apparaît fort logiquement et plus aucun traitement n'est entrepris par le code.
  • Afficher de nouveau le formulaire en mode création,
  • Puis, revenir dans l'éditeur de code Visual Basic,
Si le test n'est pas vérifié, cela signifie que l'utilisateur a bien renseigné tous les champs de l'inscription. Mais avant d'insérer ces éléments en base de données, nous devons vérifier que l'identifiant n'a pas déjà été utilisé. En effet, un identifiant est unique. D'ailleurs c'est son champ qui porte la clé primaire. Nous pourrions aussi faire un test sur le champ du mail afin de vérifier la présence de l'arobase et du point, mais nous nous concentrons sur l'essentiel ici. Cette vérification sur l'identifiant peut se faire grâce à l'exécution d'une requête sélection, strictement identique à celle que nous avons conçue pour l'identification.
  • Dans la branche Else de l'instruction If, ajouter les lignes de code suivantes :
requete = "select inscrit_identifiant FROM msy_inscrits WHERE inscrit_identifiant='" & inscrit_id.Value & "'"
Set la_base = Application.CurrentDb
Set ligne = la_base.OpenRecordset(requete, dbOpenDynaset)


Nous reconstruisons donc notre requête sélection avec le langage SQL. Puis nous initialisons et affectons nos objets de base de données comme précédemment. Comme toute à l'heure, à ce stade, la propriété RecordCount de notre objet Recordset est capable de renvoyer le nombre d'enregistrements filtrés par la requête. Si ce nombre est positif, le processus d'inscription doit être stoppé car l'identifiant est déjà utilisé. Nous devons en alerter l'utilisateur pour qu'il le modifie.
  • A la suite du code, ajouter les instructions suivantes :
If (ligne.RecordCount > 0) Then
MsgBox "Cet identifiant existe déjà !, veuillez en changer"
inscrit_id.Value = ""

ligne.Close
la_base.Close
Exit Sub
Else

End If


Vérification informations connexion base de données, formulaire VBA Access

Si la propriété RecordCount de l'objet Recordset renvoie une valeur qui n'est pas nulle, un MsgBox déclenche un message incitant l'utilisateur à corriger sa saisie. De fait, l'exécution du code ne doit pas se poursuivre. Nous vidons d'abord la zone de texte de l'identifiant (inscrit_id.Value = ""). Puis nous fermons les connexions (ligne.Close, la_base.Close) et stoppons l'exécution du programme (Exit Sub).

Dans le cas où le test échoue, cela signifie que l'identifiant est valide et que le candidat peut être inscrit, afin que l'évaluation aux questionnaires lui soit ouverte. Il s'agit donc d'exécuter une requête action qui permette d'ajouter ces informations dans la table msy_inscrits de la base de données. La syntaxe d'une requête ajout est la suivante :

INSERT INTO nom_table (champ1, champ2, champ3, champ4) VALUES ('" & variable1 & "','" & variable2 & "','" & variable3 & "','" & variable4 & "')"

L'instruction INSERT INTO est utilisée pour indiquer au SQL qu'il s'agit d'une requête action destinée à ajouter des enregistrements dans la table désignée par son nom juste après. Entre parenthèses, sont listés les noms des champs concernés. Puis après le mot clé VALUES, sont listés toujours entre parenthèses et dans le même ordre que les champs, les valeurs à y insérer. Comme il s'agit de variables, nous les concaténons avec le Et commercial (&). Notez la présence avant la fermeture ou après l'ouverture du guillemet des simples cotes, indiquant qu'il s'agit d'informations de type texte.
  • Dans la branche Else de l'instruction If, ajouter les lignes de code suivantes :
requete = "INSERT INTO msy_inscrits(inscrit_identifiant, inscrit_nom, inscrit_prenom, inscrit_mail) VALUES ('" & inscrit_id.Value & "','" & inscrit_nom.Value & "','" & inscrit_prenom.Value & "','" & inscrit_mail.Value & "')"
la_base.Execute requete
MsgBox "Vous êtes désormais inscrit(e)"


Dans la partie VALUES de la syntaxe SQL, nous concaténons bien la valeur de chacune des zones de saisie devant être insérées dans les champs correspondants, listés au début de l'instruction. Puis, nous exploitons la méthode Execute sur la base de données grâce à l'objet la_base, afin de réaliser l'insertion des enregistrements. Nous affichons ensuite un message de confirmation à l'utilisateur par le biais d'un MsgBox. Comme toujours, pour terminer le code proprement, nous devons fermer les connexions aux données et décharger les variables objets.
  • Pour ce faire, après le End If du RecordCount, soit entre les deux End If, ajouter les instructions suivantes :
ligne.Close
la_base.Close

Set la_base = Nothing
Set ligne = Nothing
  • Enregistrer les modifications et basculer sur l'application Access,
  • Exécuter le formulaire inscription,
  • Remplir tous les champs et cliquer sur le bouton de validation,
Comme l'illustre la capture ci-dessous, la requête Ajout semble avoir fonctionné et l'inscription est validée. Si vous ouvrez la table msy_inscrits, vous remarquez la présence d'un nouvel enregistrement avec les informations de champs que vous avez saisies.
Formulaire inscription Access, ajout enregistrements dans table en VBA

Pour améliorer le processus, nous allons ensuite renvoyer le nouveau candidat vers le formulaire d'identification en lui transmettant son identifiant. Ainsi, tout de suite après son inscription, l'utilisateur peut participer à l'évaluation.
  • Afficher le formulaire en mode Création et revenir dans l'éditeur de code,
Nous l'avons déjà fait dans la formation pour transmettre des paramètres entre formulaires. Il s'agit d'ouvrir le formulaire Listes en mode création (acDesign) par le code VBA, de passer la valeur de l'identifiant à l'un de ses contrôles, d'enregistrer les modifications en le fermant, puis de commander son ouverture en mode normal. En revanche, il n'est pas possible de modifier le contenu d'une zone de saisie (TextBox) par le code en mode Création. Donc nous allons exploiter un label invisible et présent sur le formulaire Listes qui se nomme recup.
  • A la suite du code déchargeant les variables, ajouter les instructions suivantes :
DoCmd.OpenForm "Listes", acDesign
Form_Listes.recup.Caption = inscrit_id.Value
DoCmd.Close acForm, "Listes", acSaveYes
DoCmd.OpenForm "Listes", acNormal
DoCmd.Close acForm, "inscription", acSaveNo


Vous remarquez que nous n'oublions pas de fermer le formulaire inscription une fois toutes les informations transmises.

Pour que le formulaire Listes réceptionne bien la donnée, il doit la charger dans la zone de saisie de l'identifiant. Ainsi l'utilisateur nouvellement inscrit, n'aura plus qu'à cliquer sur Ok pour accéder aux évaluations.
  • Enregistrer les modifications,
  • Dans l'explorateur de projet de l'éditeur de code, double cliquer sur l'élément Form_listes afin d'afficher sa feuille de code,
  • Dans sa procédure Form_load, sous l'affectation de la variable la_base (Set la_base...), ajouter la ligne de code suivante :
If(recup.Caption <> "") Then identifiant.Value = recup.Caption

Au chargement, le formulaire Listes vérifie si une donnée lui a été transmise dans l'étiquette nommée recup. Si c'est le cas, elle récupère sa valeur grâce à sa propriété Caption pour l'affecter au contenu de la zone de texte identifiant grâce à sa propriété Value.
  • Enregistrer les modifications et basculer sur l'application Access,
  • Exécuter le formulaire inscription,
  • Remplir tous les champs et valider,
Vous êtes correctement redirigé vers le formulaire d'identification sur lequel la donnée a bien été récupérée. Il ne reste plus qu'à valider pour déverrouiller la liste déroulante et débuter un QCM. Le formulaire Questions se charge alors de l'indication transmise et le candidat peut s'évaluer. Sauf qu'il s'agit d'une partie qui reste à développer.

Dans les prochaines étapes, nous ajouterons une table liée aux inscrits pour permettre l'enregistrement des résultats. Nous transmettrons l'identifiant au formulaire questions, afin que les données soient consolidées pour le bon candidat. Puis nous verrouillerons l'application afin qu'elle débute automatiquement sur le formulaire Listes et que l'utilisateur n'ait accès à rien d'autre, comme notamment les objets de base de données du volet Access.

Le code VBA complet pour le formulaire d'inscription est le suivant :

Private Sub valider_Click()
Dim la_base As Database: Dim ligne As Recordset
Dim requete As String

If (inscrit_id.Value = "" Or IsNull(inscrit_id.Value) Or inscrit_nom.Value = "" Or IsNull(inscrit_nom.Value) Or inscrit_prenom.Value = "" Or IsNull(inscrit_prenom.Value) Or inscrit_mail.Value = "" Or IsNull(inscrit_mail.Value)) Then
MsgBox "Tous les renseignements sont obligatoires"
Else
If InStr(1, inscrit_mail.Value, "@", vbTextCompare) = 0 Or InStr(1,inscrit_mail.Value, ".", vbTextCompare) = 0 Then
MsgBox "Adresse mail non conforme, veuillez corriger !"
Exit Sub
End If

requete = "select inscrit_identifiant FROM msy_inscrits WHERE inscrit_identifiant='" & inscrit_id.Value & "'"
Set la_base = Application.CurrentDb
Set ligne = la_base.OpenRecordset(requete, dbOpenDynaset)

If (ligne.RecordCount > 0) Then
MsgBox "Cet identifiant existe déjà !, veuillez en changer"
inscrit_id.Value = ""
ligne.Close
la_base.Close
Exit Sub
Else
requete = "INSERT INTO msy_inscrits (inscrit_identifiant, inscrit_nom, inscrit_prenom, inscrit_mail) VALUES ('" & inscrit_id.Value & "','" & inscrit_nom.Value & "','" &inscrit_prenom.Value & "','" & inscrit_mail.Value & "')"
la_base.Execute requete
MsgBox "Vous êtes désormais inscrit(e)"
End If

ligne.Close
la_base.Close
Set la_base = Nothing
Set ligne = Nothing

DoCmd.OpenForm "Listes", acDesign
Form_Listes.recup.Caption = inscrit_id.Value
DoCmd.Close acForm, "Listes", acSaveYes
DoCmd.OpenForm "Listes", acNormal
DoCmd.Close acForm, "inscription", acSaveNo
End If
End Sub

 
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