Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Création d'un chronomètre

6 réponses
Avatar
COQUITO
Bonjour à tous,

Je souhaiterais afficher un chronomètre pendant qu'une macro Excel vba qui
prend un certain temps s'exécute, ceci dans le but de faire patienter
l'utilisateur.

J'ai utilisé un code trouvé sur un forum pour créer une "horloge" digitale à
l'aide d'une shape.
Ce chrono fonctionne très bien mais ne permet pas qu'une procédure vba
s'exécute en arrière plan.

J'ai trouvé un exemple utilisant un userform (ce que conseillait fortement
le membre du forum qui apportait sa réponse) et faisant appel à une fonction
"API" de windows et c'est là que je ne suis plus, car je connais mal ce
domaine.

Suffit-il d'écrire : Public Declare Function GetTickCount& Lib "kernel32" ()
ou faut-il au préalable activer une fonction windows ou excel ?

D'autre part, pour ce chronomètre, je souhaiterais qu'il se mette en marche
lorsque la procédure vba qui doit s'exécuter en arrière plan démarre et
qu'il s'arrête de lui-même quand le programme vba est arrivé à son terme,
donc, pas de bouton de marche/arrêt.

Je vous remercie par avance si vous pouvez m'aider à réaliser ce programme.

6 réponses

Avatar
michdenis
Bonjour,

Essaie ceci : http://cjoint.com/?fimauaYaFC

Tu ouvres le formulaire en mode création, et tu indiques le nom de la macro à exécuter.

Je n'ai pas testé ceci sur une longue macro... je n'en ai pas à ma disposition !
;-)



"COQUITO" a écrit dans le message de groupe de discussion :

Bonjour à tous,

Je souhaiterais afficher un chronomètre pendant qu'une macro Excel vba qui
prend un certain temps s'exécute, ceci dans le but de faire patienter
l'utilisateur.

J'ai utilisé un code trouvé sur un forum pour créer une "horloge" digitale à
l'aide d'une shape.
Ce chrono fonctionne très bien mais ne permet pas qu'une procédure vba
s'exécute en arrière plan.

J'ai trouvé un exemple utilisant un userform (ce que conseillait fortement
le membre du forum qui apportait sa réponse) et faisant appel à une fonction
"API" de windows et c'est là que je ne suis plus, car je connais mal ce
domaine.

Suffit-il d'écrire : Public Declare Function GetTickCount& Lib "kernel32" ()
ou faut-il au préalable activer une fonction windows ou excel ?

D'autre part, pour ce chronomètre, je souhaiterais qu'il se mette en marche
lorsque la procédure vba qui doit s'exécuter en arrière plan démarre et
qu'il s'arrête de lui-même quand le programme vba est arrivé à son terme,
donc, pas de bouton de marche/arrêt.

Je vous remercie par avance si vous pouvez m'aider à réaliser ce programme.
Avatar
michdenis
J'ai omis de mentionner que l'idée originale contenue
dans ce fichier fut soumise sur ce groupe de discussion
par Frédéric Sigonneau que je salue au passage.



"michdenis" a écrit dans le message de groupe de discussion :

Bonjour,

Essaie ceci : http://cjoint.com/?fimauaYaFC

Tu ouvres le formulaire en mode création, et tu indiques le nom de la macro à exécuter.

Je n'ai pas testé ceci sur une longue macro... je n'en ai pas à ma disposition !
;-)



"COQUITO" a écrit dans le message de groupe de discussion :

Bonjour à tous,

Je souhaiterais afficher un chronomètre pendant qu'une macro Excel vba qui
prend un certain temps s'exécute, ceci dans le but de faire patienter
l'utilisateur.

J'ai utilisé un code trouvé sur un forum pour créer une "horloge" digitale à
l'aide d'une shape.
Ce chrono fonctionne très bien mais ne permet pas qu'une procédure vba
s'exécute en arrière plan.

J'ai trouvé un exemple utilisant un userform (ce que conseillait fortement
le membre du forum qui apportait sa réponse) et faisant appel à une fonction
"API" de windows et c'est là que je ne suis plus, car je connais mal ce
domaine.

Suffit-il d'écrire : Public Declare Function GetTickCount& Lib "kernel32" ()
ou faut-il au préalable activer une fonction windows ou excel ?

D'autre part, pour ce chronomètre, je souhaiterais qu'il se mette en marche
lorsque la procédure vba qui doit s'exécuter en arrière plan démarre et
qu'il s'arrête de lui-même quand le programme vba est arrivé à son terme,
donc, pas de bouton de marche/arrêt.

Je vous remercie par avance si vous pouvez m'aider à réaliser ce programme.
Avatar
COQUITO
Merci, une fois de plus, Michdenis pour cette réponse ultra rapide !
C'est tout à fait ce style de chrono que j'attendais.

Je vais essayer d'adapter ton programme de façon à ce que l'utilisateur
n'ait pas à démarrer lui-même le chrono, car je souhaiterais vraiment que
celui-ci s'enclenche simultanément avec la macro qui tournera en arrière
plan.

Comme cette macro est actuellement lancée via un menu personnalisé, je pense
intercaler une petite procédure qui affichera le UserForm.
Et c'est donc maintenant via la procédure évènementielle UserForm_Activate,
que j'appellerai ma macro.

J'espère que cela va fonctionner et ne pas créer d'incompatibilités
quelconques avec les autres procédures de ton programme.
(Quand j'appelle l'aide en ligne sur "AddressOf" par exemple, je vois que
cela me dépasse un peu ; je n'ai jamais utilisé ces fonctions jusqu'à
maintenant et j'ai donc un peu peur d'introduire "le grain de sable" qui
bloquera tout).

Aussi, puis-je te demander de me dire d'ores et déjà si l'adaptation que
j'envisage est possible ou si je déraille complètement.
Pourrais-tu me dire aussi à quoi correspondent "hWnd" et "nIDEvent" dans la
déclaration de la fonction "KillTimer".
J'aimerais également savoir si les variables "H" et "DS" sont sciemment
déclarées comme étant de type Variant puisqu'elles ne sont pas typées dans
la procédure Chrono.

Je me rends compte de mon exigence avec toutes ces questions, mais le
développement Excel Vba m'intéresse beaucoup et je voudrais tellement
améliorer mes connaissances.

Un grand merci !


"michdenis" a écrit dans le message de
news:
Bonjour,

Essaie ceci : http://cjoint.com/?fimauaYaFC

Tu ouvres le formulaire en mode création, et tu indiques le nom de la
macro à exécuter.

Je n'ai pas testé ceci sur une longue macro... je n'en ai pas à ma
disposition !
;-)



"COQUITO" a écrit dans le message de groupe de
discussion :

Bonjour à tous,

Je souhaiterais afficher un chronomètre pendant qu'une macro Excel vba qui
prend un certain temps s'exécute, ceci dans le but de faire patienter
l'utilisateur.

J'ai utilisé un code trouvé sur un forum pour créer une "horloge" digitale
à
l'aide d'une shape.
Ce chrono fonctionne très bien mais ne permet pas qu'une procédure vba
s'exécute en arrière plan.

J'ai trouvé un exemple utilisant un userform (ce que conseillait fortement
le membre du forum qui apportait sa réponse) et faisant appel à une
fonction
"API" de windows et c'est là que je ne suis plus, car je connais mal ce
domaine.

Suffit-il d'écrire : Public Declare Function GetTickCount& Lib "kernel32"
()
ou faut-il au préalable activer une fonction windows ou excel ?

D'autre part, pour ce chronomètre, je souhaiterais qu'il se mette en
marche
lorsque la procédure vba qui doit s'exécuter en arrière plan démarre et
qu'il s'arrête de lui-même quand le programme vba est arrivé à son terme,
donc, pas de bouton de marche/arrêt.

Je vous remercie par avance si vous pouvez m'aider à réaliser ce
programme.

Avatar
michdenis
De ton bouton ou ta commande dans ton menu,
tu n'as qu'à appeler une petite macro qui a pour
but de lancer le Formulaire

Sub Ouvrir_Formulaire()
Userform1.Show
End Sub

Et dans le formulaire, tu remplaces "MaMacro" par la macro
que tu veux exécuter dans le classeur.

Tout devrait se faire automatiquement !




"COQUITO" a écrit dans le message de groupe de discussion :

Merci, une fois de plus, Michdenis pour cette réponse ultra rapide !
C'est tout à fait ce style de chrono que j'attendais.

Je vais essayer d'adapter ton programme de façon à ce que l'utilisateur
n'ait pas à démarrer lui-même le chrono, car je souhaiterais vraiment que
celui-ci s'enclenche simultanément avec la macro qui tournera en arrière
plan.

Comme cette macro est actuellement lancée via un menu personnalisé, je pense
intercaler une petite procédure qui affichera le UserForm.
Et c'est donc maintenant via la procédure évènementielle UserForm_Activate,
que j'appellerai ma macro.

J'espère que cela va fonctionner et ne pas créer d'incompatibilités
quelconques avec les autres procédures de ton programme.
(Quand j'appelle l'aide en ligne sur "AddressOf" par exemple, je vois que
cela me dépasse un peu ; je n'ai jamais utilisé ces fonctions jusqu'à
maintenant et j'ai donc un peu peur d'introduire "le grain de sable" qui
bloquera tout).

Aussi, puis-je te demander de me dire d'ores et déjà si l'adaptation que
j'envisage est possible ou si je déraille complètement.
Pourrais-tu me dire aussi à quoi correspondent "hWnd" et "nIDEvent" dans la
déclaration de la fonction "KillTimer".
J'aimerais également savoir si les variables "H" et "DS" sont sciemment
déclarées comme étant de type Variant puisqu'elles ne sont pas typées dans
la procédure Chrono.

Je me rends compte de mon exigence avec toutes ces questions, mais le
développement Excel Vba m'intéresse beaucoup et je voudrais tellement
améliorer mes connaissances.

Un grand merci !


"michdenis" a écrit dans le message de
news:
Bonjour,

Essaie ceci : http://cjoint.com/?fimauaYaFC

Tu ouvres le formulaire en mode création, et tu indiques le nom de la
macro à exécuter.

Je n'ai pas testé ceci sur une longue macro... je n'en ai pas à ma
disposition !
;-)



"COQUITO" a écrit dans le message de groupe de
discussion :

Bonjour à tous,

Je souhaiterais afficher un chronomètre pendant qu'une macro Excel vba qui
prend un certain temps s'exécute, ceci dans le but de faire patienter
l'utilisateur.

J'ai utilisé un code trouvé sur un forum pour créer une "horloge" digitale
à
l'aide d'une shape.
Ce chrono fonctionne très bien mais ne permet pas qu'une procédure vba
s'exécute en arrière plan.

J'ai trouvé un exemple utilisant un userform (ce que conseillait fortement
le membre du forum qui apportait sa réponse) et faisant appel à une
fonction
"API" de windows et c'est là que je ne suis plus, car je connais mal ce
domaine.

Suffit-il d'écrire : Public Declare Function GetTickCount& Lib "kernel32"
()
ou faut-il au préalable activer une fonction windows ou excel ?

D'autre part, pour ce chronomètre, je souhaiterais qu'il se mette en
marche
lorsque la procédure vba qui doit s'exécuter en arrière plan démarre et
qu'il s'arrête de lui-même quand le programme vba est arrivé à son terme,
donc, pas de bouton de marche/arrêt.

Je vous remercie par avance si vous pouvez m'aider à réaliser ce
programme.

Avatar
michdenis
Une information supplémentaire,

Si tu désires utiliser le formulaire "Chronomètre" pour plus d'une macro,
voici comment faire :

Dans le module1 du fichier, tu déclares dans le haut de celui-ci
une variable "Public" As String
Public Execute_Macro As String

Tu modifies la procédure du module1 comme ceci :
La seule chose à faire est de modifier le nom de la macro
en prenant soin de spécifier le nom du module dans lequel
elle est située.
'--------------------------------
Sub TestChrono()
Execute_Macro = "Module1.MaMacro"
UserForm1.Show
End Sub
'--------------------------------

Et pour finir dans l'userform, tu remplaces cette ligne de code :
Call MaMacro
par ceci :
Application.Run Execute_Macro




"COQUITO" a écrit dans le message de groupe de discussion :

Merci, une fois de plus, Michdenis pour cette réponse ultra rapide !
C'est tout à fait ce style de chrono que j'attendais.

Je vais essayer d'adapter ton programme de façon à ce que l'utilisateur
n'ait pas à démarrer lui-même le chrono, car je souhaiterais vraiment que
celui-ci s'enclenche simultanément avec la macro qui tournera en arrière
plan.

Comme cette macro est actuellement lancée via un menu personnalisé, je pense
intercaler une petite procédure qui affichera le UserForm.
Et c'est donc maintenant via la procédure évènementielle UserForm_Activate,
que j'appellerai ma macro.

J'espère que cela va fonctionner et ne pas créer d'incompatibilités
quelconques avec les autres procédures de ton programme.
(Quand j'appelle l'aide en ligne sur "AddressOf" par exemple, je vois que
cela me dépasse un peu ; je n'ai jamais utilisé ces fonctions jusqu'à
maintenant et j'ai donc un peu peur d'introduire "le grain de sable" qui
bloquera tout).

Aussi, puis-je te demander de me dire d'ores et déjà si l'adaptation que
j'envisage est possible ou si je déraille complètement.
Pourrais-tu me dire aussi à quoi correspondent "hWnd" et "nIDEvent" dans la
déclaration de la fonction "KillTimer".
J'aimerais également savoir si les variables "H" et "DS" sont sciemment
déclarées comme étant de type Variant puisqu'elles ne sont pas typées dans
la procédure Chrono.

Je me rends compte de mon exigence avec toutes ces questions, mais le
développement Excel Vba m'intéresse beaucoup et je voudrais tellement
améliorer mes connaissances.

Un grand merci !


"michdenis" a écrit dans le message de
news:
Bonjour,

Essaie ceci : http://cjoint.com/?fimauaYaFC

Tu ouvres le formulaire en mode création, et tu indiques le nom de la
macro à exécuter.

Je n'ai pas testé ceci sur une longue macro... je n'en ai pas à ma
disposition !
;-)



"COQUITO" a écrit dans le message de groupe de
discussion :

Bonjour à tous,

Je souhaiterais afficher un chronomètre pendant qu'une macro Excel vba qui
prend un certain temps s'exécute, ceci dans le but de faire patienter
l'utilisateur.

J'ai utilisé un code trouvé sur un forum pour créer une "horloge" digitale
à
l'aide d'une shape.
Ce chrono fonctionne très bien mais ne permet pas qu'une procédure vba
s'exécute en arrière plan.

J'ai trouvé un exemple utilisant un userform (ce que conseillait fortement
le membre du forum qui apportait sa réponse) et faisant appel à une
fonction
"API" de windows et c'est là que je ne suis plus, car je connais mal ce
domaine.

Suffit-il d'écrire : Public Declare Function GetTickCount& Lib "kernel32"
()
ou faut-il au préalable activer une fonction windows ou excel ?

D'autre part, pour ce chronomètre, je souhaiterais qu'il se mette en
marche
lorsque la procédure vba qui doit s'exécuter en arrière plan démarre et
qu'il s'arrête de lui-même quand le programme vba est arrivé à son terme,
donc, pas de bouton de marche/arrêt.

Je vous remercie par avance si vous pouvez m'aider à réaliser ce
programme.

Avatar
COQUITO
Alors j'avais vu juste, car c'est bien la solution d'adaptation que j'avais
soumise à ton approbation dans ma précédente réponse : par mon menu actuel
qui pour l'instant lance l'exécution de ma macro, je vais afficher le
formulaire, et c'est dans le UserForm_Activate que j'appellerai ma macro.

Je viens de lire aussi ton information supplémentaire qui pourrait
effectivement m'être fort utile à d'autres occasions et je vais la stocker
précieusement.

Merci encore Denis (et donc aussi à Frédéric Sigonneau dont j'ai vu le nom
bien des fois au gré de mes recherches diverses et variées ...).
Très bonne soirée.



"michdenis" a écrit dans le message de
news:
De ton bouton ou ta commande dans ton menu,
tu n'as qu'à appeler une petite macro qui a pour
but de lancer le Formulaire

Sub Ouvrir_Formulaire()
Userform1.Show
End Sub

Et dans le formulaire, tu remplaces "MaMacro" par la macro
que tu veux exécuter dans le classeur.

Tout devrait se faire automatiquement !




"COQUITO" a écrit dans le message de groupe de
discussion :

Merci, une fois de plus, Michdenis pour cette réponse ultra rapide !
C'est tout à fait ce style de chrono que j'attendais.

Je vais essayer d'adapter ton programme de façon à ce que l'utilisateur
n'ait pas à démarrer lui-même le chrono, car je souhaiterais vraiment que
celui-ci s'enclenche simultanément avec la macro qui tournera en arrière
plan.

Comme cette macro est actuellement lancée via un menu personnalisé, je
pense
intercaler une petite procédure qui affichera le UserForm.
Et c'est donc maintenant via la procédure évènementielle
UserForm_Activate,
que j'appellerai ma macro.

J'espère que cela va fonctionner et ne pas créer d'incompatibilités
quelconques avec les autres procédures de ton programme.
(Quand j'appelle l'aide en ligne sur "AddressOf" par exemple, je vois que
cela me dépasse un peu ; je n'ai jamais utilisé ces fonctions jusqu'à
maintenant et j'ai donc un peu peur d'introduire "le grain de sable" qui
bloquera tout).

Aussi, puis-je te demander de me dire d'ores et déjà si l'adaptation que
j'envisage est possible ou si je déraille complètement.
Pourrais-tu me dire aussi à quoi correspondent "hWnd" et "nIDEvent" dans
la
déclaration de la fonction "KillTimer".
J'aimerais également savoir si les variables "H" et "DS" sont sciemment
déclarées comme étant de type Variant puisqu'elles ne sont pas typées dans
la procédure Chrono.

Je me rends compte de mon exigence avec toutes ces questions, mais le
développement Excel Vba m'intéresse beaucoup et je voudrais tellement
améliorer mes connaissances.

Un grand merci !


"michdenis" a écrit dans le message de
news:
Bonjour,

Essaie ceci : http://cjoint.com/?fimauaYaFC

Tu ouvres le formulaire en mode création, et tu indiques le nom de la
macro à exécuter.

Je n'ai pas testé ceci sur une longue macro... je n'en ai pas à ma
disposition !
;-)



"COQUITO" a écrit dans le message de groupe de
discussion :

Bonjour à tous,

Je souhaiterais afficher un chronomètre pendant qu'une macro Excel vba
qui
prend un certain temps s'exécute, ceci dans le but de faire patienter
l'utilisateur.

J'ai utilisé un code trouvé sur un forum pour créer une "horloge"
digitale
à
l'aide d'une shape.
Ce chrono fonctionne très bien mais ne permet pas qu'une procédure vba
s'exécute en arrière plan.

J'ai trouvé un exemple utilisant un userform (ce que conseillait
fortement
le membre du forum qui apportait sa réponse) et faisant appel à une
fonction
"API" de windows et c'est là que je ne suis plus, car je connais mal ce
domaine.

Suffit-il d'écrire : Public Declare Function GetTickCount& Lib "kernel32"
()
ou faut-il au préalable activer une fonction windows ou excel ?

D'autre part, pour ce chronomètre, je souhaiterais qu'il se mette en
marche
lorsque la procédure vba qui doit s'exécuter en arrière plan démarre et
qu'il s'arrête de lui-même quand le programme vba est arrivé à son terme,
donc, pas de bouton de marche/arrêt.

Je vous remercie par avance si vous pouvez m'aider à réaliser ce
programme.