Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
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 .
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.
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 .
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,
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,
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,
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 ,
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 .
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 ,
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,
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,
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 ,
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.
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.
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 ,
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 .