Je te remercie d'avoir pris de ton temps pour tester.
Je n'ai pas d'erreur si j'utilise ton script et mon code épuré (j'ai modifié le premier $i en $j pour que la boucle fonctionne).
J'ai bien peur que cela soit la structure du site et les javascripts intégrés qui posent problème.
J'ai en effet un message qui apparaît au bout d'un certain temps qui me déconnecte du site.
De plus la page est insérée dans plusieurs cadres.
Un code plus complet pour voir comment je procède :
Code : Tout sélectionner
ProgressOn($g_eTitleApp, 'Récupération des tâches', '', Default, Default, $DLG_MOVEABLE)
Local $iLines = UBound($g_aLines) - 1
For $i = $ibegin To $iLines Step 2
;ConsoleWrite($g_aLines[$i] & @CRLF)
$res = _IEFormElementCheckBoxSelect($g_oForm, 0, $ePrefixe & $g_aLines[$i] & $eSuffixe, -1, "byIndex")
If @error Then
ConsoleWrite('Erreur on line ' & $i & @CRLF)
ReloadContent()
Sleep(3000)
$res = _IEFormElementCheckBoxSelect($g_oForm, 0, $ePrefixe & $g_aLines[$i] & $eSuffixe, -1, "byIndex")
If @error Then
ProgressOff()
FileDelete($eFileResume)
FileWrite($eFileResume, $i)
MsgBox($MB_SYSTEMMODAL + $MB_ICONERROR, $g_eTitleApp, 'Erreur sur la tâche ' & $g_aLines[$i] & ' :' & @CRLF & $g_aLines[$i + 1] & @CRLF & @CRLF & 'Veuillez relancer le programme.')
Exit
EndIf
EndIf
ProgressSet($i * 100 / $iLines, 'Tâche ' & $g_aLines[$i] & ' / ' & $g_aLines[$iLines - 1])
If $res = 1 Then FileWrite($hFile, $g_aLines[$i + 1] & @CRLF)
;Sleep(100)
Next
ProgressOff()
Code : Tout sélectionner
Func ReloadContent()
Local $oFrame0 = _IEFrameGetCollection($g_oIE, 0)
If @error Then Exit MsgBox($MB_SYSTEMMODAL + $MB_ICONERROR, $g_eTitleApp, 'Erreur de récupération du cadre 0 (' & @error & ')')
Local $oFrame1 = _IEFrameGetCollection($oFrame0, 0)
If @error Then Exit MsgBox($MB_SYSTEMMODAL + $MB_ICONERROR, $g_eTitleApp, 'Erreur de récupération du cadre 1 (' & @error & ')')
Local $oFrame = _IEFrameGetCollection($oFrame1, 1)
If @error Then Exit MsgBox($MB_SYSTEMMODAL + $MB_ICONERROR, $g_eTitleApp, 'Erreur de récupération du cadre (' & @error & ')')
$g_oForm = _IEFormGetCollection($oFrame, 0)
If @error Then Exit MsgBox($MB_SYSTEMMODAL + $MB_ICONERROR, $g_eTitleApp, 'Erreur de récupération du formulaire (' & @error & ')')
$g_oSelect = _IEFormElementGetObjByName($g_oForm, "m$c$gridTasks$p$drpPageSize")
If @error Then Exit MsgBox($MB_SYSTEMMODAL + $MB_ICONERROR, $g_eTitleApp, 'Erreur de récupération de la liste déroulante (' & @error & ')')
Local $sHTML = _IEBodyReadHTML($oFrame)
If @Compiled = 0 Then
FileDelete('_debug' & $g_iDebug & '.htm')
FileWrite('_debug' & $g_iDebug & '.htm', $sHTML)
$g_iDebug += 1
EndIf
$sPattern = '<label for="' & $ePrefixe & '(\d+)' & $eSuffixe & '">.*?onmouseout="UnTip\(\)">(.*?)</span></td><td class="wrap-normal">'
$g_aLines = StringRegExp($sHTML, $sPattern, 3)
If @error <> 0 Then Exit MsgBox($MB_SYSTEMMODAL + $MB_ICONERROR, $g_eTitleApp, "Le code du site a changé.")
EndFunc ;==>ReloadContent
J'ai rajouté FileWrite('_debug' & $g_iDebug & '.htm', $sHTML) de manière à conserver le code source après chaque ReloadContent.
C'est systématique.
Soit le programme récupère les checkbox SANS ERREUR.
Soit j'obtiens une erreur, le prog récupère le code HTML, j'obtiens une seconde erreur, le prog récupère le code HTML, mais impossible de récupérer l'état des checkbox suivantes.
J'ai comparé les 3 fichiers (avant erreur, après première erreur, après seconde erreur), le code est identique.