Redonner la main à l'utisateur pour poursuivre l'exécution d'une macro

Bonjour Forum,

Comme vous m'avez manqué! Je n'ai pas posté de message depuis… Il faut dire que j'ai vraiment beaucoup progressé en codage grâce à votre précieuse aide et je tiens à vous remercier, chacun individuellement pour toutes vos interventions respectives.

Je suis aujourd'hui en réflexions sur un sujet: exécuter une macro jusqu'à un point, puis mettre un temps d'arrêt pour donner la main à l'utilisateur. Celui-ci pourra alors cliquer sur un bouton "reprendre" l'exécution de sa macro exactement à partir de LA OU ELLE S'EST ARRETEE.

La solution,

newHour = Hour(Now()) 
newMinute = Minute(Now()) 
newSecond = Second(Now()) + 10 
waitTime = TimeSerial(newHour, newMinute, newSecond) 
Application.Wait waitTime

n'est ici pas très intéressante car on ne sait pas dans combien de temps exactement l'utilisateur va redonner la main pour la suite de la macro.

L'idée si vous l'avez compris, c'est d'avoir un pop-up qui sorte et qui dise: "vous êtes à telle étape de la procédure, faites ce que vous avez à faire puis cliquez sur étape suivante". Le tout avec un bouton qui, derrière, relance la macro dans sa suite (sans reprendre l'exécution depuis le début).

Auriez-vous quelques suggestions pertinentes ?

Bien à vous,

Yeshua.

Bonjour,

pas sûr de comprendre à quoi cela pourrait servir. Il y a peut-être moyen de faire autrement si tu expliques ce que tu veux faire et pourquoi tu penses que c'est la méthode pour faire ce que tu veux.

voici cependant un bout de code

Sub macro1()

For i = 1 To 30
Application.Wait (Now() + TimeValue("00:00:01")) 'simule temps d'exécution de la macro
If i = 20 Then
MsgBox "vous êtes arrivé à l'étape 20, faites ce que vous avez à faire, puis introduisez une valeur en A1 pour continuer"
While Cells(1, 1) = "": DoEvents: Wend
MsgBox "la macro continue"
End If
Next i
End Sub

Bonjour H2So4,

Merci de ton retour. Le but est de réduire le risque opérationnel au maximum. J'implémente une macro au travail. Cette macro suit une procédure bien définie.

L'essentiel du travail se fait sur excel, mais l'utilisateur est appelé à récupérer des données et faire d'autre manipulations ailleurs pour alimenter les sources et même le fichier en question sur lequel tourne la macro.

On veut que l'utilisateur ne fasse que des "click" en dehors des "copiers-coller" issus de l'interface du fournisseur de données.

Je réfléchis cependant sur ta proposition. Si on fait varier le contenu d'une case pour donner l'instruction de continuer et que l'utilisateur oublie de changer la valeur, ou ferme le fichier par inadvertance… il va falloir gérer ce cas.

J'ai pensé à la solution du bouton parce que je sais que les boutons empêchent de continuer toute autre manipulation dans excel tant qu'on n'a pas répondu à la question posée (pas même pour ferme le classeur, il me semble).

Les boutons sont bloquants et ce serait un atout dans ce cas ci, si je ne m'abuse. Enfin, vois-tu l'idée ?

Bien à toi,

Y.

rebonjour,

un msgbox bloque tout, y compris le copier/coller, je suppose que ce n'est pas une solution.

quant à la fermeture du classeur, tu as un événément qui te permet de gérer la chose.

pour ce qui concerne l'oubli de changer une valeur, on peut imaginer une procédure qui détecte qu'il y a de l'activité sur la feuille et relancer la macro après un certain temps d'inactivité.

Toutes ces procédures ne me semblent cependant pas adéquates, tu devrais revoir tout le processus pour éviter cette façon de travailler qui manque de stabilité.

Re,

Oui en effet, je n'ai pas pensé au fait que cela bloque même le copier coller

Et avec le DoEvents, on boucle indéfiniment tant que la cellule A1 est vide. N'est pas risqué pour la gestion des performances de l'application ou du système d'exploitation ?

Car il me semble que cette commande donne la main à l'utilisateur, et le while reprend pour donner de nouveau et ainsi de suite ?

Bien à toi,

Y.

Bonjour tout le monde ,

une idée : pourquoi pas reprendre l'idée de la msgbox et faire de même avec un userform ?

Il me semble qu'il est possible de rendre un userform non-modal de cette manière

tonUF.show 0

Pourquoi pas ajouter un bouton qui lancerait la deuxième partie du code ?

Cordialement

Bonjour Vince1512,

Je ne m'y connais pas du tout sur ta proposition. Je n'ai utilisé jusque là, des UserForm que pour créer des liste.

J'ignorais que cela pouvais lancer des macros.

Et pour ta compréhension du problème, la procédure est vraiment saucissonnée. Il y a à peu près 20 étapes à suivre. Certaines sont faites par la macro, d'autres entre deux étapes requiert un ravitallement en données. C'est là où la macro doit s'arrêter et donner la main à l'utilisateur. Puis une fois qu'il a fini, elle lui signale et elle reprend son cours.

Peux-tu étayer ta proposition par un exemple de code stp?

En te remerciant d'avance,

Bien à toi,

Yeshua.

Re,

il serait surement possible de créer un userform avec un label indiquant qu'il faut cliquer sur le bouton ci-dessous pour continuer ...

Appuyer sur le bouton fermerait la macro et lancerait la suite de la macro.

Re,

Ok. J'étais parti sur la proposition H2So4. Je vais tenter la tienne également aussi et ferai un retour à propos.

A très vite.

Yeshua.

re,

je viens de me rendre compte que justement, tu dois mettre en modal l'userfom donc pas besoin de 0 après le userform.show pour que le code se mette en "pause".

Pour appeler l'userform

userform1.show

Action à donner à ton bouton

unload me

La fermeture rend la main au module de code

RE,

Très intéressant Je vais tester et te dirai ce qu'il en est .

Y.

J'ai testé la méthode de l'userform.

Re,

Elle n'a pas l'air très opérationnelle. Elle s'affiche avec retard et parfois à la fin du code. Ce que je ne comprends pas.

La solution de la case à remplir m'a l'air plus simple à envisager tout compte fait.

Y.

Rechercher des sujets similaires à "redonner main utisateur poursuivre execution macro"