Recursivite avec on time
Bonjour,
je vous explique rapidement quel est le but de la macro excel.
Un logiciel exporte des informations dans différents fichiers excel toutes les 30 secondes. Le but de la macro est de compiler les informations pour pouvoir conserver un historique des valeurs exportées.
Mon programme fonctionne bien mais arrivé a un nombre d'itération de la fonction ( environ 3000 ) la macro s’arrête d'elle même.
La fonction en question :
Function addData(iSonde As Integer)
Dim book As Workbook
Dim iLastLane As Integer
Application.ScreenUpdating = False
If Sonde.aSonde(iSonde).Statut = 1 Then
If openFileName(iSonde) = "noFile" Then
errorOnProcess (iSonde)
ElseIf openFileName(iSonde) = "tooMuchFile" Then
errorOnProcess (iSonde)
Else
On Error Resume Next
Set book = Application.Workbooks.Open(openFileName(iSonde))
If Err.Number <> 0 Then
errorOnProcess (iSonde)
Else
iLastLane = aSonde(iSonde).ResultFile.worksheets(1).Range("A" & Rows.Count).End(xlUp).Row + 1
aSonde(iSonde).ResultFile.worksheets(1).Cells(iLastLane, 1) = Left(CStr(book.worksheets(1).Cells(2, 1)), InStr(1, CStr(book.worksheets(1).Cells(2, 1)), ";") - 1)
aSonde(iSonde).ResultFile.worksheets(1).Cells(iLastLane, 2) = Left(CStr(book.worksheets(1).Cells(5, 1)), InStr(1, book.worksheets(1).Cells(5, 1), ";") - 1)
aSonde(iSonde).ResultFile.worksheets(1).Cells(iLastLane, 3) = Left(CStr(book.worksheets(1).Cells(10, 1)), InStr(1, book.worksheets(1).Cells(10, 1), ";") - 1)
For i = 1 To 3
void = ApiDesignSheet.drawBorderLight((aSonde(iSonde).ResultFile.worksheets(1).Cells(iLastLane, i)))
Next i
book.Close
Application.DisplayAlerts = False
aSonde(iSonde).ResultFile.SaveAs (Sonde.fileName(iSonde, Sonde.aSonde(iSonde).reference))
Application.DisplayAlerts = True
dDate = Now + TimeValue(sDelai)
Sonde.defineVariance (iSonde)
Select Case iSonde
Case 0
Application.OnTime dDate, "addData0"
Case 1
Application.OnTime dDate, "addData1"
Case 2
Application.OnTime dDate, "addData2"
Case 3
Application.OnTime dDate, "addData3"
Case 4
Application.OnTime dDate, "addData4"
Case 5
Application.OnTime dDate, "addData5"
Case 6
Application.OnTime dDate, "addData6"
Case 7
Application.OnTime dDate, "addData7"
Case 8
Application.OnTime dDate, "addData8"
Case 9
Application.OnTime dDate, "addData9"
Case 10
Application.OnTime dDate, "addData10"
Case 11
Application.OnTime dDate, "addData11"
Case 12
Application.OnTime dDate, "addData12"
Case 13
Application.OnTime dDate, "addData13"
Case 14
Application.OnTime dDate, "addData14"
Case 15
Application.OnTime dDate, "addData15"
Case 16
Application.OnTime dDate, "addData16"
Case 17
Application.OnTime dDate, "addData17"
Case 18
Application.OnTime dDate, "addData18"
Case 19
Application.OnTime dDate, "addData19"
Case 20
Application.OnTime dDate, "addData20"
Case 21
Application.OnTime dDate, "addData21"
Case 22
Application.OnTime dDate, "addData22"
Case 23
Application.OnTime dDate, "addData23"
Case 24
Application.OnTime dDate, "addData24"
Case Else
End Select
End If
End If
End If
Application.ScreenUpdating = True
End Function
addDataxx appelle tout simplement addData(xx)
Je suppose que c'est une sorte de sécurité pour se protéger d'une boucle infinie. Avez-vous une idée pour pouvoir dépasser cette valeur ? le processus doit être continu sur une période d'un mois.
D'avance merci pour vos réponses.
Personne n'a été confronté à ce problème ?
Le problème est assez dérangeant car nous perdons assez souvent des informations suite à ce problème.