Bonjour,
Les temps que tu donnes pour l'exécution des codes me paraissent beaucoup plus cohérents... Le rapport entre les deux me semble assez bien correspondre aux opérations que j'ai pu supprimer... Comme je l'avais dit on a un gain déjà sensible et qui me paraît satisfaisant, mais rien de foudroyant (mais ça je doute que l'on puisse y parvenir).
Si tu veux interrompre la procédure en cours en appuyant sur un bouton, tu peux essayer un système simple :
- une variable booléenne déclarée au niveau module, par exemple :
Dim interrupt As Boolean
- une procédure attachée au bouton d'interruption, qui passera cette variable à True lorsque tu veux interrompre :
Sub Interrompre()
interrupt = True
End Sub
- dans ta procédure à interrompre, c'est à l'intérieur de la boucle que tu dois intervenir pour arrêter le processus, par exemple en fin d'un tour, avant le Next ln, tu introduis un DoEvents destiné à redonner la main au système avant de poursuivre, ce qui provoquera l'exécution des commandes en attente, et tu testes la valeur de la variable : si elle est à True, tu sors de la procédure.
DoEvents
If interrupt Then interrupt = False: Exit Sub
Next Ln
C'est à tester dans le contexte...
Cordialement.