Johnsdoeuf
XLDnaute Nouveau
Je fait un test pour réaliser de longs calculs sans bloquer l'interface.
Mon Code:
Processcall est appelé par la modification de la feuille.
Il lance la procédure SousProcess
Elle, fait une tache très longue et inutile interrompue par doevents pour me laisser la main. Ainsi, j'ai le temps de modifier la feuille qui a pour effet de lancer une nouvelle fois la procédure ProcessCall.
Normalement un mécanisme de contrôle identifie qu'un autre appel à processcall est intervenu et devrai arrêter le processus ancien.
Ce n'est pas nécessaire puisque les procédures interrompues ne se finissent simplement jamais.
Voici le retour de l'instruction debug suite à 3 modifications dans la feuille.
Id:49387 itération:1
Id:49387 itération:2
Id:49387 itération:3
Id:49387 itération:4
Id:49387 itération:5
Id:87412 itération:1
Id:87412 itération:2
Id:87412 itération:3
Id:87412 itération:4
Id:50342 itération:1
Id:50342 itération:2
Id:50342 itération:3
Id:50342 itération:4
Id:87310 itération:1
Id:87310 itération:2
Id:87310 itération:3
Id:87310 itération:4
Id:87310 itération:5
Id:87310 itération:6
Id:87310 itération:7
Id:87310 itération:8
Id:87310 itération:9
Id:87310 itération:10
Id:87310 itération:11
...
Les procédures 49387 puis 50382 sont correctement interrompues mais ne reprennent jamais.
Ce comportement ne me parait pas normal.
Mon Code:
VB:
Sub ProcessCall(ByVal TopLoc)
Dim Work As New Process
Set cellule = cells("b1)
Work.TopLoc = TopLoc
Randomize
Work.Id = Int(Rnd * 100000)
cellule.Resize(bcl).ClearContents
Call SousProcess(cellule, Work)
End Sub
Sub SousProcess(Base, Work)
Som = 0
For A = 1 To bcl
Som = Som + Base.Offset(0, -1).Value
For b = 1 To 8000
Base.Value = Som
Next
Set Base = Base.Offset(1, 0)
Debug.Print ("Id:" & Work.Id & " itération:" & A)
DoEvents
If Work.TopLoc <> Top Then
Err.Raise 5015, , "Interuption de la procédure"
End If
Next
End Sub
module de classe Process:
Public TopLoc
Public Id
Processcall est appelé par la modification de la feuille.
Il lance la procédure SousProcess
Elle, fait une tache très longue et inutile interrompue par doevents pour me laisser la main. Ainsi, j'ai le temps de modifier la feuille qui a pour effet de lancer une nouvelle fois la procédure ProcessCall.
Normalement un mécanisme de contrôle identifie qu'un autre appel à processcall est intervenu et devrai arrêter le processus ancien.
Ce n'est pas nécessaire puisque les procédures interrompues ne se finissent simplement jamais.
Voici le retour de l'instruction debug suite à 3 modifications dans la feuille.
Id:49387 itération:1
Id:49387 itération:2
Id:49387 itération:3
Id:49387 itération:4
Id:49387 itération:5
Id:87412 itération:1
Id:87412 itération:2
Id:87412 itération:3
Id:87412 itération:4
Id:50342 itération:1
Id:50342 itération:2
Id:50342 itération:3
Id:50342 itération:4
Id:87310 itération:1
Id:87310 itération:2
Id:87310 itération:3
Id:87310 itération:4
Id:87310 itération:5
Id:87310 itération:6
Id:87310 itération:7
Id:87310 itération:8
Id:87310 itération:9
Id:87310 itération:10
Id:87310 itération:11
...
Les procédures 49387 puis 50382 sont correctement interrompues mais ne reprennent jamais.
Ce comportement ne me parait pas normal.
Dernière édition: