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
Holla, Mr Toulon et Roland je ne vous suis plus.

Patrick, voici le fichier que vous m'avez proposé. J'y ai inséré ma macro, mais l'exécution est d'une lenteur incompréhensible. En plus pendant l'exécution, le curseur n’arrête pas de tourner en boucle.

Est-il possible d’accélérer le processus? J'ai vu que vous avez posté d'autres macros, mais comme je ne m'y connais pas aussi bien en VBA, je n'arrive pas à vous suivre.

Pouvez-vous me dire ce qu'il arrive à mon code? Merci bien pour votre sollicitude!
 

Pièces jointes

  • Barre de progression simplifiéeV3 .xlsm
    54.2 KB · Affichages: 23

BEKA One

XLDnaute Nouveau
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

Okay Roland!

Comme vous le dites, je m'attendais au lancement de la macro test avoir en retour
un message comportant la valeur de la variable "Chemin$..." Mais rien.!

Je vais encore revoir une fois de plus, peut être que c'est moi qui me plante en fin
de compte!

A très bientôt!
 

patricktoulon

XLDnaute Barbatruc
re
peut etre que finalement tu comprendra mieux comme ca
VB:
Sub testzz()
    Dim debut&, fin&, i&, c&
    debut = 254   'debut de la boucle
    fin = 20000    'limite de la boucle
    For i = debut To fin    'boucle de 386 a 20000
        c = c + 1
        progress3 debut, fin,c
        DoEvents    'autorise d'autres action pendant la boucle mais ralenti la boucle(testez bloqué et débloqué)
    Next
End Sub

Sub progress3(debut, fin, c)
    Dim a&, StringBar$, longBar&
    longBar = 75    'longueur de la bar de progression en terme de caractere
    a = c / (fin / longBar)    'calcul index(situation bar) par rapport à C iteré apartir de 1 dans la boucle
    StringBar = String(a, Chr$(8)) & String(longBar - (a), Chr$(6))    'creation du string
    Application.StatusBar = "  << |||" & StringBar & "||| >>  " & Int((a + 0.1) * 100 / longBar) & " % EFFECTUE"""    ' le (((0.1))) c'est pour eviter le division par zero
    DoEvents
End Sub
 

patricktoulon

XLDnaute Barbatruc
re
heu ...fichier du post#16
ceci n'a aucun sens selon moi
en gros si on fait abstraction de la progressbar tu eface 3 plage dans 3 feuilles différentes 100 milles fois
tu t'ennuie c'est ca ??? ;) :p
VB:
Sub test()
    Dim i As Long, fin As Long
    debut = 1: fin = 100000
    Application.ScreenUpdating = False
    For i = debut To fin
        ' ton code qui fait ce que tu veux
        'blablabla
        '....
        Feuil1.Range("A1:K150").ClearContents
        Feuil2.Range("A1:N575").ClearContents
        Feuil3.Range("A1:Q99").ClearContents
        '
        progression i, fin, styleColor.blue_seven

    Next
End Sub

on se croise Roland :p :p :p :p :p :p
 

BEKA One

XLDnaute Nouveau
re

@BEKA
mais quel est le but de ta macro ?
je vois une boucle répéter 100000 fois ceci !?!?
Feuil1.Range("A1:K150").ClearContents
Feuil2.Range("A1:N575").ClearContents
Feuil3.Range("A1:Q99").ClearContents

comme dirait un certain Dieudo: quel est le projet !?

Ma macro a pour but de vider les plages des cellules des 3 feuilles
comme. Je précise que les données dans le projet que j'ai soumis
sont à titre d'exemple.

Dans le vrai projet, les lignes peuvent dépasser le millier par feuille
d'où l’intérêt d'avoir un état d'avancé de la macro par la barre de
progression.

Voilà en bref ce que je veux faire.
 

patricktoulon

XLDnaute Barbatruc
re
dans le fichier du post 16 met lui ca la place et adapte tes 3 plages car la effectivement c'est relativement rapide le progress ne sert a rien
VB:
Sub test()
    Dim i As Long, fin As Long,plage$
    debut = 1: fin = 3
    Application.ScreenUpdating = False
    plage = Array(, "A1:K150", "A1:N575", "A1:Q99")
    For i = 1 To fin
        ' ton code qui fait ce que tu veux
        'blablabla
        '....
        Sheets("Feuil" & i).Range(plage(i)).ClearContents
         '
        progression i, fin, styleColor.blue_seven

    Next
End Sub
 

BEKA One

XLDnaute Nouveau
re
heu ...fichier du post#16
ceci n'a aucun sens selon moi
en gros si on fait abstraction de la progressbar tu eface 3 plage dans 3 feuilles différentes 100 milles fois
tu t'ennuie c'est ca ??? ;) :p
VB:
Sub test()
    Dim i As Long, fin As Long
    debut = 1: fin = 100000
    Application.ScreenUpdating = False
    For i = debut To fin
        ' ton code qui fait ce que tu veux
        'blablabla
        '....
        Feuil1.Range("A1:K150").ClearContents
        Feuil2.Range("A1:N575").ClearContents
        Feuil3.Range("A1:Q99").ClearContents
        '
        progression i, fin, styleColor.blue_seven

    Next
End Sub

on se croise Roland :p :p :p :p :p :p

Euh non Mr Patrick!

Le fichier que je vous ai soumis est juste un exemple. Mon vrai projet comporte
quatorze (14) feuilles de calculs avec environ un bon millier de lignes de données
par feuille. Pour les vider, vous comprenez que ça prend un peu de temps d'où mon
intention d'y intégrer une barre de progression.

La macro que j'utilise pour vider les 14 feuilles est celle que j'ai fourni dans mon fichier
pour les 3 le vidage des cellules des premières feuilles. J'évite de soumettre le vrai projet
car contenant des données hyper confidentielles.

Je veux juste qu'on m'aide à trouver un code pour la suppression des données de plages
de cellules de plusieurs feuilles qui marche avec une barre de progression. Etant un gros
débutant en excel VBA, j'ai un peu de mal à me retrouver avec des macro très élaborés.
Veuillez m'en excuser.

Merci en tout cas pour vos apports!
 

patricktoulon

XLDnaute Barbatruc
re
je te l'ai donné en post 24
a toi d'adapter l'aray des plage avec le nombre de feuilles

cela dit je viens de tester en effaçant les feuilles complètes sur tes 3 feuilles et je le répète le progress ne sert a rien
tout juste cliqué sur ton bouton ben c'est déjà fini o_O et 14 ca doit pas changer grand chose

a mon avis si ca dure des plombes chez toi c'est soit
le PC est a la ramasse
soit il y a des formules avec des données d'autres feuilles dans les feuilles et le calculate tire dans le rouge avec des ref a gogo quand une feuille est effacée donc données plus dispo :confused:

conclusion
met tout visu et action auto a false
le screen
le displayalerts
le calculate
et après seulement efface
je parirais a 10 contre 1 que le progress ne te sera plus utile :)
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re

tu es sérieux Roland ? o_O :oops:
VB:
Sub test()
InitStatusBar
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
    Dim I As Long, Fin As Long
    Debut = 1: Fin = 100000
    For I = Debut To Fin
        Feuil1.Range("A1:K150").ClearContents
        Feuil2.Range("A1:N575").ClearContents
        Feuil3.Range("A1:Q99").ClearContents
        'avec une grande quantité afficher la barre tous les !? ici 100 pour 100 0000
        If I Mod 100 = 0 Then AffProgressStatusBar I, Fin
    Next
InitStatusBar
Application.Calculation = xlCalculationAutomatic
End Sub

What else ;):p
ca va faire plaisir a coluche ca tiens
des cellule plus blanc que blanc :p
 

Roland_M

XLDnaute Barbatruc
re

oui je suis sérieux !
j'ai voulu lui mettre ce qu'il souhaitait, c'est à dire le déroulement de X fois l'effaçage de ces plages !?
peu importe pour moi ce qu'il en fera !

ma version n'a rien à voir là dedans, j'aurai pu mettre la tienne c'était pareil !
 

Discussions similaires

Réponses
5
Affichages
559