XL 2016 VBA Excel - Barre de progression avec macro

denissmile

XLDnaute Nouveau
Bonjour,

Je me nomme Denis (Québec, Canada) et suis nouveau sur ce forum.

J'ai un fichier Excel monté en VBA avec tableaux croisés dynamiques et autres.

J'ai créé des boutons (sauvegarde, fermer et Mise à jour du document.)

La mise à jour est particulièrement longue. J'aimerais y attacher une barre de progression (%) afin de suivre l'évolution de la mise à jour.

Après des heures de recherches le plus près que j'ai pu réaliser est d'avoir l'apparition de la boîte de dialogue, mais pas de défilement ou encore avoir un défilement et par la suite la mise à jour. Mais rien qui puisse se faire simultanément.

Des solutions?

Merci
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir Denissmile,
Un progressbar dans le Statusbar.
Léger et efficace, évite l'utilisation d'un userform.
 

denissmile

XLDnaute Nouveau
Bonsoir Denissmile,
Un progressbar dans le Statusbar.
Léger et efficace, évite l'utilisation d'un userform.

Bonjour Sylvanu

Merci d'avoir répondu à mon appel à l'aide. Concernant les barres de progression, je suis débutant. Ta solution me semble correspondre à mes besoins. J'aurais quelques questions à te pauser, si cela t e convient.

Petit rappel. Je cherche une solution progress bar pouvant s'effectuer avec un bouton refreshall (actualiser tout à l'aide d'un Userform.

Option Explicit Pourquoi retrouve-t-on cette écriture au haut de chaque page du développeur?

#If VBA7 Then Première fois que je vois ce type d'écriture. Que signifie #?
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Pourquoi ce texte en rouge?
#Else
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If

Sub a() En quoi ce Sub (bouton test, je crois) a un rappoert avec la macro Refreshall que je veut traiter?
Dim i As Integer

For i = 1 To 100
BarreProgression 100, i Que signifie cette ligne?
Sleep 100 Que signifie cette ligne (sleep)?
Next i
End Sub

Petit rappel, je suis sur Office 365 professionnel Ecxel 2016.

Merci!
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir Denissmile,
Désolé de vous avoir perturbé, les questions que vous posez ne concerne pas le progressbar mais simplement pour le test de ce progressbar. :rolleyes:
Sleep est une librairie de windows permettant de faire un timer. Sleep 100 permet d'attendre 100ms. il est utilisé dans le test pour simuler une progression.

Pour le progressbar seul, utilisez la macro suivante :
VB:
' Affiche un ProgressBar dans le StatusBar
Sub ProgressbarStatusBar(Titre, Valeur, Total)
    If Titre = "" Then                          ' Si Titre vide, supprimer progressbar
        Application.StatusBar = ""
    Else                                        ' Sinon
        Pourcent = Int(100 * Valeur / Total)    ' Calcul du % d'avancement
        Plein = Int(50 * Valeur / Total)        ' Calcul du nombre de pavés pleins
        Vide = 50 - Plein                       ' Déduction du nombre de pavés vides ( pour faire 50 au total )
        Application.StatusBar = Titre & " - Progression : " & Pourcent & "%   " & _
                                        WorksheetFunction.Rept(ChrW(9608), Plein) & _
                                        WorksheetFunction.Rept(ChrW(9618), Vide)
    End If
End Sub

et pour l'appeler dans votre macro, vous faites :
Code:
ProgressbarStatusBar Titre, Valeur, Total
avec Titre le titre que vous voulez donner.
Valeur la valeur calculer pour le %
Total la valeur max.
Par ex :
Code:
ProgressbarStatusBar "Denissmile", 40, 100
fera un bargraph de 40% soit :
1.jpg
 

denissmile

XLDnaute Nouveau
Bonsoir Denissmile,
Désolé de vous avoir perturbé, les questions que vous posez ne concerne pas le progressbar mais simplement pour le test de ce progressbar. :rolleyes:
Sleep est une librairie de windows permettant de faire un timer. Sleep 100 permet d'attendre 100ms. il est utilisé dans le test pour simuler une progression.

Pour le progressbar seul, utilisez la macro suivante :
VB:
' Affiche un ProgressBar dans le StatusBar
Sub ProgressbarStatusBar(Titre, Valeur, Total)
    If Titre = "" Then                          ' Si Titre vide, supprimer progressbar
        Application.StatusBar = ""
    Else                                        ' Sinon
        Pourcent = Int(100 * Valeur / Total)    ' Calcul du % d'avancement
        Plein = Int(50 * Valeur / Total)        ' Calcul du nombre de pavés pleins
        Vide = 50 - Plein                       ' Déduction du nombre de pavés vides ( pour faire 50 au total )
        Application.StatusBar = Titre & " - Progression : " & Pourcent & "%   " & _
                                        WorksheetFunction.Rept(ChrW(9608), Plein) & _
                                        WorksheetFunction.Rept(ChrW(9618), Vide)
    End If
End Sub

et pour l'appeler dans votre macro, vous faites :
Code:
ProgressbarStatusBar Titre, Valeur, Total
avec Titre le titre que vous voulez donner.
Valeur la valeur calculer pour le %
Total la valeur max.
Par ex :
Code:
ProgressbarStatusBar "Denissmile", 40, 100
fera un bargraph de 40% soit :
Regarde la pièce jointe 1083979

Ok désolé. J'aurai des questions également sur le progressbar. Je suis en apprentissage

Qu'en est-t-il du # et du texte en rouge. Je vous joint le fichier que vous m'avez faire parvenir module_Testbarreprogress
 

Pièces jointes

  • VBA Barre de progression simple (1).xlsm
    21 KB · Affichages: 6

denissmile

XLDnaute Nouveau
Bonjour denissmile, sylvanu,

Si toutefois un UserForm était envisagé, voici une option...

Bonjour Dudu2

Merci d'avoir répondu à mon appel à l'aide. Concernant les barres de progression, je suis débutant. Ta solution me semble correspondre à mes besoins. J'aurais quelques questions à te pauser, si cela t e convient.

Petit rappel. Je cherche une solution progress bar pouvant s'effectuer avec un bouton refreshall (actualiser tout à l'aide d'un Userform.

Option Explicit Pourquoi retrouve-t-on cette écriture au haut de chaque page du développeur?

#If VBA7 Then Première fois que je vois ce type d'écriture. Que signifie #?
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Pourquoi ce texte en rouge?
#Else
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If

Sub a() En quoi ce Sub (bouton test, je crois) a un rappoert avec la macro Refreshall que je veut traiter?
Dim i As Integer

For i = 1 To 100
BarreProgression 100, i Que signifie cette ligne?
Sleep 100 Que signifie cette ligne (sleep)?
Next i
End Sub

Petit rappel, je suis sur Office 365 professionnel Ecxel 2016.

Merci!
Bonjour denissmile, sylvanu,

Si toutefois un UserForm était envisagé, voici une option...

Bonjour Dudu2 (lire plutôt ce message)

Réf : Sub Test dans module_Testbarre progression

Merci d'avoir répondu à mon appel à l'aide. Concernant les barres de progression, je suis débutant. Ta solution me semble correspondre à mes besoins. J'aurais quelques questions à te pauser, si cela t e convient.

Petit rappel. Je cherche une solution progress bar pouvant s'effectuer avec un bouton refreshall (actualiser tout à l'aide d'un Userform.

Option Explicit Pourquoi retrouve-t-on cette écriture au haut de chaque page du développeur?

#If VBA7 Then Première fois que je vois ce type d'écriture. Que signifie #?
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Pourquoi ce texte en rouge?
#Else
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If

Sub a() En quoi ce Sub (bouton test, je crois) a un rapport avec la macro Refreshall que je veut traiter?
Dim i As Integer

For i = 1 To 100
BarreProgression 100, i Que signifie cette ligne?
Sleep 100 Que signifie cette ligne (sleep)?
Next i
End Sub

Petit rappel, je suis sur Office 365 professionnel Ecxel 2016.

Merci!
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
bonsoir Denissmile,
BarreProgression 100, i Que signifie cette ligne?
Avez vous lu le post #5 ??? je vous l'explique et vous dit que vous n'en n'avez nul besoin.
Quant à "Option explicit" il vous oblige à déclarer toutes vos variables par un Dim.
On peut le supprimer, on peut ne pas déclarer les variables mais cela présente des risques d'erreurs d'orthographe sur les noms de variables et à conduire à des bugs difficiles à identifier.
 

denissmile

XLDnaute Nouveau
bonsoir Denissmile,

Avez vous lu le post #5 ??? je vous l'explique et vous dit que vous n'en n'avez nul besoin.
Quant à "Option explicit" il vous oblige à déclarer toutes vos variables par un Dim.
On peut le supprimer, on peut ne pas déclarer les variables mais cela présente des risques d'erreurs d'orthographe sur les noms de variables et à conduire à des bugs difficiles à identifier.

Oui mais vous m'avez mentionné que c'étais Dudu2 qui était le propriétaire du fichier Excel et c'est lui que je tente de joindre. Je suis aussi nouveau sur ce forum.
 

denissmile

XLDnaute Nouveau
Bonjour denissmile, sylvanu,

Si toutefois un UserForm était envisagé, voici une option...

Bonjour Dudu2 réf : module_Testbarreprogression

Merci d'avoir répondu à mon appel à l'aide. Concernant les barres de progression, je suis débutant. Ta solution me semble correspondre à mes besoins. J'aurais quelques questions à te pauser, si cela t e convient.

Petit rappel. Je cherche une solution progress bar pouvant s'effectuer avec un bouton refreshall (actualiser tout à l'aide d'un Userform.

Le bouton test avctive qu'elle macro?
La macro refreshall serais considérer de quelle façon dans le bouton test?


Option Explicit Pourquoi retrouve-t-on cette écriture au haut de chaque page du développeur?

#If VBA7 Then Première fois que je vois ce type d'écriture. Que signifie #?
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Pourquoi ce texte en rouge?
#Else
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If

Sub a() En quoi ce Sub (bouton test, je crois) a un rappoert avec la macro Refreshall que je veut traiter?
Dim i As Integer

For i = 1 To 100
BarreProgression 100, i Que signifie cette ligne?
Sleep 100 Que signifie cette ligne (sleep)?
Next i
End Sub

Petit rappel, je suis sur Office 365 professionnel Ecxel 2016.

Merci!
 

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
283 605
Messages
1 852 922
Membres
151 980
dernier inscrit
Kara2579
Haut Bas