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 page

Quand 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.document

en 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 sub

Il 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,

Rechercher des sujets similaires à "loop entre page internet possible"