Gestion temps d'exécution

cs_rywan Messages postés 4 Date d'inscription jeudi 19 août 2004 Statut Membre Dernière intervention 6 juillet 2006 - 4 juil. 2006 à 12:06
cs_rywan Messages postés 4 Date d'inscription jeudi 19 août 2004 Statut Membre Dernière intervention 6 juillet 2006 - 6 juil. 2006 à 09:01
Bonjour à tous,
Je cherche un code me permettant de gérer le temps d'exécution d'une fonction où je génère un doc word. Si la génération de mon document prend plus de temps que le temps alloué, j'arrête le traitement et ferme Word. Cela me servira à ne pas bloquer ma file d'attente si erreur.

Merci d'avance pour votre aide
Greg

6 réponses

cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
4 juil. 2006 à 12:25
 Bonjour ,

Au début du script, il suffit de déclarer une variable
du genre:
Dim debut
debut = Now

Puis pour tester le temps écoulé, il faut créer une variable temps_ecoule et
comparer les 2 variables (debut et temps_ecoule).

jean-marc

Ci-dessous des exemples de DateDiff:

Dim Saisie, DateEntree, DateSortie, Msg, n, hh, mn


Saisie = InputBox(vbCrLf&vbCrLf&vbCrLf&vbCrLf&"Saisir votre date sous la forme:"_
&vbCrLf&vbCrLf&"jj/mm/aaaa hh:mm - jj/mm/aaaa hh:mm"&vbCrLf&"Remplacer les 5 derniers caractères hh:mm",_
"Calcul d'intervalle de temps en minutes", Left(Now, 16) & " - " & Left(Now, 10) & " 00:15")


DateEntree = Mid(Saisie, 1, 16) & ":00"
DateSortie = Mid(Saisie, 20, 16) & ":00"


' y = DateDiff("yyyy", DateSortie, DateEntree) ' aaaa
' m = DateDiff("m", DateSortie, DateEntree)    ' mm
' d  = DateDiff("y", DateSortie, DateEntree)   ' jj
' h = DateDiff("h", DateSortie, DateEntree)    ' hh
' n = DateDiff("n", DateSortie, DateEntree)    ' mn    
' s = DateDiff("s", DateSortie, DateEntree)    ' ss


n = DateDiff("n" , DateSortie, DateEntree)


Temps = n * 60  'temps en secondes


hh = Temps / 3600
mn = (hh - Int(hh)) * 60


If hh >= 24 Then
jj = Int(hh / 24)
hh = hh - jj * 24
End If


Conversion = Int(jj) & " j " & Int(hh) & " h " & CInt(mn) & " mn"
Msg = "Comparaison de dates du " & DateSortie & " au " & DateEntree &vbCrLf&vbCrLf
Msg = Msg & "La différence entre les 2 dates est : " &vbCrLf&vbCrLMsg Msg & "Nombre total en minutes " & n &vbCrLf&vbCrLf
MsgBox s & " " & Msg &vbCrLf& " soit: " & Conversion,_
       vbApplicationModal + vbDefaultButton1 + vbInformation + vbOKOnly, "Résultat"


If n =0 Then
   MsgBox "Les dates à comparer sont identhiques"
   InputBox Saisie , "Calcul d'intervalle de temps en minutes", Left(Now, 16) &" - " & Left(Now, 11) & " 00:00"', Left(Now, 16) & " - " & Left(Now, 10) & " 00:00", "Calcul d'intervalle de temps en minutes", Left(Now, 16) & " - " & Left(Now, 11) & " 00:00"
   Else
   Msg = "Comparaison de dates du " & DateSortie & " au " & DateEntree &vbCrLf&vbCrLf
   Msg = Msg & "La différence entre les 2 dates est : " &vbCrLf&vbCrLf   Msg Msg & "Nombre total en minutes " & n &vbCrLf&vbCrLf   Msg Msg & "Nombre de jours   " & Int(jj)&vbCrLf&vbCrLf    Msg Msg & "Nombre de heures  " & Int(hh)&vbCrLf&vbCrLf    Msg Msg & "Nombre de minutes " & CInt(mn)
MsgBox Msg '& "La différence entre les 2 dates est : " &vbCrLf&vbCrLf& Msg  
End If
0
cs_rywan Messages postés 4 Date d'inscription jeudi 19 août 2004 Statut Membre Dernière intervention 6 juillet 2006
4 juil. 2006 à 12:37
Merci pour la rapidité de la réponse, mais la réponse ne solutionne pas mon problème.
Je ne veux pas connaitre le temps entre le début et la fin de mon action. Je veux, que si mon action de génération dépasse le temps alloué, stopper mon action.

Encore merci pour votre aide.

Le code est le suivant

....
E21_Genere(oRs, oWord, NOM_FICHIER)
....

Function E21_Genere(oRs As ADODB.Recordset, oWord As Object, docName As String)



    Dim oBk As Object




On Error GoTo Erreur




    E21_Genere = True
   
    oWord.Documents.Add Template:=gStrRepertoireModeleAgence & "E21.dot", NewTemplate:=False, DocumentType:=0
    ' On va commencer à ajouter les valeurs au signet
    Set oBk = oWord.ActiveDocument.BookMarks
   
    oBk.Item("VILLE_AGENCE").Range.Fields.Item(1).Result.Text = NullDonneBlanc(oRs.Fields("VILLE_AGENCE"))
    oBk.Item("DATE_EDITION").Range.Fields.Item(1).Result.Text = NullDonneBlanc(Format(oRs.Fields("DATE_EDITION"), "dd mmmm yyyy"))
        If (NullDonneZero(oRs.Fields("PRIX2")) <> "0") Then
        oBk.Item("PRIX2").Range.Fields.Item(1).Result.Text = " Nous tenons à vous rappeler que cette visite de contrôle sera à votre charge au coût de " & NullDonneBlanc(oRs.Fields("PRIX2")) & " ? TTC. "
    End If




    oWord.ActiveDocument.SaveAs FileName:=docName, FileFormat:=wdFormatDocument, Password:="", AddToRecentFiles:=False, WritePassword:=""
    oWord.ActiveDocument.Close
   
    Exit Function
   
Erreur:
    E21_Genere = False
    gstrMsgErreur = "E21 : " & Left(Err.Description, 240)
    Exit Function
End Function
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
4 juil. 2006 à 23:50
Salut,

Dim TimerDebut as Long, TimerFin As Long

TimerDebut = Timer

' ton code

TimerFin = Timer


If (TimerFin - TimerDebut) > 15 Then
MsgBox "Le temps d'execution est supérieur à 15 secondes"
End If

@++

--Mortalino--
Le Mystérieux Chevalier "Provençal, le Gaulois"
N'oubliez pas de lire le règlement !
0
cs_rywan Messages postés 4 Date d'inscription jeudi 19 août 2004 Statut Membre Dernière intervention 6 juillet 2006
5 juil. 2006 à 09:36
Bonjour Mortalino,
Je t'ai fait travaillé à 23h50, désolé .

Mais ta solution ne me sort pas de mon action si la génération de mon document prend plus de 15 secondes. Elle constate seulement le temps que j'ai mis pour la réaliser. Mon souhait est d'arrêter la tentative de génération du document si cela prend plus de 15 secondes.

Merci d'avance pour ton aide.
Greg
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
5 juil. 2006 à 20:25
Salut,

T'inquiète pas, en ce moment je travaille de nuit.

Pour ton problème, je n'y avais pas pensé mais met un contrôle Timer.
Son intervall sera de 1000 ms et un flag qui arrete l'exécution au bout de x secondes.

@++

--Mortalino--
Le Mystérieux Chevalier "Provençal, le Gaulois"
N'oubliez pas de lire le règlement !
0
cs_rywan Messages postés 4 Date d'inscription jeudi 19 août 2004 Statut Membre Dernière intervention 6 juillet 2006
6 juil. 2006 à 09:01
Bonjour Mortalino,
J'ai déjà essayé. Le fait d'ouvrir un processus Word rend inactif le timer. Cela ne marche pas.
As-tu d'autres idées please?
0
Rejoignez-nous