Comment faire une pause en VBA sur Excel ?

Pour ce nouveau chapitre de la formation dédiée à la découverte de VBA sur Excel nous allons découvrir comment interrompre le déroulement d’une macro VBA afin d’effectuer une pause.

 

Téléchargement

Vous pouvez télécharger le fichier d'exemple de cet article en cliquant sur le lien suivant :

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.
 

 

Tutoriel Vidéo

 

 

1. Présentation

Comme nous venons de le voir dans l’introduction, je vais vous montrer dans ce tutoriel comment réaliser une pause en VBA.

Au premier abord, il peut sembler curieux de vouloir insérer une pause dans une macro-commande, et donc vouloir augmenter le temps d’exécution de celle-ci.

Mais les raisons peuvent être assez variées :

  • Attendre qu’une autre tâche ait le temps de s’exécuter,
  • Laisser à l’utilisateur le temps de la réflexion,
  • Rendre visible l’exécution d’une tâche qui serait bien trop rapidement exécutée pour qu’elle soit visible, …

 

2. Compter dix secondes

Pour illustrer ce tutoriel, nous allons partir d’une toute petite macro-commande qui se contente d’énumérer les nombres de 1 à dix dans une cellule lorsque nous cliquons sur un bouton :

Excel formation - faire une pause en vba - 01

Cette macro est volontairement très simple, et consiste tout simplement à lancer une boucle For… Next dix fois de suite pour y afficher la valeur de i :

Sub compter()
    Dim i As Integer
    For i = 1 To 10
        [_cellule] = i
    Next
 
End Sub

 

Pour simplifier la rédaction de la procédure, la cellule de destination est identifiée avec un nom (« _celllule ») :

Excel formation - faire une pause en vba - 02

Lorsque nous lançons la macro en cliquant sur le bouton, nous pouvons nous rendre compte que celle-ci s’exécute extrêmement rapidement.

Bien entendu, cette vitesse pourra fortement variée en fonction de la puissance du poste sur laquelle celle-ci est exécutée.

Maintenant, imaginons que nous voulions que le décompte corresponde à l’écoulement de dix secondes.

Nous devrons alors attendre une seconde entre chaque itération de la boucle.

Pour cela nous allons créer une macro dédiée, que nous allons appeler pause :

Excel formation - faire une pause en vba - 03

La méthode la plus simple pour effectuer une pause avec VBA consiste à utiliser la méthode Application.Wait() qui permet d’interrompre le déroulement de la macro jusqu’à ce qu’une certaine heure soit atteinte.

Par exemple pour arrêter le programme jusqu’à 18 heures, nous utiliserons :

Sub pause()
    Application.Wait "18:00:00"
End Sub

Bien entendu, ce qui nous intéressera ici ne sera pas d’attendre une heure donnée, mais qu’un intervalle de temps soit écoulé.

Pour cela, nous partirons simplement de l’heure actuelle (à laquelle la macro a été lancée, que nous récupérons avec la fonction Now()) à laquelle nous ajouterons la durée souhaitée de la pause :

Sub pause()
    Application.Wait Now() +  TimeValue("00:00:01")
End Sub

Notre macro étant maintenant terminé, nous pouvons l’appeler depuis la macro principale :

Sub compter()
    Dim i As Integer
    For i = 1 To 10
        [_cellule] = i
        pause
    Next
End Sub

Puis l’exécuter à nouveau pour constater que chaque nouveau nombre correspond effectivement à une seconde.

En revanche, l’inconvénient de cette méthode, c’est qu’il n’est pas possible d’effectuer de pause inférieure à une seconde.

 

3. Effectuer une pause de moins d’une seconde

Maintenant, plutôt que d’attendre une seconde entre chaque dénombrement, nous allons souhaiter réduire ce délai par deux, soit ½ seconde.

Pour cela, nous allons devoir utiliser une autre méthode : nous allons utiliser une boucle Do While… Loop, qui se répètera tant que le délai souhaité ne sera pas atteint.

Pour cela, nous allons commencer par créer une nouvelle variable, que nous allons typer en tant que Single, c’est-à-dire un nombre à virgule et qui va permettre d’enregistrer l’heure de fin de la pause.

Pour définir la valeur de cette variable, nous allons utiliser la fonction Timer() qui permet d’obtenir le nombre de secondes écoulées au cours de la journée (depuis minuit).

Il suffit ensuite d’ajouter la durée souhaitée :

    Dim finPause As Single
    finPause = Timer() + 0.5

Ensuite, nous pouvons lancer une boucle pour attendre que la fonction Timer() renvoie une valeur au moins égale à la valeur de cette fonction finPause :

    Do While Timer < finPause
    Loop

Nous pouvons tester le programme et constater que maintenant celui-ci s’exécute deux fois plus vite.

4. Continuer de travailler pendant la pause

L’inconvénient des méthodes que nous venons de découvrir juste avant, et qui est d’ailleurs commun à la plupart des macro-commandes, c’est que dès lors que la macro est démarrée, la main est transférée à Excel et qu’il n’est plus possible d’utiliser Excel.

La solution pour résoudre ce problème consiste simplement à ajouter l’instruction DoEvents dans la boucle Do While :

    For i = 1 To 10
        [_cellule] = i
        pause
        DoEvents
    Next

La commande DoEvents permet de céder le contrôle au système d’exploitation le temps que VBA puisse exécuter une commande donnée.

Celui-ci reprend automatiquement le contrôle lorsque la tâche est terminée.

Attention toutefois, certaines actions auront pour effet d’interrompre le déroulement de la macro, comme le fait de se saisir du contenu dans une cellule !

Excel formation - faire une pause en vba - 04

 

 

 



Articles qui pourraient vous intéresser

Comment établir le classement des équipes de la Ligue 1 sur Excel ?
Comment faire une pause en VBA sur Excel ?
Comment savoir si un fichier existe dans un dossier en VBA avec Excel ?
Comment protéger ses macros VBA (limiter la consultation du code et le lancement) sur Excel ?
Les 6 bonnes habitudes qui facilitent le développement en VBA sur Excel
Les tableaux de données d'Excel
Comment créer nos propres objets VBA avec les classes personnalisées [#30 FORMATION EXCEL VBA COMPLETE]
Comment lancer des macros automatiquement avec les évènements VBA : Les objets Workbook [#31 FORMATION EXCEL VBA COMPLETE]
Comprendre et corriger les erreurs de VBA [#29 FORMATION EXCEL VBA COMPLETE]
Comment créer des commentaires de pro sur Excel
Créons nos propres types de variables en VBA [#11 FORMATION EXCEL VBA COMPLETE]
Les tableaux de VBA [#27 FORMATION EXCEL VBA COMPLETE]

Contact - Plan du site - À propos - Contact

© Excel-Formation 2018 - Excel, simplement

Haut de la page

Excelformation.fr propose de nombreuses formations pratiques et gratuites sur Microsoft Excel : des cours pour apprendre à structurer et analyser les données, des tutos sur les fonctions avancées, les formules et les formules avancées d'Excel, les formules matricielles, les mise-en-formes conditionnelles, les graphiques Excel (xls, xlsx, xlsm,…). Des tutoriels pour apprendre à automatiser les tâches répétitives (via des macro-commandes en VBA) de vos classeurs Excel.