ted_etbill
XLDnaute Nouveau
Bonjour à tous;
je vous soumet un probleme qui a gaché ma journée......😡😡
J'ai une macro qui dure environ 2 min.
Lors de l'execution de la macro, le code s'arrete a plusieurs reprises pour proposer des options a l'utilisateur.
Je souhaite utiliser un code que j'ai récupéré qui permet de faire un chrono avec une fonction pause (compte le temps d'execution de tous les modules, mais sans tenir compte du temps d'attente des réponses de l'utilisateur).
Voici le code que je souhaite utiliser pour le chrono:
Public CHRONO, Départ, tp, T As Integer
Public oVal_Chrono As Long
Public Total_Chrono As String
Sub oStart()
If T = 1 Then
Départ = Timer() - tp
Else
Départ = Timer()
End If
majChrono
End Sub
Sub oPause()
T = 1
On Error Resume Next
Application.OnTime CHRONO, Procedure:="majChrono", Schedule:=False
tp = oVal_Chrono
End Sub
Sub oStop()
On Error Resume Next
Application.OnTime CHRONO, Procedure:="majChrono", Schedule:=False
T = 0
End Sub
Sub majChrono()
oVal_Chrono = (Timer() - Départ)
CHRONO = Now + TimeValue("00:00:1")
Application.OnTime CHRONO, "majChrono", Schedule:=True
Total_Chrono = Durée(oVal_Chrono) '(Durée est une fonction que j'ai faite pour convertir un LONG en H/M/S
End Sub
lorsque j'appelle les procédure oStart, oPause et oStop, ca fonctionne a merveille.
Le soucis c'est que ca ne fonctionne plus dans ma procédure principale......
voici ce que je souhaite faire dans un extrait de mon code :
Public Sub MAIN()
'Stoppe le rafraichissement de l'écran:
Application.ScreenUpdating = False
'Init des flags d'avertissement des modules appelés:
AVERT_STATUT = False
'Lancement du chrono:
oStart
'On vérifie que la feuille rawdata est présente:
On Error GoTo ERREUR1
If ActiveWorkbook.Worksheets("rawdata") Is Nothing Then GoTo ERREUR1
On Error GoTo 0
'Etape 1:
Call TEXTE
'Test si erreur lors du regroupement:
If ERR_COL = True Then GoTo ERREUR2
If ERR_NO_DONNEES = True Then GoTo ERREUR3
If ERR_LIGNE = True Then GoTo ERREUR4
If ERR_COMM = True Then GoTo ERREUR5
'Etape 2:
Call FILTRE
'Test si erreur lors du tri:
If ERR_DATE = True Then GoTo ERREUR6
If ERR_HEURE = True Then GoTo ERREUR7
'Etape 3:
Call MEF
'Test si erreur lors de la mise en forme:
If AVERT_STATUT = True Then CreateObject("Wscript.shell").Popup "Certaines données n'ont pu être déterminés", 3, "AVERTISSEMENT", vbExclamation
'Etape 4: on met en page si impression demandée:
Print_Result = "sans impression"
'Pause du chrono:
oPause
If MsgBox("Voulez-vous imprimer ?", vbYesNo + vbQuestion, "MESSAGE") = vbYes Then
'Redemarrage du chrono
oStart
UserForm1.Caption = "RO:Etape 4/5 Mise en page ..."
Call MEP
Print_Result = "avec impression"
CreateObject("Wscript.shell").Popup "Impression lancée...", 3, "INFORMATION", vbInformation
End If
'Etape 5: on sauvegarde si souhaité
Save_Result = "sans sauvegarde"
'Pause du chrono:
oPause
If MsgBox("Voulez-vous sauvegarder ?", vbYesNo + vbQuestion, "MESSAGE") = vbYes Then
'Redemarrage du chrono
oStart
UserForm1.Caption = "RO:Etape 5/5 Sauvegarde ..."
Call SAVE
Save_Result = "avec sauvegarde dans fichier:"
Else
INFO_SAVE = ""
End If
'Arret du chrono:
oStop
......
A la fin du code je récupère le temps total de traitement par la variable Total_Chrono (sans les attentes aux messages)... et a chaque fois j'ai rien...
😕😕😕😕😕
je vous soumet un probleme qui a gaché ma journée......😡😡
J'ai une macro qui dure environ 2 min.
Lors de l'execution de la macro, le code s'arrete a plusieurs reprises pour proposer des options a l'utilisateur.
Je souhaite utiliser un code que j'ai récupéré qui permet de faire un chrono avec une fonction pause (compte le temps d'execution de tous les modules, mais sans tenir compte du temps d'attente des réponses de l'utilisateur).
Voici le code que je souhaite utiliser pour le chrono:
Public CHRONO, Départ, tp, T As Integer
Public oVal_Chrono As Long
Public Total_Chrono As String
Sub oStart()
If T = 1 Then
Départ = Timer() - tp
Else
Départ = Timer()
End If
majChrono
End Sub
Sub oPause()
T = 1
On Error Resume Next
Application.OnTime CHRONO, Procedure:="majChrono", Schedule:=False
tp = oVal_Chrono
End Sub
Sub oStop()
On Error Resume Next
Application.OnTime CHRONO, Procedure:="majChrono", Schedule:=False
T = 0
End Sub
Sub majChrono()
oVal_Chrono = (Timer() - Départ)
CHRONO = Now + TimeValue("00:00:1")
Application.OnTime CHRONO, "majChrono", Schedule:=True
Total_Chrono = Durée(oVal_Chrono) '(Durée est une fonction que j'ai faite pour convertir un LONG en H/M/S
End Sub
lorsque j'appelle les procédure oStart, oPause et oStop, ca fonctionne a merveille.
Le soucis c'est que ca ne fonctionne plus dans ma procédure principale......
voici ce que je souhaite faire dans un extrait de mon code :
Public Sub MAIN()
'Stoppe le rafraichissement de l'écran:
Application.ScreenUpdating = False
'Init des flags d'avertissement des modules appelés:
AVERT_STATUT = False
'Lancement du chrono:
oStart
'On vérifie que la feuille rawdata est présente:
On Error GoTo ERREUR1
If ActiveWorkbook.Worksheets("rawdata") Is Nothing Then GoTo ERREUR1
On Error GoTo 0
'Etape 1:
Call TEXTE
'Test si erreur lors du regroupement:
If ERR_COL = True Then GoTo ERREUR2
If ERR_NO_DONNEES = True Then GoTo ERREUR3
If ERR_LIGNE = True Then GoTo ERREUR4
If ERR_COMM = True Then GoTo ERREUR5
'Etape 2:
Call FILTRE
'Test si erreur lors du tri:
If ERR_DATE = True Then GoTo ERREUR6
If ERR_HEURE = True Then GoTo ERREUR7
'Etape 3:
Call MEF
'Test si erreur lors de la mise en forme:
If AVERT_STATUT = True Then CreateObject("Wscript.shell").Popup "Certaines données n'ont pu être déterminés", 3, "AVERTISSEMENT", vbExclamation
'Etape 4: on met en page si impression demandée:
Print_Result = "sans impression"
'Pause du chrono:
oPause
If MsgBox("Voulez-vous imprimer ?", vbYesNo + vbQuestion, "MESSAGE") = vbYes Then
'Redemarrage du chrono
oStart
UserForm1.Caption = "RO:Etape 4/5 Mise en page ..."
Call MEP
Print_Result = "avec impression"
CreateObject("Wscript.shell").Popup "Impression lancée...", 3, "INFORMATION", vbInformation
End If
'Etape 5: on sauvegarde si souhaité
Save_Result = "sans sauvegarde"
'Pause du chrono:
oPause
If MsgBox("Voulez-vous sauvegarder ?", vbYesNo + vbQuestion, "MESSAGE") = vbYes Then
'Redemarrage du chrono
oStart
UserForm1.Caption = "RO:Etape 5/5 Sauvegarde ..."
Call SAVE
Save_Result = "avec sauvegarde dans fichier:"
Else
INFO_SAVE = ""
End If
'Arret du chrono:
oStop
......
A la fin du code je récupère le temps total de traitement par la variable Total_Chrono (sans les attentes aux messages)... et a chaque fois j'ai rien...
😕😕😕😕😕
Dernière édition: