formateur informatique

Barre de progression sur formulaire Access

Accueil  >  Bureautique  >  Access  >  Access VBA  >  Barre de progression sur 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    Inscription Newsletter
Sujets que vous pourriez aussi aimer :


Barre de progression sur formulaire Access

Dans le volet précédent, nous avons conçu une procédure VBA pour engager un traitement automatisé sur une table de la base de données. Ce traitement avait consisté à purger tous les accents présents dans la table pour les remplacer par les mêmes lettres, mais sans accents. Dans cette suite, nous proposons de suivre l'évolution de ce traitement grâce à une barre de progression implantée sur le formulaire.

Barre de progression sur formulaire Access pour suivre évolution du traitement

Sur l'exemple illustré par la capture, l'utilisateur clique sur un bouton pour engager le processus de correction des accents dans la table source. Le traitement est très rapide malgré les plusieurs centaines d'enregistrements à corriger. Malgré tout, une barre de progression évolue dynamiquement pour rendre compte en temps réel de la progression de la tâche.



Base de données Access à télécharger
Pour le développement de cette solution, nous suggérons de récupérer la base de données des travaux précédents. Elle héberge le formulaire avec son bouton de correction relié au code VBA réalisant le traitement. Comme l'indique le volet de navigation, cette base de données est constituée de deux tables et d'un formulaire. La table societes2 et une copie de la table societes. La vocation de cette copie est de pouvoir réaliser plusieurs essais consécutifs de correction. Ces tables sont donc gorgées d'accents à purger. Et le code VBA destiné à les remplacer existe déjà. Il est le fruit des travaux précédents. Ici, nous souhaitons l'accompagner simplement pour rendre compte de l'état d'avancement avec une barre de progression à paramétrer par le code VBA.
  • Dans le volet de navigation, cliquer droit sur le formulaire f_nettoyer,
  • Dans le menu contextuel, choisir de l'ouvrir en mode Création,
  • Sur le formulaire en conception, cliquer sur le bouton Nettoyer la table,
  • Dès lors, activer l'onglet Evénement de sa feuille de propriétés,
  • Puis, cliquer sur le petit bouton associé à son événement Au clic,
De cette manière, nous basculons dans l'éditeur VBA Access entre les bornes de la procédure Nettoyer_Click.

La procédure de correction des accents
C'est précisément dans cette procédure que nous devons intervenir pour ajouter quelques lignes de code VBA pour animer la barre de progression. Mais avant cela, faudra-t-il encore penser à ajouter un contrôle ProgressBar sur le formulaire. Il s'agit d'un contrôle ActiveX. Nous allons y revenir très vite.

Tout d'abord et pour résumer, ce sont des objets de base de données qui sont déclarés :

Dim base As Database: Dim enr As Recordset

Ce sont ensuite des tableaux de variables qui sont affectés :

lesAccents = Split("à, á, â, ã, ä, å, ç, è, é, ê, ë, ì, í, î, ï, ð, ò, ó, ô, õ, ö, ù, ú, û, ü, ý, ÿ", ", ")
lesLettres =Split("a, a, a, a, a, a, c, e, e, e, e, i, i, i, i, o, o, o, o, o, o, u, u, u, u, y, y", ", ")


Le premier énumère les lettres accentuées à remplacer. Le second recense ces mêmes lettres et dans le même ordre, mais sans accents.

Dès lors, les objets de base de données sont initialisés pour pointer sur la table societes et manipuler ses enregistrements :

Set base = CurrentDb()
Set enr = base.OpenRecordset("societes")


C'est ainsi que la boucle destinée à les parcourir tous débute :

.MoveFirst

Do

.MoveNext
Loop While Not .EOF


C'est ainsi, pour chaque enregistrement scruté tour à tour, qu'une autre boucle parcourt tous les accents du tableau de variables, pour les remplacer par les lettres de l'autre tableau, lorsque ces accents sont trouvés dans les champs :

For i = 0 To UBound(lesAccents)
nom = Replace(nom, lesAccents(i), lesLettres(i))
act = Replace(act, lesAccents(i), lesLettres(i))
dep = Replace(dep, lesAccents(i), lesLettres(i))
Next i


C'est alors une classique requête Update qui est exécutée pour mettre à jour l'enregistrement courant en tenant compte des correctifs apportés sur les accents :

requete = "Update societes SET societes_nom = '" & nom & "', societes_activite='" & act & "', societes_departement='" & dep & "' WHERE societes_id=" & lid
base.Execute requete




Le contrôle ProgressBar
Maintenant que les présentations sont faites, il est temps d'ajouter une barre de progression sur le formulaire Access.
  • Basculer sur le formulaire en conception (ALT + Tab),
  • Dans le ruban Conception de formulaires, déployer la liste des contrôles,
Ce ruban peut s'intituler Création selon la version d'Access.
  • En bas des propositions, choisir l'option Contrôles ActiveX,
Ajouter un contrôle ActiveX sur un formulaire Access

De fait, la boîte de dialogue des contrôles ActiveX apparaît. Ils sont tous listés par ordre alphabétique.
  • Choisir le contrôle Microsoft ProgressBar Control et valider par le bouton Ok,
Ajouter une barre de progression (ProgressBar) sur le formulaire Access

La barre de progression se dépose ainsi sur le formulaire. Vous pouvez la déplacer sous le bouton et la redimensionner de manière à ce qu'elle occupe toute la largeur disponible.

Redimensionner la barre de progression sur le formulaire Access

Il est maintenant important d'attribuer un nom précis à cet objet ProgressBar pour le piloter explicitement par le code VBA Access.
  • Activer l'onglet Toutes de sa feuille de propriétés,
  • Dans sa propriété Nom, renseigner l'intitulé suivant : Progression,
  • Puis, valider par la touche Entrée du clavier,
Renommer le contrôle ProgressBar sur le formulaire Access

Maintenant, si vous activez l'onglet Autres de sa feuille de propriétés, vous remarquez qu'il est possible de régler les propriétés Max etMin. Elles représentent les deux bornes de la barre de progression. Ces valeurs nous satisfont dans la mesure où nous souhaitons calculer la progression du processus en pourcentage.



Les variables de proportion
Pour connaître le pourcentage de progression, nous avons besoin de deux variables. La première doit connaître le nombre d'enregistrements à parcourir. La seconde doit rendre compte en temps réel du numéro de l'enregistrement en cours d'analyse par la boucle. C'est un ratio entre les deux qui permettra de déterminer la progression à affecter en valeur entière au ProgressBar.
  • Revenir dans l'éditeur VBA Access,
  • Dans la partie déclarative, ajouter les deux déclarations suivantes :
...
Dim base As Database: Dim enr As Recordset
Dim i As Integer: Dim lid As Integer
Dim nb As Integer: Dim compteur As Long
Dim nom As String: Dim act As String: Dim dep As String
Dim requete As String: Dim lesAccents() As String: Dim lesLettres() As String
...


Affectation des variables de proportion
Maintenant que ces deux variables sont déclarées, nous devons les initialiser.
  • Avant le bloc With, ajouter les deux affectations suivantes :
...
Set base = CurrentDb()
Set enr = base.OpenRecordset("societes")

nb = enr.RecordCount: compteur = 0

With enr
.MoveFirst
...


La propriété RecordCount d'un objet de type Recordset renseigne sur le nombre total d'enregistrements contenus dans la table analysée. Ce nombre est donc désormais mémorisé dans la variable nb. Quant à la variable compteur, nous l'initialisons fort logiquement à zéro tant que l'analyse de la boucle n'a pas encore démarré.

Le pourcentage de progression
A chaque fois qu'un enregistrement est corrigé et avant de passer au suivant, nous devons désormais calculer l'état d'avancement du processus. Et pour cela, il suffit de ramener la valeur de la progression (compteur) en pourcentage par rapport au nombre total d'enregistrements.
  • Dans la boucle Do et avant le MoveNext, ajouter les deux instructions VBA suivantes :
...
requete = "Update societes SET societes_nom = '" & nom & "', societes_activite='" & act & "', societes_departement='" & dep & "' WHERE societes_id=" & lid
base.Execute requete

compteur = compteur + 1
Progression.Value = Int((compteur * 100) / nb)


.MoveNext
Loop While Not .EOF
...


Dès qu'un enregistrement est corrigé (Après le Update), nous l'ajoutons au cumul des enregistrements déjà traités (compteur= compteur + 1). Grâce à cet indicateur, nous calculons le ratio de progression ((compteur * 100) / nb) par rapport au nombre total d'enregistrements. Nous obtenons la progression en pourcentage que nous arrondissons à l'entier numérique le plus proche pour le passer à la propriété Value de l'objet Progression. C'est ainsi que le ProgressBar va pouvoir faire évoluer ses graduations en temps réel.



Lancer la barre de progression
Il ne nous reste plus qu'à tester le rendu graphique sur le formulaire en exécution.
  • Enregistrer les modifications (CTRL + S) et basculer sur le formulaire (ALT + Tab),
  • L'exécuter par exemple avec la touche F5 du clavier,
  • Puis, cliquer sur le bouton Nettoyer la table,
Vous voyez effectivement la barre de progression rendre compte en temps réel du processus. Certes, il se déroule très vite sur ces 1200 enregistrements, malgré la masse d'informations traitées. Mais imaginez le même traitement sur une base de données de plusieurs dizaines de milliers de lignes. Dans ces conditions, la barre de progression serait d'autant plus précieuse pour alerter l'utilisateur de l'approche de la fin du mécanisme.

Avancement de la barre de progression lors du traitement sur le formulaire VBA Access

Et bien entendu, si vous ouvrez la table societes en mode feuille de données, vous constatez qu'elle a été complètement purgée de ses accents.

 
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