XL 2016 bloquer le lancement d'un autre code tant que le code en cours n'est pas terminé ?

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour à toutes et à tous,

Dans mon usine à gaz (comme diraient certains LOL), j'ai des codes d'exécution nécessitant plusieurs traitements ce qui prend un peu de temps.
Il y a souvent des beugs ou codes désactivés et cela créé des soucis (exécution de codes non terminés ou autres)
d'où souci dans le classeur (lignes incomplètes, traitement de cellules non faits etc.)

Mes commerciales et moi-même avons tous le même classeur de travail.
Quand je travaille sur le mien, j'ai pour principe de ne pas cliquer sur un autre bouton tant que l'exécution d'un code en cours n'est pas terminé, c'est à dire tant que je vois le "petit" rond" qui m'indique que ça mouline.
Et je n'ai jamais de souci sur mon fichier

Mais il n'en est pas de même pour mes commerciales et il y a toujours des problèmes.
J'en suis arrivé à la déduction qu'elles lancent en cliquant (par impatience), l'exécution d'un autre code avant que le code en cours soit terminé.

Ne sachant comment faire ou si cela est possible (malgré mes recherches), je me permets de vous poser ma question :
Est-il possible de bloquer la possibilité de cliquer sur les autres "boutons" de macros Ou de rendre les autres boutons inactifs ?
tant que le code en cours n'est pas terminé ?


Je crains que le classeur joint ne montre pas le problème car les codes sont quasi-instantanés.
Ce serait super,
Avec mes remerciements
Je vous souhaite une belle journée,
Amicalement,
lionel,
 

Pièces jointes

  • test_bloque_boutons.xlsm
    17.9 KB · Affichages: 4

CB60

XLDnaute Barbatruc
Bonjour
Pour bloquer ton second bouton, tu peux faire cela:
VB:
Sub Macro1()
ActiveSheet.Shapes("Button 2").Visible = False
    [C4:C100000] = "10"
    [d4:r100000] = "Bonjour le Forum"
ActiveSheet.Shapes("Button 2").Visible = True
End Sub
au lancement de la macro, il le masque et le rend visible en fin de macro
 

job75

XLDnaute Barbatruc
Bonjour Lionel, CB60,

A ma connaissance quand une macro tourne l'utilisateur ne peut pas en lancer une autre (en cliquant sur un bouton ou par Alt+F8)..

Sauf si elle contient une instruction DoEvents dans une boucle.

Voyez le fichier joint avec ces macros très faciles à comprendre :
VB:
Dim arret As Boolean 'mémorise la variable

Sub Bouton_A()
Dim t#
arret = False
t = Timer 'délai 20 secondes
Do While Timer < t + 20
    If arret Then Exit Do
Loop
MsgBox Format(Timer - t, "0.00 \s")
End Sub

Sub Bouton_B()
Dim t#
arret = False
t = Timer 'délai 20 secondes
Do While Timer < t + 20
    If arret Then Exit Do
    DoEvents
Loop
MsgBox Format(Timer - t, "0.00 \s")
End Sub

Sub Bouton_C()
arret = True
End Sub
A+
 

Pièces jointes

  • Macros(1).xlsm
    23.8 KB · Affichages: 3

Discussions similaires

Statistiques des forums

Discussions
311 711
Messages
2 081 792
Membres
101 817
dernier inscrit
carvajal