formateur informatique

Parcourir tous les contrôles d'un formulaire Access

Accueil  >  Bureautique  >  Access  >  Access VBA  >  Parcourir tous les contrôles d'un formulaire 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 :


Parcourir les contrôles d'un formulaire

Lorsque des traitements groupés sont à entreprendre sur les contrôles d'un formulaire Access, il est intéressant et important de pouvoir optimiser le code, afin d'éviter de devoir régler les propriétés de chacun à énumérer par les noms respectifs. Ce principe est d'autant plus vrai que le formulaire fourmille de contrôles objets. C'est la raison pour laquelle, cette nouvelle astuce Access tient à démontrer comment parcourir tous les objets d'un formulaire. Et nous allons le voir, parmi ces objets, il est possible d'isoler seulement un groupe du même type pour impacter leurs propriétés sans influer sur les autres.

Base de données Access à télécharger
Pour la construction de ce petit code VBA Access, nous suggérons d'appuyer l'étude sur une base de données hébergeant un formulaire avec plusieurs contrôles à régler ensemble. Sur la gauche de l'écran, le volet de navigation indique que cette base de données est constituée d'une table, d'une requête et d'un formulaire.

Le formulaire d'inscription
Si vous double-cliquez sur le formulaire F_Inscription, vous l'affichez en mode exécution.

Formulaire inscription VBA Access

Ce formulaire d'inscription est tout à fait fonctionnel. Si vous renseignez tous les champs et que vous cliquez sur le bouton Valider, les informations sont insérées dans la table Utilisateurs. Nous l'avons conçu à l'occasion d'une astuce Access. Il s'appuie uniquement sur des actions de macro. Aucun code VBA n'est interpelé. En mode création, si vous cliquez sur le bouton Valider pour le sélectionner, si vous activez l'onglet Evénement de sa feuille de propriétés et que vous cliquez sur le bouton associé à son événement Au clic, vous affichez les actions de macro qui lui sont associées.

Actions de macro pour inscrire de nouvelles données dans une table Access

Plusieurs traitements et tests sont entrepris. Mais au milieu de tout cela, c'est la requête R_Inscription qui est exécutée. Elle réceptionne les informations saisies dans les champs du formulaire pour les insérer dans la table source, la table Utilisateurs.

Réinitialiser les champs du formulaire
En bas à droite du formulaire, vous notez la présence d'un bouton intitulé Réinitialiser. Sa vocation est de vider les zones de saisie mais aussi le potentiel choix émis sur la civilité avec la liste déroulante. Le principe ne semble pas fort utile. Certes dans cette démonstration, il s'agit d'un prétexte pour parcourir des contrôles spécifiques sur un formulaire Access par le code VBA.
  • Fermer l'éditeur de macro si vous l'aviez ouvert,
  • 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 Réinitialiser pour le sélectionner,
  • Puis, activer l'onglet Evénement de sa feuille de propriétés,
Déclencher un code VBA au clic sur un bouton de formulaire Access

Elle est généralement placée sur la droite de l'interface. Si vous ne la visualisez pas, vous pouvez la rendre disponible en cliquant sur le bouton Feuille de propriétés dans le ruban Conception de formulaires ou Création selon les versions.
  • Cliquer sur le bouton placé à droite de son événement Au Clic,
  • Dans la boîte de dialogue qui suit, choisir le générateur de code et valider par Ok,
Nous basculons ainsi dans l'éditeur VBA Access entre les bornes de la procédure événementielle Reinitialiser_Click. Son code se déclenchera au clic sur le bouton. Sa vocation est de réinitialiser les zones de saisie :

Private Sub Reinitialiser_Click()

End Sub


Déclarer la variable Objet
C'est désormais d'une boucle For Each dont nous avons besoin pour passer en revue tous les contrôles hébergés par le formulaire. Et comme vous le savez dans ce type de boucle, l'objet à gauche de l'expression doit être du même type que la collection d'objets à analyser, à placer à droite de l'expression. Dans un premier temps, nous avons donc besoin de déclarer une variable objet de type Control au sens large. Elle peut représenter une zone de texte aussi bien qu'une liste déroulante, un bouton ou une case à cocher par exemple. A nous de définir le type pendant l'analyse.

Remarque : Nous pourrions réaliser cette prouesse avec une macro Access et nous l'avons déjà fait grâce à l'action DéfinirPropriétés. Mais nous serions obligés de l'exploiter autant de fois que des zones à réinitialiser se présentent. Avec le VBA Access, un même code optimisé peut traiter quelques unités comme quelques centaines de contrôles.
  • Dans les bornes de la procédure, ajouter la déclaration de variable suivante :
Private Sub Reinitialiser_Click()
Dim controle As Control

End Sub


Analyser tous les contrôles du formulaire
C'est grâce à cette variable que nous allons maintenant pouvoir entreprendre le traitement récursif consistant à passer en revue tous les contrôles du formulaire tour à tour.
  • Sous la déclaration de variable, construire la boucle For Each suivante :
...
For Each controle In Me.Controls

Next controle
...


L'objet Me désigne l'objet actif au moment de l'appel. Il s'agit donc du formulaire lui-même. Sa propriété Controls renvoie la collection des contrôles qu'il héberge quels que soient leurs types. Et donc, grâce à la boucle For Each et à la variable controle, nous les passons tous en revue.

Tester le type de contrôle
Désormais et nous l'avons annoncé, nous devons réinitialiser le formulaire en vidant les zones de texte de leurs contenus. Il en va de même concernant la valeur mémorisée par le choix dans la liste déroulante. C'est la propriété Value en VBA qui permet d'atteindre le contenu de ces objets. Mais cette propriété n'existe pas pour tous les contrôles, comme pour les boutons par exemple. Tous les contrôles passés en revue ne peuvent donc pas être traités de la même façon au risque de faire planter le code. C'est la raison pour laquelle nous proposons de tester le type de chaque contrôle passé en revue afin d'exclure ceux qui ne sont pas désirés. Et pour cela, nous avons besoin d'une instruction conditionnelle.
  • Dans les bornes de la boucle, ajouter le test suivant :
...
If controle.ControlType = acTextBox Or controle.ControlType = acComboBox Then
controle.Value = ""
End If
...


C'est donc la propriété ControlType d'un objet de type Control qui permet d'obtenir l'information sur la nature de l'élément pointé. Avec les valeurs respectives acTextBox et acComboBox, nous nous assurons que l'objet en cours d'analyse par la boucle est soit une zone de texte, soit une zone de liste déroulante. Si la condition est vérifiée, nous vidons le contenu de chaque zone ainsi acceptée (="").

Pour finir, il convient de libérer les ressources. Comme vous le savez, chaque objet déclaré et initialisé, doit être détruit à l'issue.
  • Après la boucle, ajouter l'instruction VBA suivante :
Set controle = Nothing

Grâce au mot clé Set, nous entreprenons la réaffectation de la variable objet controle. En la réinitialisant à Nothing, nous la détruisons. Donc, nous libérons les ressources utilisées en mémoire.

Vider les contrôles au clic
Il est maintenant temps de tester ce processus de réinitialisation avec optimisation du code, grâce à cette boucle For Each pour parcourir tous les contrôles du formulaire Access.
  • Enregistrer les modifications (CTRL + S) puis basculer sur le formulaire Access (ALT + Tab),
  • L'enregistrer à son tour puis l'exécuter avec la touche F5 du clavier,
  • Choisir une civilité avec la liste déroulante,
  • Renseigner un nom et un prénom avec les deux zones de texte qui suivent,
  • Inscrire un identifiant composé de 6 chiffres comme : 586523,
  • Puis, taper un mot de passe alphanumérique de 5 caractères comme : atr88,
  • Dès lors, cliquer sur le bouton Réinitialiser,
Instantanément et comme vous pouvez l'apprécier, le formulaire est complètement vidé des informations saisies. Ces manipulations étaient un prétexte pour démontrer comment parcourir tous les contrôles d'un formulaire Access avec un code optimisé en VBA. En effet, ce code serait strictement identique même si le formulaire hébergeait des dizaines et des dizaines de contrôles de ce type.

 
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