Comment afficher une barre de progression avec un formulaire utilisateur dans Excel

Résumé

Si vous disposez d’une macro Microsoft Visual Basic pour Applications qui prend beaucoup de temps, vous pouvez indiquer à l’utilisateur que la macro progresse correctement. Cet article explique comment créer une barre de progression avec un formulaire utilisateur dans Microsoft Excel.

Informations supplémentaires

Microsoft fournit des exemples de programmation à titre d'illustration uniquement, sans garantie expresse ou implicite. Cela inclut, sans y être limité, les garanties implicites de commercialisation et d'adaptation à un but en particulier. Cet article considère que vous connaissez le langage de programmation présenté et les outils utilisés pour créer et déboguer des procédures. Les ingénieurs du support Microsoft peuvent expliquer la fonctionnalité d'une procédure en particulier. Toutefois, ils ne modifieront pas ces exemples pour fournir des fonctionnalités supplémentaires ou créer des procédures répondant à vos besoins spécifiques.

Créer le formulaire utilisateur

Dans l’exemple suivant, une sous-routine Visual Basic remplit une grande plage de cellules avec un nombre aléatoire. L’indicateur indique que la macro s’exécute correctement.

  1. Ouvrez un nouveau classeur dans Excel.

  2. Dans Microsoft Office Excel 2003 et dans les versions antérieures d’Excel, cliquez sur Outils, pointez sur Macro, puis cliquez sur Visual Basic Editor.

    Dans Microsoft Office Excel 2007, cliquez sur Visual Basic dans le groupe Code sous l’onglet Développeur .

    Note Pour afficher l’onglet Développeur dans le ruban, procédez comme suit :

    1. Démarrez Excel 2007, cliquez sur le bouton Microsoft Office, puis sur Options Excel.
    2. Dans la boîte de dialogue Options Excel , cliquez sur Populaire, puis cliquez pour sélectionner l’onglet Afficher le développeur dans la case à cocher Ruban.
  3. Dans le menu Insertion, cliquez sur UserForm.

  4. Dessinez un contrôle Label sur le formulaire utilisateur.

  5. Remplacez les propriétés suivantes du contrôle Label par les valeurs suivantes : | Propriété| Valeur| |---------------|-----------------------------| | Légende| Mise à jour à présent. Veuillez patienter... | Note Si la fenêtre Propriétés n’est pas visible, cliquez sur Fenêtre Propriétés dans le menu Affichage .

  6. Dessinez un contrôle Frame sur le formulaire utilisateur.

  7. Remplacez les propriétés suivantes du contrôle Frame par les valeurs suivantes : | Propriété | Valeur| |---------|--------------------| | Name FrameProgress|

  8. Dessinez un contrôle Label sur le contrôle Frame.

  9. Remplacez les propriétés suivantes du contrôle Label par les valeurs suivantes : | Propriété| Valeur| |----------|---------------------------| | Nom | LabelProgress| | BackColor |& H000000FF&| | SpecialEffect |fmSpecialEffectRaised|

Tapez le code de macro

  1. Double-cliquez sur le formulaire utilisateur pour ouvrir la fenêtre Code du formulaire utilisateur.

  2. Dans le module, tapez le code suivant pour l’événement UserForm_Activate :

    Private Sub UserForm_Activate()
        ' Set the width of the progress bar to 0.
        UserForm1.LabelProgress.Width = 0
    
    ' Call the main subroutine.
        Call Main
    End Sub
    
    
  3. Dans le menu Insertion, cliquez sur Module.

  4. Dans la fenêtre Code du module, tapez le code suivant :

    Sub ShowUserForm()
        UserForm1.Show
    End Sub
    
    Sub Main()
        Dim Counter As Integer
        Dim RowMax As Integer, ColMax As Integer
        Dim r As Integer, c As Integer
        Dim PctDone As Single
    
    Application.ScreenUpdating = False
        ' Initialize variables.
        Counter = 1
        RowMax = 100
        ColMax = 25
    
    ' Loop through cells.
        For r = 1 To RowMax
            For c = 1 To ColMax
                'Put a random number in a cell
                Cells(r, c) = Int(Rnd * 1000)
                Counter = Counter + 1
            Next c
    
    ' Update the percentage completed.
            PctDone = Counter / (RowMax * ColMax)
    
    ' Call subroutine that updates the progress bar.
            UpdateProgressBar PctDone
        Next r
        ' The task is finished, so unload the UserForm.
        Unload UserForm1
    End Sub
    
    Sub UpdateProgressBar(PctDone As Single)
        With UserForm1
    
    ' Update the Caption property of the Frame control.
            .FrameProgress.Caption = Format(PctDone, "0%")
    
    ' Widen the Label control.
            .LabelProgress.Width = PctDone * _
                (.FrameProgress.Width - 10)
        End With
    
    ' The DoEvents allows the UserForm to update.
        DoEvents
    End Sub
    
    
  5. Revenez à Excel.

  6. Dans Excel 2003 et dans les versions antérieures d’Excel, pointez sur Macro dans le menu Outils , puis cliquez sur Macros.

    Dans Excel 2007, cliquez sur Macros dans le groupe Code sous l’onglet Développeur .

  7. Dans la boîte de dialogue Macro , cliquez pour sélectionner ShowUserForm, puis cliquez sur Exécuter.

Une boîte de dialogue avec une barre de progression rouge s’affiche. La barre de progression augmente à mesure que la sous-routine main remplit les cellules de la feuille de calcul.

La sous-routine ShowUserForm affiche le formulaire utilisateur. La procédure attachée à l’événement Activate du formulaire utilisateur appelle la sous-routine Main . La sous-routine principale remplit les cellules avec des nombres aléatoires. En outre, la sous-routine appelle la sous-routine UpdateProgressBar qui met à jour le contrôle Label sur le formulaire utilisateur.

Note Lorsque vous utilisez cette technique, votre macro prend un peu plus de temps pour terminer ses tâches prévues.