J'ai plusieurs boucles "for" imbriqué les unes derrières les autres :
For a = 1 To 1 + Nb_iteration_A * 5
For b = 1 To 1 + Nb_iteration_B * 5
For c = 1 To 1 + Nb_iteration_C * 5
For d = 1 To 1 + Nb_iteration_D * 5 etc...
somme = Cells(4, a + 2).Value * Nb_iteration_A +
Cells(4, b + 2).Value * Nb_iteration_B + Cells(4, c + 2).Value *
Nb_iteration_C + Cells(4, d + 2).Value * Nb_iteration_D etc....
Cela peut donc faire des calculs long, trés long.... J'aimerais mettre fin à
ces calculs à n'importe quel moment (quand j'en ai marre d'attendre) en
appuyant sur "ESCAPE" ou "F1" ou sur n'imprte quoi, une touche, un bouton, le
bouton RESET de ma tour....
J'ai essayer ça :
1) -> Application.OnKey "{F1}", "Arret"
mais le saut à la procédure "Arret" ne se fait qu'aprés tous les calculs
effectués.
Et ça :
2) -> On Error GoTo handleCancel
Application.EnableCancelKey = xlErrorHandler
handleCancel:
If Err = 18 Then
a = b = c = d = e = f = g = 6
MsgBox "erreur 18"
Exit Sub
End If
Mais le problème reste le même, l'erreur n'est prise en compte qu'a la
sortie des boucles for, une fois tous les calculs faits !!!
Alors, je sèche, je n'ai plus d'idée ?!
Quelqun à déjà eu ce genre de problème ?
J'attends votre aide !!!
Très étonnant que la touche Echap n'arrête pas l'exécution !
Vérifie que en début de macro tu n'aies pas la ligne suivante : Application.EnableCancelKey = xlDisabled
AV
PMO
Bonjour,
Vous pouvez essayer ceci: Pressez Ctrl+Alt+Pause (en principe ça arrète net)
Sinon par programmation (et pour le fun) voici un code qui installe/désinstalle un bouton pour stopper la macro. J'ai fait une boucle infinie pour tester. Je vous invite à l'essayer.
'************************************ Option Explicit '_________________________________________ Sub BoucleInfinie() Dim i& Dim j& '---- Destruction du bouton Stop ---- Call DelButton '---- Création du bouton Stop ---- Call AddButton '---- Ci-dessous votre traitement ---- Do While j& = 0 i& = i& + 1 '#### NECESSAIRE POUR REDONNER LA MAIN #### DoEvents '########################################## [a1] = i& Loop End Sub '_________________________________________ Private Sub StoppeMacro() Application.VBE.Windows(1).SetFocus SendKeys ("%xr") End Sub '_________________________________________ Private Sub AddButton() Dim myBar As CommandBarControls Dim myButton As CommandBarControl Set myBar = _ Application.CommandBars("Standard").Controls Set myButton = myBar.Add _ (Type:=msoControlButton, _ ID:)50, _ before:=myBar.Count + 1, _ temporary:=True) With myButton .Caption = "Stoppe la macro en cours" .OnAction = "StoppeMacro" .DescriptionText = "pourRetrouverCeBouton" End With End Sub '_________________________________________ Private Sub DelButton() Dim C As CommandBarControl For Each C In _ Application.CommandBars("Standard").Controls If C.DescriptionText = _ "pourRetrouverCeBouton" Then C.Delete Exit For End If Next C End Sub '*******************************
Est-ce amusant ?
Cordialement.
PMO Patrick Morange
Voilà mon problème :
J'ai plusieurs boucles "for" imbriqué les unes derrières les autres :
For a = 1 To 1 + Nb_iteration_A * 5 For b = 1 To 1 + Nb_iteration_B * 5 For c = 1 To 1 + Nb_iteration_C * 5 For d = 1 To 1 + Nb_iteration_D * 5 etc...
somme = Cells(4, a + 2).Value * Nb_iteration_A + Cells(4, b + 2).Value * Nb_iteration_B + Cells(4, c + 2).Value * Nb_iteration_C + Cells(4, d + 2).Value * Nb_iteration_D etc....
Cela peut donc faire des calculs long, trés long.... J'aimerais mettre fin à ces calculs à n'importe quel moment (quand j'en ai marre d'attendre) en appuyant sur "ESCAPE" ou "F1" ou sur n'imprte quoi, une touche, un bouton, le bouton RESET de ma tour....
J'ai essayer ça : 1) -> Application.OnKey "{F1}", "Arret" mais le saut à la procédure "Arret" ne se fait qu'aprés tous les calculs effectués.
Et ça : 2) -> On Error GoTo handleCancel Application.EnableCancelKey = xlErrorHandler
handleCancel: If Err = 18 Then a = b = c = d = e = f = g = 6 MsgBox "erreur 18" Exit Sub End If
Mais le problème reste le même, l'erreur n'est prise en compte qu'a la sortie des boucles for, une fois tous les calculs faits !!!
Alors, je sèche, je n'ai plus d'idée ?! Quelqun à déjà eu ce genre de problème ? J'attends votre aide !!!
MERCI ;-)
Bonjour,
Vous pouvez essayer ceci:
Pressez Ctrl+Alt+Pause (en principe ça arrète net)
Sinon par programmation (et pour le fun) voici un code qui
installe/désinstalle un bouton pour stopper la macro.
J'ai fait une boucle infinie pour tester. Je vous invite à l'essayer.
'************************************
Option Explicit
'_________________________________________
Sub BoucleInfinie()
Dim i&
Dim j&
'---- Destruction du bouton Stop ----
Call DelButton
'---- Création du bouton Stop ----
Call AddButton
'---- Ci-dessous votre traitement ----
Do While j& = 0
i& = i& + 1
'#### NECESSAIRE POUR REDONNER LA MAIN ####
DoEvents
'##########################################
[a1] = i&
Loop
End Sub
'_________________________________________
Private Sub StoppeMacro()
Application.VBE.Windows(1).SetFocus
SendKeys ("%xr")
End Sub
'_________________________________________
Private Sub AddButton()
Dim myBar As CommandBarControls
Dim myButton As CommandBarControl
Set myBar = _
Application.CommandBars("Standard").Controls
Set myButton = myBar.Add _
(Type:=msoControlButton, _
ID:)50, _
before:=myBar.Count + 1, _
temporary:=True)
With myButton
.Caption = "Stoppe la macro en cours"
.OnAction = "StoppeMacro"
.DescriptionText = "pourRetrouverCeBouton"
End With
End Sub
'_________________________________________
Private Sub DelButton()
Dim C As CommandBarControl
For Each C In _
Application.CommandBars("Standard").Controls
If C.DescriptionText = _
"pourRetrouverCeBouton" Then
C.Delete
Exit For
End If
Next C
End Sub
'*******************************
Est-ce amusant ?
Cordialement.
PMO
Patrick Morange
Voilà mon problème :
J'ai plusieurs boucles "for" imbriqué les unes derrières les autres :
For a = 1 To 1 + Nb_iteration_A * 5
For b = 1 To 1 + Nb_iteration_B * 5
For c = 1 To 1 + Nb_iteration_C * 5
For d = 1 To 1 + Nb_iteration_D * 5 etc...
somme = Cells(4, a + 2).Value * Nb_iteration_A +
Cells(4, b + 2).Value * Nb_iteration_B + Cells(4, c + 2).Value *
Nb_iteration_C + Cells(4, d + 2).Value * Nb_iteration_D etc....
Cela peut donc faire des calculs long, trés long.... J'aimerais mettre fin à
ces calculs à n'importe quel moment (quand j'en ai marre d'attendre) en
appuyant sur "ESCAPE" ou "F1" ou sur n'imprte quoi, une touche, un bouton, le
bouton RESET de ma tour....
J'ai essayer ça :
1) -> Application.OnKey "{F1}", "Arret"
mais le saut à la procédure "Arret" ne se fait qu'aprés tous les calculs
effectués.
Et ça :
2) -> On Error GoTo handleCancel
Application.EnableCancelKey = xlErrorHandler
handleCancel:
If Err = 18 Then
a = b = c = d = e = f = g = 6
MsgBox "erreur 18"
Exit Sub
End If
Mais le problème reste le même, l'erreur n'est prise en compte qu'a la
sortie des boucles for, une fois tous les calculs faits !!!
Alors, je sèche, je n'ai plus d'idée ?!
Quelqun à déjà eu ce genre de problème ?
J'attends votre aide !!!
Vous pouvez essayer ceci: Pressez Ctrl+Alt+Pause (en principe ça arrète net)
Sinon par programmation (et pour le fun) voici un code qui installe/désinstalle un bouton pour stopper la macro. J'ai fait une boucle infinie pour tester. Je vous invite à l'essayer.
'************************************ Option Explicit '_________________________________________ Sub BoucleInfinie() Dim i& Dim j& '---- Destruction du bouton Stop ---- Call DelButton '---- Création du bouton Stop ---- Call AddButton '---- Ci-dessous votre traitement ---- Do While j& = 0 i& = i& + 1 '#### NECESSAIRE POUR REDONNER LA MAIN #### DoEvents '########################################## [a1] = i& Loop End Sub '_________________________________________ Private Sub StoppeMacro() Application.VBE.Windows(1).SetFocus SendKeys ("%xr") End Sub '_________________________________________ Private Sub AddButton() Dim myBar As CommandBarControls Dim myButton As CommandBarControl Set myBar = _ Application.CommandBars("Standard").Controls Set myButton = myBar.Add _ (Type:=msoControlButton, _ ID:)50, _ before:=myBar.Count + 1, _ temporary:=True) With myButton .Caption = "Stoppe la macro en cours" .OnAction = "StoppeMacro" .DescriptionText = "pourRetrouverCeBouton" End With End Sub '_________________________________________ Private Sub DelButton() Dim C As CommandBarControl For Each C In _ Application.CommandBars("Standard").Controls If C.DescriptionText = _ "pourRetrouverCeBouton" Then C.Delete Exit For End If Next C End Sub '*******************************
Est-ce amusant ?
Cordialement.
PMO Patrick Morange
Voilà mon problème :
J'ai plusieurs boucles "for" imbriqué les unes derrières les autres :
For a = 1 To 1 + Nb_iteration_A * 5 For b = 1 To 1 + Nb_iteration_B * 5 For c = 1 To 1 + Nb_iteration_C * 5 For d = 1 To 1 + Nb_iteration_D * 5 etc...
somme = Cells(4, a + 2).Value * Nb_iteration_A + Cells(4, b + 2).Value * Nb_iteration_B + Cells(4, c + 2).Value * Nb_iteration_C + Cells(4, d + 2).Value * Nb_iteration_D etc....
Cela peut donc faire des calculs long, trés long.... J'aimerais mettre fin à ces calculs à n'importe quel moment (quand j'en ai marre d'attendre) en appuyant sur "ESCAPE" ou "F1" ou sur n'imprte quoi, une touche, un bouton, le bouton RESET de ma tour....
J'ai essayer ça : 1) -> Application.OnKey "{F1}", "Arret" mais le saut à la procédure "Arret" ne se fait qu'aprés tous les calculs effectués.
Et ça : 2) -> On Error GoTo handleCancel Application.EnableCancelKey = xlErrorHandler
handleCancel: If Err = 18 Then a = b = c = d = e = f = g = 6 MsgBox "erreur 18" Exit Sub End If
Mais le problème reste le même, l'erreur n'est prise en compte qu'a la sortie des boucles for, une fois tous les calculs faits !!!
Alors, je sèche, je n'ai plus d'idée ?! Quelqun à déjà eu ce genre de problème ? J'attends votre aide !!!