Icône de la ressource

VBA - Barre de progression interruptible sur la base d'un UserForm V5

Une Barre de Progression permet de faire patienter l'utilisateur lors de traitements longs et lui donne une information sur la progression de ces traitements.

Mise en œuvre très simple:
  1. A partir du fichier joint, il suffit d'importer le UserForm BarreProgression dans le projet VBA.
  2. Appeler la fonction BarreProgression.Display() avec les arguments décrits dans le code.
  3. Le Module_Test de ce même fichier donne un exemple d'utilisation.

    VB:
    '------------------------------------
    'Affichage de la barre de progression
    '
    'Appel:
    '-----
    'Call BarreProgression.Display(<arguments>)
    '
    'Arguments:
    '---------
    ' NbItems       : Nombre total d'items à traiter
    ' NoItem        : Numéro d'item en cours de traitement
    ' Titre         : Optionnel - Titre de la barre (par défaut "Progression")
    ' BarLeft       : Optionnel - Position Left du UserForm (par défaut au milieu en largeur de la fenêtre active)
    ' BarTop        : Optionnel - Position Top du UserForm (par défaut au milieu en hauteur de la fenêtre active)
    ' BarWidth      : Optionnel - Largeur de la barre (par défaut voir UserForm)
    ' BarHeight     : Optionnel - Hauteur de la barre (par défaut voir UserForm)
    ' BackColor     : Optionnel - Couleur de fond de la barre de progression (par défaut vert foncé)
    ' SystemMenuBar : Optionnel - True ou False selon qu'on veut afficher la barre de menu système (le Caption) du UserForm ou pas (par défaut True)
    '
    ' Return        : Valeur de progression de 0 à 100
    '               : -1 si interruption demandée (Touche <Enter> ou <Escape> ou clic sur le X de la barre de menu système)
    '                 Attention ! Si la touche <Escape> est proposée pour l'interruption sur la barre de progression, il faudra protéger
    '                 le code exécuté par la macro d'une interruption d'exécution du code avec Application.EnableCancelKey = False.
    '                 Sinon, ne proposer que la touche <Enter> pour l'interruption sur la barre de progression.
    '                 Le code de la Barre de Progression est quant à lui protégé d'une interruption d'exécution du code par la touche <Escape>.
    '------------------------------------
Originalité:
  • Avec la V2, la progression peut être, au choix du développeur, interrompue avec la touche <Enter> ou <Escape>.
    La touche <Escape> est plus naturelle mais si elle est proposée pour l'interruption de la Barre de Progression, il faut que le code de la Macro soit protégé d'une interruption du code par la touche <Escape> en définissant Application.EnableCancelKey = False.

    L'interruption captée au niveau de la Barre de Progression permet, si on le souhaite (Return Code = -1), de recevoir dans le traitement qui l'utilise l'indication d'une demande utilisateur d'interruption d'un traitement qui dure trop longtemps.

    En cas d'interruption traitée...
    - la fonction BarreProgression.Cancel() permet d'effacer le Barre de Progression,
    - la fonction BarreProgression.Continue() permet de continuer.
Versions:
  • V1 - Version initiale.
  • V2 - Ajout de l'interruption de la progression.
  • V3 - Ajout des paramètres optionnels BarreWidth et BarreHeight pour éventuelleùent redimensionner la Barre de Progression.
  • V4 - Amélioration pour la capture de l'interruption.
  • V5 - Ajout de paramètres de positionnement, de taille, de couleur, de retrait et de rajout du Caption.

Progresssion1.gif




Progresssion2.gif