Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

paramétrer une progressbar

  • Initiateur de la discussion Initiateur de la discussion cabsen
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

cabsen

XLDnaute Junior
Bonjour le forum,

Mon problème du jour est le suivant :

Je souhaite paramétrer une barre de progression en fonction de l'avancement du traitement d'un nombre de cellules connu.

L'exemple que j'ai trouvé et que je joins provient du site microsoft et fonctionne bien (phénomène rare sous Excel X pour macintosh 😉). Il génère des nombres aléatoires dans un nombre de cellules fini et ajuste l'affichage de la barre de progression.

Dans mon cas, un fichier Excel réalise la synchronisation de 19198 cellules entre deux fichiers de structures identiques. Cette opération prend 2 minutes 21 secondes sur ma station de travail mais peut très bien varier en fonction de la mémoire disponible sur d'autres postes.

Je cherche comment remplacer le compteur du fichier d'exemple (qui compte des boucles) par un autre qui compterait les cellules sélectionnées depuis le début du processus de synchronisation.

Mon fichier travaille ainsi :
• mise à jour de 10 cellules sur une page d'accueil
• mise à jour de 369 cellules sur 52 feuilles semaines (52 boucles For i … Next i)

Je suppose que j'ai besoin d'une variable "n" qui passerait par les états suivants : 10, 379, 748… 19198 au fur et à mesure du travail et d'une formule de la forme 100 * n / 19198 pour mettre à jour ma barre de progression ?

Si quelqu'un voit une solution, je lui serais fort redevable 🙂

D'avance merci de m'avoir lu !
 

Pièces jointes

Re : paramétrer une progressbar

bonjour cabsen

Voila ce qui est a adapter a ta macro

Code:
 PctDone = Counter / (RowMax * ColMax)
        ' Appel à la sous-routine qui met à jour l'affichage de la barre de progression.
 UpdateProgressBar PctDone

mais sans connaitre la dite macro c'est travailler avec au choix

le marc de café (je ne bois plus de café)
la telepathie au debit ( comme beaucoup de hauts debits en panne actuelllement)
la boule de cristal ( en revision)
les tarots de Marseille ( muets sur ce coup)
 
Re : paramétrer une progressbar

Oui effectivement, les deux macros qui réalisent la synchronisation sont les suivantes :

Code:
Sub TransfertAccueil()

    With Application
        .Calculation = xlManual
        .MaxChange = 0.001
    End With

    Windows("source.xls").Activate
Sheets("Accueil").Select
    Range("A1,B27,C27,C102,C128,E27,F22,O35,O37,W35,W37").Select
    Call gw_copier(Selection)
    
    Windows("version_new.xls").Activate
Sheets("Accueil").Select
    Range("A1").Select
    Call gw_coller(ActiveCell, 1)

    With Application
        .Calculation = xlAutomatic
        .MaxChange = 0.001
    End With

End Sub

Code:
Sub TransfertSem()

    With Application
        .Calculation = xlManual
        .MaxChange = 0.001
    End With

For i = 1 To 52
If i < 10 Then i = "0" & i
    Windows("source.xls").Activate
Sheets("Sem" & i).Select
    Range("A1,C8:F12,C18:F22,J18,J26,K8:O26,K32:O39,R11:R13,R16:R17,R30:R36,R43:R47,S8:W17,S23:W47").Select
    Call gw_copier(Selection)
    
    Windows("version_new.xls").Activate
Sheets("Sem" & i).Select
    Range("A1").Select
    Call gw_coller(ActiveCell, 1)

Next i

    With Application
        .Calculation = xlAutomatic
        .MaxChange = 0.001
    End With

End Sub

La première macro copie 10 cellules.
La deuxième macro copie 369 cellules mais 52 fois.
Je cherche à compter les cellules sélectionnées dans le fichier "source.xls" au fur et à mesure de l'avancement du traitement pour alimenter ma barre de progression.

Mais, d'ores et déjà merci de se pencher sur mon soucis 🙂
 
Re : paramétrer une progressbar

Bonjour cabsen, l'ami PierreJean, et le forum,

Ce type de barre est très bien pour des boucles très linéaires, nous en avons d'ailleurs de multiples exemples sur le forum, mais dés qu'il y a du séquentiel, de l'appel à d'autres routines, ou, ici, à d'autres classeurs, cela risque de relever du domaine du rêve.

J'avais déjà testé de telles possibilités avec d'autres versions, et je viens de le refaire avec cette version que je ne connaissais pas.... un bide pour l'instant.

Peut-être les limites aux artifices que l'on souhaiterait créer, sans passer par des macros de plus en plus longues, plus gourmandes en temps, et n'attribuable qu'a une seule situation.

Bonne fin de dimanche.

Jean-Pierre
 
Re : paramétrer une progressbar

Re

Pour ce que je comprends de ces 2 macros
1) la premiere copie 11 cellules en une seule operation sur 1 fichier plus une dans un autre fichier
la progressbarr ne parait pas vraiment interessante dans ce cas

2) Pour la seconde

Tester:

Code:
Sub TransfertSem()

    With Application
        .Calculation = xlManual
        .MaxChange = 0.001
    End With

UserForm1.Show

For i = 1 To 52
If i < 10 Then i = "0" & i
    Windows("source.xls").Activate
Sheets("Sem" & i).Select
    Range("A1,C8:F12,C18:F22,J18,J26,K8:O26,K32:O39,R11:R13,R16:R17,R30:R36,R43:R47,S8:W17,S23:W47").Select
    Call gw_copier(Selection)
    
    Windows("version_new.xls").Activate
Sheets("Sem" & i).Select
    Range("A1").Select
    Call gw_coller(ActiveCell, 1)

PctDone = i/52
UpdateProgressBar PctDone

Next i

    With Application
        .Calculation = xlAutomatic
        .MaxChange = 0.001
    End With

End Sub

en ayant eu soin de recopier l'userform avec en Activate

Code:
UserForm1.LabelProgress.Width = 0

et bien entendu la macro UpdateProgressBar

Aec un petit clin d'oeil a Wilfried (sauf erreur de ma part il y a ici une routine de son cru)

De plus j'ais l'impression qu'a moins d'avoir un pc (ou Mac) de mon age il n'y aura pas grand chose a voir !!!
 
Re : paramétrer une progressbar

Merci pierrejean, jeanpierre et tous ceux qui m'ont permis d'avancer dans ce fichier.

Et bien cette macro met 2 minutes 21 secondes à tourner sur un MacBook Pro 2.16 GHz Intel Core 2 Duo avec 2 Go 667 MHz DDR2 SDRAM et elle prendra encore du volume.

Comme son travail consiste à copier les cellules d'un fichier pour les coller dans un autre, je souhaite indexer la progression de la barre sur le nombre de cellules déjà copiées par la macro pour coller davantage à la réalité. Compter les boucles ferait démarrer la progression en retard et terminer en avance.
 
Re : paramétrer une progressbar

Re cabsen et le fil,

Le problème est bien là.... Relis mes deux ou trois premières lignes... (16h34)

Je n'ai jamais trouvé de solution à ton cas, ou similaire.

Pour le moment, pas de soluce.....
 
Re : paramétrer une progressbar

Re

Toutes mes excuses mais j'ais enormement de peine a imaginer que cette macro puisse prendre autant de temps !!!!

Est-il possible d'avoir le fichier (sans données confidentielles) pour que j'essaie de comprendre ????

Quant a cette phrase :
Compter les boucles ferait démarrer la progression en retard et terminer en avance.
j'avoue que je ne la saisis pas non plus !!!
 
Re : paramétrer une progressbar

En fait le trio "fichier source / fichier pilote de synchronisation / fichier d'arrivée" représente 13,3 Mo (problème de formatage excédentaire de cellules je suppose, mais je n'en suis pas encore rendu à l'optimisation 🙂)

Lors de la synchronisation, les fichiers source et d'arrivée sont des "objets" manipulés par le fichier pilote qui réalise des copies-collages de l'un vers l'autre.

Compter les boucles ferait démarrer la progression en retard et terminer en avance.
Si la progression est indexée sur le nombre de boucles i, elle ne tiendra pas compte de tout le travail qui aura commencé avant d'atteindre les boucles, ni de tout le travail qui restera à faire après avoir terminé les boucles.

C'est pour ça que je cherche comment compter le nombre de cellules sélectionnées dans le fichier source puisque c'est la seule chose qui soit quantifiable.

Pour le moment le fichier pilote sélectionne 1 fois ceci
Code:
 Range("A1,B27,C27,C102,C128,E27,F22,O35,O37,W35,W37").Select
soit 11 cellules

et 52 fois ceci
Code:
 Range("A1,C8:F12,C18:F22,J18,J26,K8:O26,K32:O39,R11:R13,R16:R17,R30:R36,R43:R47,S8:W17,S23:W47").Select
soit 52 fois 370 cellules donc 19240 cellules.

Si une variable peut suivre cette progression de la sélection des cellules, je pense pouvoir l'adapter à ma barre de progression (ou alors je bloquerai comme me le prédit jeanpierre et alors j'aviserai 😀)
 
Re : paramétrer une progressbar

Re,

Une idée, comme cela, mais je n'ai plus le temps pour ce soir...

En début de macro un msgbox qui dirait "Veuillez patienter... Calcul en cours", et que tu fermerais à la fin de ta macro.

Peux pas faire mieux.
 
Re : paramétrer une progressbar

Re aussi,

Alors pour la boîte de message, je sais faire (grâce à ce que j'ai appris dans le forum et quelques livres), mais mes collègues sont des utilisateurs lambda et, en tant que tel, impatients : il faut qu'ils voient les choses avancer 🙁

Je me disais que si la macro devait sélectionner 19251 cellules et que je pouvais savoir à un instant T qu'elle en avait déjà sélectionnée 7945, la barre de progression pourrait alors afficher "41 %". Enfin, dans ma tête, ça paraissait accessible…
 
Re : paramétrer une progressbar

Re

la seule possibilité que j'entrevois dans le sens de ta demande serait d'utiliser la macro Workbook_Sheets_change des fichiers recevant les copies

avec un

Public n as integer

et

n=n+1

dans les sheets_change assorti de conditions d'adresses de cellules

on aurait alors

PctDone = n/19251
UpdateProgressBar PctDone

a placer judicieusement

mais sans fichier(s) ce n'est plus dans mes competences
 
Re : paramétrer une progressbar

Je joins le fichier pilote en archive au cas où il permettrait d'éclaircir la situation. C'est lui qui accueillera l'UserForm et la macro pour la barre de progression.

J'avais effectivement déclaré une variable en tête de module pour qu'elle vive durant tout le processus et aussi adapté le PctDone comme tu le proposes. C'est la partie Workbook_Sheets_change qui va me bloquer…
 

Pièces jointes

Dernière édition:
Re : paramétrer une progressbar

bonjour cabsen

Une fois n'est pas coutume
Je ne reponds pas ici a la question posée : progressbar
mais a une autre : Peut-on accelerer la copie d'un fichier a d'autres

Macros :

Code:
Sub test() 'pour le transfert dans 52 pages
Application.ScreenUpdating = False
With Application
        .Calculation = xlManual
        .MaxChange = 0.001
    End With
  acopier = Array("A1", "C8:F12", "C18:F22", "J18,J26", "K8:O26", "K32:O39", "R11:R13", "R16:R17", "R30:R36", "R43:R47", "S8:W17", "S23:W47")
  vers = Array("A1", "C8", "C18", "J18", "K8", "K32", "R11", "R16", "R30", "R43", "S8", "S23")
  For i = 1 To 52
   If i < 10 Then i = "0" & i
   For n = 0 To UBound(acopier) - 1
      Workbooks("Source.xls").Sheets("Sem " & i).Range(acopier(n)).Copy Destination:=Workbooks("version_new.xls").Sheets("sem" & i).Range(vers(n))
   Next n
  Next i
  Application.ScreenUpdating = True
With Application
        .Calculation = xlAutomatic
        .MaxChange = 0.001
End With
End Sub
Sub test1() 'pour le transfert dans 1 page
Application.ScreenUpdating = False
With Application
        .Calculation = xlManual
        .MaxChange = 0.001
    End With
   acopier = Array("A1", "B27", "C27", "C102", "C128", "E27", "F22", "O35", "O37", "W35", "W37")
   For n = 0 To UBound(acopier) - 1
     Workbooks("Source.xls").Sheets("Accueil").Range(acopier(n)).Copy Destination:=Workbooks("version_new.xls").Sheets("Accueil").Range(acopier(n))
   Next n
 With Application
        .Calculation = xlAutomatic
        .MaxChange = 0.001
End With
Application.ScreenUpdating = True
End Sub

Attention a bien respecter les appelations des feuilles et des fichiers

La plus longue met chez mois 1,10 seconde a s'executer

nb: pour faire patienter les operateurs on peut prevoir un message apres l'ouverture des fichiers concernés
 
Re : paramétrer une progressbar

Et bien merci pierrejean !

Si la procédure est tellement accélérée, la barre de progression devient effectivement obsolète.

Je teste ce soir ou demain soir.

Un grand merci à tous !🙂
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

B
  • Question Question
Microsoft 365 colorer une plage
Réponses
2
Affichages
970
bd.afaf
B
B
Réponses
4
Affichages
2 K
benoitoleron
B
P
  • Question Question
Réponses
3
Affichages
1 K
S
Réponses
14
Affichages
3 K
saphya
S
V
Réponses
2
Affichages
2 K
vynmarius
V
B
Réponses
8
Affichages
2 K
Benjy51190
B
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…