XL 2019 Barre de progression

BEKA One

XLDnaute Nouveau
Salut la communauté,
Je viens encore une fois solliciter l'aide du forum. Je précise que je suis un débutant en excel. Et là je suis presque à la fin d'un de mes projets et j'ai besoin d'un gros coup de main.

J'ai élaboré un fichier comportant une bonne dizaine de feuilles qui se remplissent à partir des formulaires. J'ai préparé le fichier pour être réutilisable les années suivantes, du coup j'ai prévu un code de réinitialisation qui permet de vider toutes les feuilles en plus des photos dans les répertoires séparés. Mais vu qu'il y a plusieurs feuilles, le code de la procédure prend du temps pour s'exécuter. C'est là que j'ai pensé y insérer une barre de progression afin d'informer l'utilisateur sur l'état d'avancée de la procédure.

J'ai réussi à trouver sur internet deux (02) modèles de barre de progression qui me vont bien. Mon seul problème c'est que je n'arrive pas à adapter les codes à mon projet. Ce que je souhaite faire, c'est de pouvoir afficher l'état d'avancement de l'exécution du code de suppression des données des feuilles grâce aux barres de progression. J'avoue que je ne comprend rien aux codes trouvés sur le net.

J'ai créé deux (02) fichiers ci-joints avec un exemple de feuille pré remplie avec les barres de progression que je souhaite intégrer à mon projet. Merci d'avance à toutes les personnes qui sont disposées à m'aider dans cette tâche.

PS: Au passage, quelqu'un aurait-il un code qui permettrait de supprimer uniquement des images dont les noms commencent par un préfixe donné (par exemple AGE-000) dans un dossier!

Cordialement!
 

Pièces jointes

  • BARRE_PROGRESSION.xlsm
    40.8 KB · Affichages: 37
  • PROGRESS_BAR.xlsm
    45 KB · Affichages: 29

BEKA One

XLDnaute Nouveau
Merci à tous, encore plus à la ressource de Patrick Toulon.

J'ai essayé d'insérer mon code dans votre procédure, et ça a l'air de marcher. C'est juste que c'est d'une lenteur inexplicable. Surement à moi de revoir mes codes!

Cordiales salutations!
 

Roland_M

XLDnaute Barbatruc
re

mais qu'est-ce qui ne fonctionne pas ?
car moi je sais que ça fonctionne, je fais mes essais avant de joindre.

c'est avec la barre de progression ou la macro pour suppr fichiers ?
et c'est quoi qui fonctionne pas exactement !

pas facile de vous aider si vous n'y mettez du vôtre !
maintenant si ça ne fonctionne pas et que ça vous convient, pour moi c'est ok !
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
Bonjour Roland

j'aime bien ton principe de longueur fixe de la barre dans le status
je te propose de séparer les index de boucle et de situation
en effet dans une boucle il n'est pas forcé que l'on démarre de 1 to XXX??

VB:
Sub test()
    Dim debut&, fin&, rReste$, Reste$, effectué$, LongBar&
    debut = 100    'debut de la boucle
    fin = 2000    'limite de la boucle
    LongBar = 50    'longueur de la barre de progression
    char = String(1, Chr(6))    'le carateres de situation non atteint
    For i = debut To fin Step 0.01    'boucle de 100 a 2000
        a = Int(i / (fin / LongBar))    'index de situation d'avancement
        Reste = String(LongBar - a - 1, char)    ' ce qu'il reste de la chaine apres
        efectué = 100 - (Len(Reste) / LongBar * 100) & "%"    'pourcentage effectué
        rReste = Len(Reste) / LongBar * 100 & "%"    'pourcentage restant
        'affichage dans mar de status
        Application.StatusBar = "   <<| " & String(a, Chr(8)) & Reste & " |>> EFFECTUE : " & efectué & " / RESTE :  " & rReste
        'DoEvents'autorise d'autre action pendant la boucle mais ralenti la boucle(testez bloqué et débloqué)
    Next
End Sub
 
Dernière édition:

ChTi160

XLDnaute Barbatruc
Bonjour le Fil
Petit problème d’orthographe
Sub test()
Dim debut&, fin&, rReste$, Reste$, effectué$, LongBar&
efectué = 100 - (Len(Reste) / LongBar * 100) & "%" 'pourcentage effectué
Application.StatusBar = " <<| " & String(a, Chr(8)) & Reste & " |>> EFFECTUE : " & efectué & " / RESTE : " & rReste
j'ai rajouté ça Lol
Application.StatusBar = ""
jean marie
 

patricktoulon

XLDnaute Barbatruc
re
j'en ai même une plus simple finalement
VB:
Sub testzz()
    Dim debut&, fin&, i&
    debut = 386   'debut de la boucle
    fin = 20000    'limite de la boucle
    For i = debut To fin    'boucle de 386 a 20000
        progress3 debut, fin, i
        DoEvents    'autorise d'autres action pendant la boucle mais ralenti la boucle(testez bloqué et débloqué)
    Next

End Sub

Sub progress3(debut, fin, i)
    Dim a&, StringBar$, longBar&
    longBar = 75'longueur de la bar de progression en terme de caractère
    a = Round((i - debut) / (fin / longBar))  'calcul index(situation bar) par rapport à i en fonction du début différent de 1 et de fin divisée par la longueur de barre
    StringBar = String(a, Chr$(8)) & String(longBar - (a), Chr$(6)) 'création du string
    Application.StatusBar = "  << |||" & StringBar & "||| >>  " & Int((a + 0.0001) * 100 / longBar) & " % EFFECTUE""" ' le (((0.0001))) c'est pour éviter le division par zero
End Sub

le début et la fin de la boucle peut être ce que tu veux et tu peux changer longbar a ta guise sans changer le calcul
je garde l'idée ;)
 
Dernière édition:

Roland_M

XLDnaute Barbatruc
re

oui mais moi je travaille avec ValEnCours et ValMaxi
AffProgressStatusBar(ValEnCours As Variant, ValMaxi As Variant)

toi c'est quoi !?
Sub progress3(debut, fin, i)
debut > je suppose =1
fin > je suppose maxi
mais > i c'est quoi !?

EDIT: je crois avoir saisi !
progress3 1, ValMax, i < compteur en cours
 

BEKA One

XLDnaute Nouveau
re

mais qu'est-ce qui ne fonctionne pas ?
car moi je sais que ça fonctionne, je fais mes essais avant de joindre.

c'est avec la barre de progression ou la macro pour suppr fichiers ?
et c'est quoi qui fonctionne pas exactement !

pas facile de vous aider si vous n'y mettez du vôtre !
maintenant si ça ne fonctionne pas et que ça vous convient, pour moi c'est ok !
Salut Ronland,
Merci pour votre retour. Au fait La macro pour supprimer les images du repertoire
est indépendante de la barre de progression. C'est une macro à part pour une autre
instruction.

J'ai copié votre code que j'ai attribué à un bouton, mais au clic, rien ne s'exécute; pas
même de message d'erreur.

Je ne comprend pas du tout!
 

patricktoulon

XLDnaute Barbatruc
re

oui mais moi je travaille avec ValEnCours et ValMaxi
AffProgressStatusBar(ValEnCours As Variant, ValMaxi As Variant)

toi c'est quoi !?
Sub progress3(debut, fin, i)
debut > c'est toujours=1 !?
fin > je suppose maxi !?
mais > i c'est quoi !?

???????????????
dans sub de test
i= ValEnCours ' en cours de boucle !!!!!!!!
fin=valmaxi 'maxi fin de boucle
debut= val mini de boucle (pas forcé que ce soit 1)

dans progress3
a= le prorata de i par rapport a début / la fin/la longueur de la bar
longbar=25 caractères


exemple
debut =254
fin=2400
i (iteration de boucle)= 254

1er tour
ca fait
(254-254)/(2400/25)=0 donc le round c'est 0 et ainsi de suite

pour le 2d tour
ca fait
(255-254)/(2400/25)=0,0104166666666667 donc toujours 0% du premier caractère



en gros 1 caractere d'affiché c'est fin/longbar soit ici 96
donc quand tu arrive a 96 tu a un chr(8) ecrit dans la bar 192 c'est 2 et ainsi de suite

et pour que ca soit bien compris car c'est vrai que je m'exprime un peu mal des fois
96 me tour de boucle on est donc a 254+96 soit 350
i est donc egal a 350
donc (350-254)/(2400/25)= je te le donne dans le mille ((1))!!!

tu ne peux fonctionner avec un même index que si ta bar fait x caractères et que ta boucle commence a 1 et fini a (nombre de caractères de ta barre )

c'est pour cela que j'ai soulevé le problème
avec ma solution tu peux démarrer de ou tu veux a ou tu veux avec la même barre
 
Dernière édition:

Roland_M

XLDnaute Barbatruc
re

@BEKA
c'est normal ! j'ai mis pour essai MsgBox mais après essai pour voir les fichiers si c'est ok
il faut mettre en rem Msgbox et enlever celle devant Kill

ceci était pour essai !
While Fich$ > ""
MsgBox Chemin$ & "\" & Fich$ 'essai test avec aff, si ok delete avec ci-dessous
'Kill Chemin$ & "\" & Fich$
Fich$ = Dir
Wend

après que tu auras vérifié ok alors comme ceci:

While Fich$ > ""
Kill Chemin$ & "\" & Fich$
Fich$ = Dir
Wend

ou plus simple sur une ligne
While Fich$ > "" : Kill Chemin$ & "\" & Fich$ : Fich$ = Dir : Wend
 

Discussions similaires

Réponses
5
Affichages
559

Statistiques des forums

Discussions
311 725
Messages
2 081 941
Membres
101 846
dernier inscrit
Silhabib