formateur informatique

Initiation au VBA Access par les macros

Accueil  >  Bureautique  >  Access  >  Access Astuces  >  Initiation au VBA Access par les macros
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 :


Découvrir VBA Access par les macros

Avec cette nouvelle astuce Access, nous proposons de voir comment il est possible de s'initier à la programmation Visual Basic de la plus simple et de la plus douce des manières. Nous savons déjà créer des macros pour réaliser des actions mais aussi des traitements, sur des formulaires et sur des données de tables. Et dans certains contextes, ces macros peuvent être converties automatiquement en code VBA. C'est une très bonne façon de découvrir les objets de programmation pour comprendre le fonctionnement, les imbrications et interactions.

Bases de données avec Macros
Pour la découverte du code VBA au travers de cette astuce, nous avons besoin d'une base de données hébergeant déjà des actions de macro.
  • Télécharger le fichier macros-et-vba-access.rar en cliquant sur ce lien,
  • Le décompresser dans le dossier de votre choix,
  • Double cliquer sur la base de données résultante pour l'ouvrir dans Access,
  • Cliquer alors sur le bouton Activer le contenu du bandeau de sécurité,
Le volet de navigation sur la gauche de l'écran indique que cette base de données est constituée d'une table, d'une requête et d'un formulaire. Nous allons bientôt exploiter ce dernier. Mais avant cela, une découverte s'impose.
  • En haut de la fenêtre Access, cliquer sur l'onglet Créer pour activer son ruban,
  • Tout à fait à droite du ruban, dans la section Macros et code, cliquer sur le bouton Macro,
Nous basculons ainsi dans l'éditeur de macro Access. Nous nous apprêtons à créer une macro générale et non une macro incorporée, comme celles que nous avons déjà conçues, se déclenchant par exemple au clic sur un bouton de formulaire.

Une liste déroulante se propose. Elle offre des actions de macro qu'il est possible d'empiler les unes sous les autres.

Créer des actions de macro et les convertir en VBA Access

Et si vous consultez la section Outils du ruban Création, vous notez la présence d'un bouton offrant la possibilité de convertir ces actions de macro dans le langage Visual Basic Access.
  • Fermer la macro en cliquant sur la croix de son onglet,
Forts de cette découverte, nous allons pouvoir entreprendre de déchiffrer le langage VBA au travers d'une macro réalisant déjà des traitements spécifiques.

Macro incorporée et code VBA
Le formulaire F_Inscription est un formulaire abouti. Nous l'avons conçu à l'occasion d'une succession d'astuces précédentes. Après quelques vérifications d'usage, il permet d'insérer les données renseignées dans la table Utilisateurs. Suite à cela, il se charge de vider les zones de texte pour réinitialiser l'interface d'inscription. Toutes ces prouesses, il les réalise naturellement en s'appuyant sur des actions de macro.
  • Dans le volet de navigation, cliquer droit sur le formulaire F_Inscription,
  • Dans le menu contextuel, choisir le mode Création,
Nous basculons ainsi dans la vue en conception du formulaire.
  • Cliquer sur le bouton Valider pour le sélectionner,
  • Activer alors l'onglet Evénement de sa feuille de propriétés,
Vous notez effectivement la présence d'une macro incorporée associée à son événement Au clic.
  • Cliquer sur le petit bouton situé sur sa droite,
Nous basculons cette fois dans l'éditeur de macro Access.

Actions de macro Access pour valider formulaire inscription

Comme vous pouvez le voir, les actions de macro s'enchaînent et elles sont plutôt nombreuses. L'imbrication des trois instructions conditionnelles (Si) permet de tester que le formulaire est bien renseigné, que l'utilisateur n'est pas déjà inscrit et que la paire Identifiant / Mot de passe n'est pas déjà empruntée par quelqu'un d'autre. L'action OuvrirRequête appelle la requête Ajout qui se charge d'insérer les données du formulaire dans la table. Les actions DéfinirPropriété permettent de vider les zones de saisie pour réinitialiser le formulaire. Il est forcément intéressant de voir comment tout cela se formalise dans le langage VBA. Le bout de code transcrit serait une aubaine pour pouvoir aller plus loin grâce au développement. Mais cette fois, en consultant la section Outils du ruban Création, vous avez la désagréable surprise de constater que le bouton de transcription est grisé, donc indisponible. C'est comme ça avec les macros incorporées.

Convertir en VBA une macro incorporée
Pourtant une astuce existe et nous proposons de la découvrir ensemble. La ruse consiste à copier toutes ces actions de macros pour les coller dans une macro classique.
  • Réaliser le raccourci clavier CTRL + A pour sélectionner toutes les actions de la macro,
  • Cliquer droit sur l'un des blocs d'action,
  • Puis, choisir la commande Copier dans le menu contextuel,
Copier des actions de macro Access

Fallait-il encore savoir qu'il était possible de copier l'ensemble des blocs d'action. L'astuce est donc à retenir car elle fait gagner bien du temps lorsqu'il s'agit de répliquer des traitements d'une macro incorporée à une autre.
  • Dans le ruban Création, cliquer sur le bouton Fermer,
Nous sommes ainsi de retour sur le formulaire.
  • En haut de la fenêtre Access, cliquer sur l'onglet Créer pour activer son ruban,
  • Tout à fait à droite, dans la section Macros et code, cliquer sur le bouton Macro,
  • Dans l'éditeur de macro, coller la sélection par le raccourci clavier CTRL + V,
Toutes les actions sont effectivement fidèlement retranscrites dans une macro classique qui, contrairement à son homologue, permet la transcription en VBA.
  • Enregistrer la macro (CTRL + S) sous le nom Valider,
Comme vous pouvez le voir, elle apparaît aussitôt listée dans le volet de navigation, sur la gauche de l'écran. Il est temps de passer à l'acte tant attendu.
  • Dans la section Outils du ruban Création, cliquer sur le bouton Convertir les macros en...,
  • Dans la boîte de dialogue qui suit, décocher les deux cases,
Convertir les actions de macros incorporées en langage VBA Access

La gestion d'erreurs et les commentaires sont intéressants. Mais pour cette découverte, nous souhaitons alléger le plus possible le code transcrit.
  • Cliquer sur le bouton Convertir pour procéder,
Une boîte de dialogue apparaît à l'issue du traitement indiquant que la conversion est achevée.
  • Valider cette boîte de dialogue en cliquant sur le bouton Ok,
Code VBA Access de la macro convertie

De fait, nous nous retrouvons propulsés dans l'éditeur de code VBA Access.
  • Double cliquer sur le module Macro convertie - Valider dans l'explorateur de projet,
Ainsi, nous affichons le code de notre macro traduit en VBA au centre de l'écran. Et le premier constat est que celui-ci semble moins lourd que l'enchaînement des actions de macro.

Vous constatez que le nom que nous avons attribué à la macro est attribué automatiquement à la fonction VBA. Mais ce code ne peut fonctionner que rattaché au formulaire car il désigne des noms de contrôles hébergés par ce dernier. Nous pourrions l'exécuter en dehors mais pour cela, nous devrions descendre dans la hiérarchie avec des objets parents en préfixe désignant d'abord le formulaire avec son nom. Nous choisissons donc de rapatrier ce code.

Code converti au clic
Ce code est en effet susceptible de se déclencher au clic sur le bouton Valider du formulaire principal, afin de valider l'inscription. C'est dans ce contexte que nous pourrons appréhender et comprendre la syntaxe au travers de son exécution.
  • Sélectionner et copier (CTRL + C) le code entre les bornes (Function et End Function),
  • Fermer l'éditeur de code VBA Access en cliquant sur la croix de sa fenêtre,
  • Dans le volet de navigation, cliquer droit sur le formulaire F_Inscription,
  • Dans le menu contextuel, choisir de l'ouvrir en mode création,
  • Sur le formulaire en conception, cliquer sur le bouton Valider pour le sélectionner,
  • Dès lors, activer l'onglet Evénement de sa feuille de propriétés,
Macro Access incorporée associée au clic sur un bouton de formulaire

Vous redécouvrez la présence de la macro incorporée associée à son événement Au clic. C'est bien lui qui nous intéresse. Désormais, l'inscription doit être validée par le code VBA et non plus par actions de macro.
  • Supprimer cette ligne de la macro incorporée,
  • Dès lors, cliquer sur le petit bouton situé à l'extrémité droite,
  • Dans la boîte de dialogue qui suit, choisir le générateur de code et valider par Ok,
Nous retournons ainsi dans l'éditeur de code Visual Basic Access, mais cette fois entre les bornes de la procédure événementielle Valider_Click. Son code se déclenchera au clic sur le bouton Valider.
  • Entre ces bornes, coller le code VBA précédemment prélevé,
  • Enregistrer les modifications (CTRL + S) et revenir sur le formulaire (ALT + Tab),
  • L'enregistrer à son tour et l'exécuter par exemple avec la touche F5 du clavier,
  • Sur le formulaire en exécution, cliquer directement sur le bouton Valider,
Le code VBA transcrit semble très bien fonctionner. Tous les renseignements sont obligatoires. Donc l'inscription ne peut être validée. Par le jeu des imbrications conditionnelles, les tests sont effectués avant de déclencher la requête d'insertion.

Inscription refusée sur le formulaire Access par le code VBA

Et comme vous pouvez le voir, une boîte de dialogue apparaît. A l'origine, elle est déclenchée par l'action de macro ZoneMessage traduite en VBA par la fonction MsgBox. Et dans notre code, c'est la branche Else de la première instruction If qui est déclenchée, soit la dernière branche Else. En effet, ce premier test consiste à vérifier que tous les champs sont correctement renseignés :

If(Len(.Le_Nom) > 3 And Len(.Prenom) > 3 And Len(.Id) > 5 And Len(.Mp) =5 And .Civ <> "") Then

La fonction VBA Len permet de tester la longueur du texte contenu dans le champ qui lui est passé en paramètre. Il s'agit des zones de saisie sur le formulaire pour le nom, le prénom, l'identifiant et le mot de passe. Le dernier test (Civ<>"") se contente simplement de vérifier que la civilité est bien renseignée par le biais de la liste déroulante.
  • Cliquer sur le bouton Ok de l'alerte,
  • Dans le ruban Accueil, cliquer sur la flèche du bouton Affichage,
  • Dans la liste, choisir le mode création,
  • Revenir dans l'éditeur de code VBA Access,
Adapter le code d'une macro
Même si l'exécution semble être un succès après ce premier test, le moins que l'on puisse dire est que la boîte de dialogue apparaît dépouillée. Elle souffre de l'absence d'un titre. C'est l'occasion de comprendre le code, les objets, propriétés et méthodes et ici en l'occurrence la construction de la fonction Msgbox. Il apparaît de même opportun de lui greffer une icône explicative sur la nature du message adressé.

La ligne qui nous intéresse est donc placée dans la dernière branche Else:

...
End If
Else
Beep
MsgBox "Tous les champs doivent être renseignés correctement", vbOKOnly, ""
End If
End With
...


Les paramètres sont énumérés les uns après les autres, séparés par des virgules. Le premier argument est le message que nous avons pu lire à l'occasion du déclenchement de la boîte de dialogue. Comme il s'agit d'un texte, il est nécessairement mentionné entre guillemets. Le deuxième argument concerne le type de bouton. Avec la valeur vbOKOnly, seul le bouton Ok est proposé, ce qui est logique dans ce contexte. Aucune autre action n'est attendue. Mais sachez que des variantes sont possibles comme les suivantes :
  • vbOKCancel : Boutons Ok et Annuler,
  • vbYesNo : Boutons Oui et Non,
  • vbYesNoCancel : Boutons Oui, Non et Annuler,
De plus, cet argument autorise d'additionner des icônes à ces boutons. Et le terme d'addition est le bon, nous allons le comprendre. Les quelques valeurs suivantes sont possibles :
  • vbCritical : Icône arrêt critique,
  • vbQuestion : Icône point d'interrogation,
  • vbExclamation : Icône point d'exclamation,
  • vbInformation : Icône de message d'information.
Il est temps de tester cela.
  • Modifier le deuxième paramètre de la fonction MsgBox comme suit :
MsgBox "Tous les champs doivent être renseignés correctement", vbCritical + vbOKOnly, ""

C'est en effet le symbole plus (+) qui permet d'additionner l'icône du message critique au bouton Ok actuellement en place.

Le troisième argument de la fonction MsgBox concerne le titre de la boîte de dialogue. Comme il s'agit d'un texte, il doit être mentionné entre guillemets.
  • Ajouter le troisième paramètre comme suit :
MsgBox "Tous les champs doivent être renseignés correctement", vbCritical + vbOKOnly, "Inscription non conforme"
  • Enregistrer les modifications et revenir sur le formulaire,
  • Exécuter ce dernier avec la touche F5 du clavier,
  • Puis, cliquer directement sur le bouton Valider,
Comme vous pouvez le voir, notre zone de message a fière allure. Elle est plus percutante que la précédente. Il a simplement suffi d'ajuster deux paramètres de la fonction MsgBox par le code VBA. Le titre est bien présent dans l'entête de la boîte de dialogue. De plus, l'icône critique rouge qui accompagne désormais le bouton est très significative. Elle indique sans ambiguïté qu'un problème important est à corriger.
  • Cliquer sur le bouton Ok pour valider cette alerte,
  • Puis, revenir dans l'éditeur de code VBA,
Icône critique et titre de la boîte de message par le code VBA Access

Nous conservons donc le formulaire ouvert pour procéder rapidement aux prochains tests. Et précisément sur notre lancée, nous proposons d'en profiter pour personnaliser les autres boîtes de dialogue inhérentes aux tests et exécutions de ce petit programme. C'est la branche Else de la deuxième instruction Si qui focalise notre attention dans un premier temps.

...
With CodeContextObject
If (Len(.Le_Nom) > 3 And Len(.Prenom) > 3 And Len(.Id) > 5 And Len(.Mp)= 5 And .Civ <> "") Then
If (DCount("[U_civilite]", "Utilisateurs", "[U_nom]&[U_prenom] = [Le_Nom]&[Prenom]") = 0) Then
If (DCount("[U_civilite]", "Utilisateurs", "[U_id]&[U_mp] = [Id]&[Mp]") = 0) Then
DoCmd.SetWarnings False
...


Le test opéré consiste à vérifier que la paire du nom et du prénom n'existe pas déjà en base de données. Il s'agit d'une sécurité visant à empêcher un utilisateur déjà inscrit de s'inscrire à nouveau. En d'autres termes, nous neutralisons les doublons en amont. Pour cela, le code VBA exploite la fonction DCount qui est l'équivalent de la fonction Access CpteDom. Il s'agit d'une fonction de dénombrement conditionnel. En premier argument, c'est un champ arbitraire qui lui est passé pour réaliser ce décompte. Ce sont les arguments qui suivent qui sont importants. En deuxième argument, le nom de la table sur laquelle agir est renseigné. En troisième et dernier argument, c'est le critère du décompte qui est indiqué. Il vérifie l'égalité entre le nom et le prénom parcourus dans toute la table source ([U_nom]&[U_prenom]), avec la même paire concaténée mais issue du formulaire ([Le_Nom] & [Prenom]), soit des informations saisies par l'utilisateur. Si ce dénombrement retourne une valeur nulle (=0), alors l'exécution peut se poursuivre. Dans le cas contraire, c'est la branche Else qui est déclenchée. Et elle concerne la boîte de dialogue que nous souhaitons personnaliser.
  • Dans cette avant-dernière branche Else, adapter la fonction MsgBox comme suit :
...
MsgBox "La paire Identifiant / Mot de passe existe déjà", vbOKOnly, ""
End If
Else
Beep
MsgBox "L'utilisateur existe déjà!", vbCritical + vbOKOnly, "Utilisateur déjà inscrit"
End If
Else
Beep
MsgBox "Tous les champs doivent être renseignés correctement", vbCritical + vbOKOnly, "Inscription non conforme"
End If
...


Le principe est identique. Nous associons la même icône critique au bouton Ok, puis nous personnalisons le titre.

Le troisième et dernier test est similaire à celui que nous venons de traiter. Il consiste à vérifier l'existence de la paire Identifiant / Mot depasse. Si elle existe déjà dans la table source, l'inscription est refusée et un message est adressé à l'utilisateur :

...
If (Len(.Le_Nom) > 3 And Len(.Prenom) > 3 And Len(.Id) > 5 And Len(.Mp) = 5 And .Civ <> "") Then
If (DCount("[U_civilite]", "Utilisateurs", "[U_nom]&[U_prenom] = [Le_Nom] & [Prenom]") = 0) Then
If (DCount("[U_civilite]", "Utilisateurs", "[U_id]&[U_mp] = [Id] & [Mp]") = 0) Then
DoCmd.SetWarnings False
DoCmd.OpenQuery "R_Inscription", acViewNormal, acReadOnly
...


C'est donc de nouveau la fonction DCount qui est à l'honneur avec ce critère sur les paires dans la clause Where en troisième argument.
  • Dans l'antépénultième branche Else, adapter la fonction MsgBox comme suit :
...
DoCmd.SetProperty "Civ", , ""
Else
Beep
MsgBox "La paire Identifiant / Mot de passe existe déjà", vbCritical + vbOKOnly, "Paire déjà utilisée"
End If
Else
Beep
MsgBox "L'utilisateur existe déjà !", vbCritical + vbOKOnly, "Utilisateur déjà inscrit"
End If
Else
Beep
MsgBox "Tous les champs doivent être renseignés correctement", vbCritical + vbOKOnly, "Inscription non conforme"
End If
...
  • Enregistrer les modifications et basculer sur le formulaire en exécution,
  • Avec la liste déroulante, choisir la civilité Madame,
  • Dans la zone Nom, saisir le texte Vire,
  • Valider la saisie en enfonçant la touche Tab du clavier,
De cette manière, la zone suivante du prénom est activée. Et dans le même temps, vous notez que l'astérisque en regard de la zone Nom a disparu. La saisie est jugée conforme. Il s'agit d'une solution que nous avons aboutie à l'occasion des précédentes astuces.
  • Dans la zone Prénom, saisir le texte Sacha, puis valider avec la touche Tabulation du clavier,
L'utilisateur Sacha Vire existe déjà en base de données. C'est l'occasion de tester le déclenchement de la deuxième instruction conditionnelle du code VBA.
  • Dans la zone Identifiant, saisir un code numérique sur au moins 6 caractères, comme : 125678,
  • Dans la zone Mot de passe, saisir un code alphanumérique de 5 caractères, comme : AZ25e,
  • Enfin, cliquer sur le bouton Valider pour procéder à l'inscription,
Inscription refusée par le code VBA Access car utilisateur existe déjà

Le formulaire étant complètement renseigné, c'est bien la boîte de message du deuxième test qui se déclenche cette fois. Et bien sûr, elle est parée des personnalisations que nous lui avons apportées.
  • Cliquer sur le bouton Ok pour désactiver l'alerte,
  • Dans la zone Prénom, remplacer Sacha par Marie ,
Ainsi, la concordance des paires n'existe plus.
  • Dans la zone Identifiant, remplacer le précédent code par le suivant : 988223,
  • Dans la zone Mot de passe, remplacer le précédent par le suivant : HA88j,
Bien entendu, cette paire existe déjà. Vous pouvez le constater en ouvrant la table Utilisateurs. Il s'agit du dernier enregistrement.
  • Cliquer sur le bouton Valider pour procéder à l'inscription,
Inscription refusée par le code VBA Access car la paire Identifiant et Mot de passe existe déjà

Cette fois, c'est la branche Else du troisième test qui se déclenche. Les deux premiers ont été validés sans encombre. Mais comme cette paire Identifiant / Mot de passe est déjà empruntée, l'inscription est refusée.
  • Cliquer sur le bouton Ok pour neutraliser l'alerte,
  • Puis, revenir dans l'éditeur de code VBA Access,
Il nous reste une dernière zone de message à personnaliser. Cette fois, l'indicateur est positif. Il s'agit de la branche Alors de la triple vérification conditionnelle. Lorsque les trois premiers tests ont été tombés avec succès, plusieurs traitements sont entrepris, dont l'inscription des informations dans la table Utilisateurs. Et à ce titre, un message de confirmation est adressé. Il convient cette fois de lui associer une symbolique positive.
  • Adapter le premier MsgBox comme suit :
...
If (Len(.Le_Nom) > 3 And Len(.Prenom) > 3 And Len(.Id) > 5 And Len(.Mp) = 5 And .Civ <> "") Then
If (DCount("[U_civilite]", "Utilisateurs", "[U_nom]&[U_prenom]=[Le_Nom] & [Prenom]") = 0) Then
If (DCount("[U_civilite]", "Utilisateurs", "[U_id]&[U_mp]=[Id] & [Mp]") = 0) Then
DoCmd.SetWarnings False
DoCmd.OpenQuery "R_Inscription", acViewNormal, acReadOnly
Beep
MsgBox "L'inscription s'est déroulée avec succès", vbInformation + vbOKOnly, "Inscription validée avec succès"
DoCmd.SetProperty "Le_Nom", , ""
DoCmd.SetProperty "Prenom", , ""
...


C'est l'cône informative que nous greffons au bouton Ok dans la boîte de dialogue. Plus aucune tentative critique n'est à signaler. Le message confirme l'insertion des informations saisies dans la table source.
  • Enregistrer les modifications (CTRL + S),
  • Revenir sur le formulaire en exécution,
  • Modifier l'identifiant comme suit : 988224,
Ainsi, nous créons une paire unique.
  • Puis, cliquer sur le bouton Valider,
Inscription acceptée par le code VBA Access car tous les champs sont correctement renseignés

Dans un premier temps, c'est le message de confirmation personnalisé qui apparaît. Et à ce titre, vous notez le rôle de l'icône d'information beaucoup moins agressive et donc rassurante. Mais si vous cliquez sur le bouton Ok, une erreur surgit.

Erreur VBA Access après conversion de la macro car les arguments de la méthode sont mal renseignés

L'inscription s'est pourtant bien déroulée avec succès et vous pouvez le constater en ouvrant la table Utilisateurs. Le problème intervient après. Vous pouvez le constater en cliquant sur le bouton Débogage de la boîte de dialogue. C'est la première ligne exploitant la méthode SetProperty de l'objet DoCmd qui est incriminée. En résumé, l'inscription a bien eu lieu mais le formulaire n'est pas réinitialisé en vidant les zones. L'objet DoCmd est la contraction de l'expression Do Command. C'est un objet de programmation incontournable en VBA Access. Grâce à ses riches propriétés et méthodes, il permet de réaliser de nombreux réglages et d'entreprendre de nombreuses actions.

Argument manquant en VBA Access pour méthode SetProperty, Objet DoCmd

Ici donc, la conversion de la macro en VBA ne s'est pas aboutie totalement. La méthode SetProperty permet d'ajuster l'une des propriétés du contrôle qui lui est passé en premier paramètre. Et précisément dans ses arguments, il manque la valeur de la propriété à régler. Nous l'avons dit, à l'issue de l'inscription, nous souhaitons réinitialiser le formulaire. Donc, toutes les zones de texte doivent être vidées.
  • En haut de l'éditeur VBA Access, cliquer sur le bouton Réinitialiser,
Réinitialiser le code VBA Access

Après quelques recherches sur le Web notamment, vous pourrez constater que c'est la valeur acPropertyValue qui permet d'atteindre le contenu des contrôles. Ce réglage doit intervenir en deuxième argument de la méthode SetProperty. Nous avons donc cinq adaptations à entreprendre.
  • Adapter les cinq lignes de code concernées comme suit :
...
DoCmd.SetWarnings False
DoCmd.OpenQuery "R_Inscription", acViewNormal, acReadOnly
Beep
MsgBox "L'inscription s'est déroulée avec succès", vbInformation + vbOKOnly, "Inscription validée avec succès"
DoCmd.SetProperty "Le_Nom", acPropertyValue, ""
DoCmd.SetProperty "Prenom", acPropertyValue, ""
DoCmd.SetProperty "Id", acPropertyValue, ""
DoCmd.SetProperty "Mp", acPropertyValue, ""
DoCmd.SetProperty "Civ", acPropertyValue, ""

Else
Beep
MsgBox "La paire Identifiant / Mot de passe existe déjà", vbCritical + vbOKOnly, "Paire déjà utilisée"
End If
...


Avec le troisième et dernier paramètre laissé vide grâce aux guillemets (""), nous allons bien effacer le contenu de ces zones. Nous aurions d'ailleurs pu utiliser des instructions encore plus simples comme par exemple : Le_Nom.Value="".
  • Enregistrer les modifications et revenir sur le formulaire,
  • Remplir tous les champs avec de nouvelles informations,
Souvenez-vous, l'identifiant est exclusivement numérique et doit être codé sur au moins 6 chiffres. Le mot de passe est alphanumérique et doit être codé strictement sur 5 caractères.
  • Cliquer sur le bouton Valider,
Le message de confirmation apparaît comme précédemment. Mais cette fois, lorsque vous validez l'alerte, plus aucune erreur n'est à signaler. Le focus est rendu au formulaire. Et celui-ci est parfaitement vidé pour une application propre. Si vous ouvrez la table Utilisateurs, vous constatez la présence du nouvel inscrit. Nous avons donc réussi à aboutir le formulaire d'inscription par le code VBA. Et surtout, ce code est issu des actions de macro originelles.

Pour finaliser cette initiation au langage VBA par les macros, il nous reste quelques découvertes à entreprendre pour une bonne compréhension générale.
  • Revenir dans l'éditeur de code VBA Access,
Le processus d'inscription est donc enclenché lorsque les trois premiers tests sont passés avec succès. C'est la raison pour laquelle toutes les lignes de code concernées sont imbriquées dans la triple instruction conditionnelle en cascade. Avant donc le message de confirmation et la réinitialisation des contrôles du formulaire, ce sont trois lignes de code seulement qui se chargent vraisemblablement d'insérer les données saisies dans la table Utilisateurs. Cela peut paraître surprenant car la tâche à accomplir n'est pas une mince affaire. En réalité, c'est même seulement l'une de ces trois lignes qui se charge à elle seule de cette inscription. Et l'objet DoCmd est une fois de plus à l'honneur.

Tout d'abord, la ligne DoCmd.SetWarnings False permet de neutraliser les avertissements. Ceux-ci se déclenchent inévitablement lorsque le coeur des données est touché. La méthode SetWarnings de l'objet DoCmd est la traduction VBA de l'action de macro Avertissements. Avec la valeur False en paramètre, nous indiquons de ne pas afficher ces messages.

L'inscription des informations en base de données est réalisée par cette unique ligne de code :

DoCmd.OpenQuery "R_Inscription", acViewNormal, acReadOnly

En réalité, la main est passée à une requête Ajout grâce à la méthode OpenQuery de l'objet DoCmd. Cette requête insertion dynamique se nomme R_Inscription. Son nom est passé en premier argument de la méthode. Elle est effectivement présente dans la section Requêtes du volet de navigation. Nous l'avons conçue à l'occasion d'une précédente astuce. Au moment de l'appel par le code VBA, elle se charge de récupérer les informations saisies dans les contrôles du formulaire pour les insérer dans la table Utilisateurs. Les deux autres paramètres de la méthode OpenQuery sont facultatifs. La vue normale (acViewNormal) importe peu puisqu'une requête action est exécutée en tâche de fond. Il en va de même pour le mode lecture seule (acReadOnly).

Enfin, la troisième ligne est étonnante (Beep). Il s'agit d'une fonction qui ne requiert aucun paramètre. Son nom est très évocateur. Elle émet un signal sonore pour attirer l'attention de l'utilisateur au moment de l'affichage du message de confirmation. Si vous enlevez cette ligne, le signal disparaît sans nuire au bon déroulement du processus d'inscription.

Pour terminer, vous notez une construction particulière qui chapote l'ensemble du code. Il s'agit du bloc With (With CodeContextObject). Nous l'avions découvert et expliqué à l'occasion de l'apprentissage du langage VBA pour Excel. Il permet d'optimiser le code pour lister toutes les propriétés et méthodes d'un même objet, et même tous les objets enfants d'un objet parent. C'est le cas ici avec l'objet parent CodeContextObject. C'est une sécurité issue de la transcription des actions de macro. Souvenez-vous, nous avons déplacé des actions encapsulées pour les traduire grâce à une macro généralitse. Cet objet désigne donc le contexte, soit le formulaire parent. Il n'est donc pas nécessaire ici. Le formulaire est implicitement désigné puisque nous codons dans les bornes d'une procédurer attachée à l'un de ses contrôles (Le bouton Valider).
  • Supprimer la ligne : With CodeContextObject,
  • Tout en bas du code, supprimer sa borne de clôture : End With,
Ce n'est pas tout. Les objets Enfants ont donc été mentionnés avec un point (.) en préfixe pour descendre dans la hiérarchie. Dans la première instruction conditionnelle, il s'agit de les supprimer.
  • Transformer la ligne VBA suivante :
If(Len(.Le_Nom) > 3 And Len(.Prenom) > 3 And Len(.Id) > 5 And Len(.Mp) =5 And .Civ <> "") Then

Comme suit :

If (Len(Le_Nom)> 3 And Len(Prenom) > 3 And Len(Id) > 5 And Len(Mp) = 5 And Civ<> "") Then

Désormais, après avoir enregistré les modifications, si vous tentez une nouvelle inscription, elle se déroule parfaitement, malgré ce nettoyage qui nous a permis avec le reste de comprendre la structure et l'articulation de ce code VBA transcrit.

 
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