Intégrer barre de progression existante

m@tix

XLDnaute Occasionnel
Bonsoir,

En parcourant la toile, je suis tombé sur un fichier comportant une barre de progression qui me plaît assez (progression). Je souhaiterais l'intégrer à mon classeur (Classeur1), afin que celle-ci s'affiche le temps de l'exécution de ma procédure (qui prend un certain en raison de l'ouverture d'un autre classeur assez lourd). Je m'y suis essayé, mais pas moyen d'y parvenir.. :( Peut-être pourrez-vous m'aider ?

Merci d'avance. :)
 

Pièces jointes

  • Classeur1.xlsm
    15.4 KB · Affichages: 88
  • progression.xls
    74 KB · Affichages: 97
  • Classeur1.xlsm
    15.4 KB · Affichages: 93
  • progression.xls
    74 KB · Affichages: 99
  • Classeur1.xlsm
    15.4 KB · Affichages: 92
  • progression.xls
    74 KB · Affichages: 100

PMO2

XLDnaute Accro
Re : Intégrer barre de progression existante

Bonjour,

Vous n'avez pas eu de réponse car je crois que c'est impossible, Excel ne peut traiter 2 procédures simultanément.

On peut contourner le problème en utilisant un HTA (HTML Application) mais c'est assez compliqué.
L'idée est de lancer votre traitement de manière indirecte, en passant par une procédure qui construira le HTA et lancera le vrai traitement en différé.

Il y a donc 2 modules de code dans l'exemple joint :
1) mod_HTA (n'y faire aucun changement)
2) mod_Traitement (ce module devra être remplacé par le vôtre tout en conservant la Sub LanceTraitementAvecProgressionbarre et en adaptant les parties de code qui suivent les ###)

Le résultat est moins joli que celui de votre fichier mais cela a le mérite de faire.
 

m@tix

XLDnaute Occasionnel
Re : Intégrer barre de progression existante

Bonjour PMO2 :)

Merci beaucoup pour votre aide ! C'est exactement ce que je recherchais, et peu importe si le "graphisme" de la barre n'est pas le même ! :D Je ne connaissais pas du tout cette méthode.

Cependant, je souhaiterais modifier deux paramètres à votre module HTA, et j'ignore comment procéder :

  • Centrer la fenêtre de progression à l'affichage
  • Supprimer ou rendre inactive la croix de la fenêtre afin que l'utilisateur ne puisse pas cliquer dessus

Avez-vous une idée pour cela ?

Merci d'avance.
 

PMO2

XLDnaute Accro
Re : Intégrer barre de progression existante

Bonjour,

Cependant, je souhaiterais modifier deux paramètres à votre module HTA, et j'ignore comment procéder :
Centrer la fenêtre de progression à l'affichage
Supprimer ou rendre inactive la croix de la fenêtre afin que l'utilisateur ne puisse pas cliquer dessus

Les modifications ont été apportées (voir le fichier joint). J'ai également forcé le HTA à rester au premier plan (voir l'utilisation de SetWindowPos dans mod_HTA).

Cependant il reste un autre problème (entre autres) : si l'utilisateur fait Alt (maintenu) F4 cela arrête le fonctionnement du HTA.
Il conviendra donc d'empêcher l'appui de ces touches mais je n'ai pas eu le temps de m'en occuper.
La piste à laquelle je pense est l'utilisation de l'API SetWindowsHookEx. A voir donc.
 

m@tix

XLDnaute Occasionnel
Re : Intégrer barre de progression existante

De nouveau, un grand merci PMO2 !

Concernant la combinaison de touches Alt+F4, je ne pense pas que ce soit trop grave, il y a quand même relativement peu de chances que l'utilisateur connaissance la technique je pense..

J'ai un peu regardé le code du module HTA, et je ne vois pas bien à quel moment vous "supprimez" de la fenêtre la partie supérieure avec la croix... Où est-ce ?

Dernier point (je pense) : tout fonctionne parfaitement, sauf si le PC sur lequel est exécuté le fichier n'a pas de lecteur nommé C:. Etant donné que mon fichier pourra être lu depuis des sources diverses, est-il possible de pallier ce petit défaut ?
 

PMO2

XLDnaute Accro
Re : Intégrer barre de progression existante

Bonjour,

Une nouvelle version en pièce jointe (y voir le code modifié).

1) Concernant la combinaison de touches Alt+F4
Utilisation de l'API RegisterHotKey

2) à quel moment vous "supprimez" de la fenêtre la partie supérieure avec la croix
A$ = A$ & " CAPTION = " & Chr(34) & "no" & Chr(34) & vbCrLf 'masque la barre de titre et, par conséquent, la croix de fermeture

3) tout fonctionne parfaitement, sauf si le PC sur lequel est exécuté le fichier n'a pas de lecteur nommé C:
J'ai changé la valeur de la constante suivante
Const MON_HTA As String = "___tempo_MONFICHHTA_pmo.hta" 'sans indication de répertoire parent, s'inscrit par défaut dans "Mes Documents"
 

m@tix

XLDnaute Occasionnel
Re : Intégrer barre de progression existante

Merci de nouveau ! :D Ca me semble très bien à première vue.
Une dernière question cependant : si le module HTA est lancé et non stoppé via CloseHTA, il continue de tourner sous Windows, même si Excel est fermé. Quelle est la procédure à terminer via Ctrl-Alt-Suppr pour le stopper ?

Merci encore.

Edit : trouvé ! mshta.exe
 
Dernière édition:

PMO2

XLDnaute Accro
Re : Intégrer barre de progression existante

Une dernière question cependant : si le module HTA est lancé et non stoppé via CloseHTA, il continue de tourner sous Windows, même si Excel est fermé. Quelle est la procédure à terminer via Ctrl-Alt-Suppr pour le stopper ?
Voir l'image jointe (mshta.exe)

Cependant, si Excel est fermé et que le HTA continue de tourner alors , en principe, l'effet des touches Alt F4 est rétabli et redevient efficient.
 
Dernière édition:

m@tix

XLDnaute Occasionnel
Re : Intégrer barre de progression existante

A première vue la Alt-F4 ne fonctionne pas même une fois Excel fermé. Ca me lance la fenêtre "Arrêt de Windows".. Normal ?
Mais rien de grave, la solution avec le gestionnaire des tâche convient.

Merci !
 

PMO2

XLDnaute Accro
Re : Intégrer barre de progression existante

A première vue la Alt-F4 ne fonctionne pas même une fois Excel fermé. Ca me lance la fenêtre "Arrêt de Windows"..

Il faut, au préalable, cliquer sur la fenêtre HTA pour qu'elle obtienne le focus puis faire Alt F4.
Vous avez dû cliquer malencontreusement sur le Bureau et c'est sur lui que le Alt F4 agit (même chose si vous cliquez sur une autre application).
 

YANN-56

XLDnaute Barbatruc
Re : Intégrer barre de progression existante

Bonsoir à tous,

Voici une petite bidouille que je me suis amusé à faire voici un morceau de temps.

Les valeurs sont adaptables à l'évolution du chargement d'une ListView, par exemple.

Ici le remplissage de la Feuille n'est qu'un moyen pour visualiser la progression.
( ActiveSheet.UsedRange.Rows.Count)

Amicalement,

Yann
 

Pièces jointes

  • PROGRESS.xls
    37 KB · Affichages: 78
  • PROGRESS.xls
    37 KB · Affichages: 80
  • PROGRESS.xls
    37 KB · Affichages: 85

m@tix

XLDnaute Occasionnel
Re : Intégrer barre de progression existante

Merci pour la précision PMO2, tu as bien raison ! ;)

Et merci à toi aussi pour ta contribution YANN-56, j'ai regardé un peu ce que tu as fait, c'est original. Mais pour mon fichier, ce que m'a proposé PMO2 semble plus convenir. Mais je le garde sous la main, ça pourrait me servir pour autre chose !

Bonne soirée à vous. :)
 

PMO2

XLDnaute Accro
Re : Intégrer barre de progression existante

Envoyé par m@tix
Bonjour PMO2

Je me permets de te contacter suite au topic sur la barre de progression que tu m'avais proposée en HTA (ici).

La fenêtre est en permanence au premier plan, ce qui me convenait parfaitement en premier lieu. Cependant, la macro qui tourne derrière fait parfois apparaître une message box à l'utilisateur, qui ne peut du coup pas la voir en raison de la prédominance de la fenêtre HTA... Comment peut-on modifier cela ? J'ai essayé de supprimer les lignes suivantes, mais cela ne semble pas affecter le résultat final :

Code :
Do Until hWnd& <> 0
hWnd& = FindWindow(vbNullString, TITRE_FENETRE_HTA)
Loop
SetWindowPos hWnd&, HWND_TOPMOST, x&, y&, 0, 0, SWP_NOSIZE

Merci d'avance.

Voir l'exemple dans la pièce jointe.
 

m@tix

XLDnaute Occasionnel
Re : Intégrer barre de progression existante

Merci PMO2 !

Par contre, je viens de tester le fichier, ça ne me donne rien (la msgbox de test ne s'affiche jamais..).
De mon côté, j'avais commencé à chercher une solution, et, au lieu de modifier le module HTA, j'ai rajouté au lancement de la message box ceci :

Code:
MsgBox "blabla", vbMsgBoxSetForeground

Qu'en penses-tu ?
 

Discussions similaires

D
Réponses
3
Affichages
896
delirum
D

Statistiques des forums

Discussions
312 687
Messages
2 090 955
Membres
104 705
dernier inscrit
Mike72