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