Loop entre plusieurs page internet ? Possible ?
Bonjour,
Voila mon code a pour but d'extraire une longue base de donné disponible sur un intranet de la manière suivante :
1.Je navigue manuellement jusqu'à la page voulu et j'active la macro
2. La macro détecte internet explorer, prend la première ligne, copie les informations demandées
3. La macro clique sur un lien de la ligne afin d'avoir accès a un second tableau dont elle doit extraire certaine information.
4. La macro clique sur un bouton "Annuler" afin de revenir a la page précédente.
3. Sur la page précédente la macro ne passe pas à la deuxième ligne. J'ai un message permission refusée : Erreur 70
Set iXdoc = IEX.document
Set IMG = iXdoc.getElementsByTagName("tr")
'Le Loop qui pose problème a partir de la deuxième fois
For Each IMG2 In IMG
If Left(IMG2.innerHTML, 17) = "<td headers=" & Chr(34) & "Chek" Then
Set IMG2td = IMG2.getElementsByTagName("td")
Set IMG2a = IMG2.getElementsByTagName("a")
'Loop au travers de la première ligne page
For Each IMG22 In IMG2td
If IMG22.headers = "ID" Then
aaa = IMG22.innerHTML
End If
If IMG22.headers = "SEC" Then
bbb = IMG22.innerHTML
End If
If IMG22.headers = "CLI" Then
ccc = IMG22.innerHTML
End If
Next IMG22
'J'effectue le changement de page
For Each link In IMG2a
If link.innerHTML = "Emp" Then
link.Click
Do While IEX.Busy Or IEX.ReadyState <> 4
DoEvents
Loop
Exit For
End If
Next link
Set iXdoc = IEX.document
Set IMGemp = iXdoc.getElementsByTagName("tr")
Set IMGempa = iXdoc.getElementsByTagName("a")
'Loop dans la deuxième page
For Each IMG3 In IMGemp
If IMG3.className = "highlight-row" Then
Set IMG3td = IMG3.getElementsByTagName("td")
'Loop dans chaque ligne de la deuxième page
For Each IMG33 In IMG3td
If IMG33.headers = "Emp" Then
ddd = IMG33.innerHTML
End If
If IMG33.headers = "Fac" Then
eee = IMG33.innerHTML
End If
If IMG33.headers = "Sta" Then
fff = IMG33.innerHTML
End If
Next IMG33
'MsgBox t
End If
Next IMG3
'Retour sur la première page
For Each link In IMGempa
If link.innerHTML = "Annuler" Then
link.Click
Do While IEX.Busy Or IEX.ReadyState <> 4
DoEvents
Loop
Exit For
End If
Next link
End If
Next IMG2
'Devrait recommencer sur la première pageQuand arrive le moment du Next IMG2 et que la page reviens en arrière le problème survient.
Chose qui n'arrive pas si je ne fais pas de changement de page.
J'ai pu voir que IMG et IMG2 perdaient leurs informations lors du changement de page alors j'ai essayé de les passer en global mais le problème reste identique.
Merci d'avance
Bonjour sartou,
Voici un essai sans grande conviction en ajoutant
Set iXdoc = IEX.documenten toute fin de boucle.
Sub code()
'debut code
Set iXdoc = IEX.document
Set IMG = iXdoc.getElementsByTagName("tr")
'Le Loop qui pose problème a partir de la deuxième fois
For Each IMG2 In IMG
If Left(IMG2.innerHTML, 17) = "<td headers=" & Chr(34) & "Chek" Then
Set IMG2td = IMG2.getElementsByTagName("td")
Set IMG2a = IMG2.getElementsByTagName("a")
'Loop au travers de la première ligne page
For Each IMG22 In IMG2td
select case IMG22.headers
case "ID": aaa = IMG22.innerHTML
case "SEC": bbb = IMG22.innerHTML
case "CLI": ccc = IMG22.innerHTML
end select
Next IMG22
'J'effectue le changement de page
For Each link In IMG2a
If link.innerHTML = "Emp" Then
link.Click
Do While IEX.Busy Or IEX.ReadyState <> 4
DoEvents
Loop
Exit For
End If
Next link
Set iXdoc = IEX.document
Set IMGemp = iXdoc.getElementsByTagName("tr")
Set IMGempa = iXdoc.getElementsByTagName("a")
'Loop dans la deuxième page
For Each IMG3 In IMGemp
If IMG3.className = "highlight-row" Then
Set IMG3td = IMG3.getElementsByTagName("td")
'Loop dans chaque ligne de la deuxième page
For Each IMG33 In IMG3td
select case IMG33.headers
case "Emp": ddd = IMG33.innerHTML
case "Fac": eee = IMG33.innerHTML
case "Sta": fff = IMG33.innerHTML
End select
Next IMG33
End If
Next IMG3
'Retour sur la première page
For Each link In IMGempa
If link.innerHTML = "Annuler" Then
link.Click
Do While IEX.Busy Or IEX.ReadyState <> 4
DoEvents
Loop
Exit For
End If
Next link
End If
Set iXdoc = IEX.document
Next IMG2
'Devrait recommencer sur la première page
end subIl faudrait que tu puisses regarder tes variables en exécutant le code au pas à pas et notamment la variable IMG. Passe-t-elle à Nothing lors du changement de page ?
Si c'est le cas, il faudrait peut-être privilégier une structure :
do while i < IMG.items.count
set IMG2 = IMG.items(i)
'tout le code au sein de la boucle sans modif
Set iXdoc = IEX.document
Set IMG = iXdoc.getElementsByTagName("tr")
i = i + 1
loopà la place du for principal.
Cdlt,
IMG passé en ''aucune variable'' effectivement. Tout marche parfaitement, j'ai juste du modifier la boucle par :
do while i < IMG.length
set IMG2 = IMG.item(i)Merci encore ! Et merci pour la simplification du code aussi :P
Salut sartou,
Super ! Merci pour ce retour et d'avoir pensé à poster les corrections !
Bonne soirée,