XL 2010 [RESOLU] Mémoire insuffisante chargement page IE en VBA

richert90

XLDnaute Occasionnel
Bonjour à tous,

J'ai une procédure en VBA qui me permet de récupérer le contenu d'une page Web (I.E) dans un fichier Excel.
Voici la procédure:

VB:
Public Sub lecture_page(lien_adresse As String)
    'fonction prenant en paramètre un lien internet
   
    Const genericFIC = "temp.xls" 'Nom du fichier Excel temporaire
   
    Dim fso, fil, inet
    Dim IE As InternetExplorer
    Dim boucle_lignes_fichier_temp As Integer
    Dim valtxt As String
   
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set inet = CreateObject("InternetExplorer.Application")
   
    inet.Visible = False
   
        valtxt = lien_adresse 'On récupère l'adresse du lien dans une variable
       
        'efface le fichier temporaire
        Kill "c:\temp\temp.xls"
           
        'lire page web
        inet.navigate (valtxt)
                 
        'temporisation pour lire la page : 10 secondes environ le temps de récupérer les données
        Application.Wait Now + TimeValue("00:00:10")
           
        'delai 'procedure delai
        Application.StatusBar = False
        Do While Not inet.readyState = 4
            ' Ne rien faire
        Loop
           
        'On écrit le contenu de la page Web dans notre fichier temporaire
        Set fil = fso.CreateTextFile("c:\temp\" & genericFIC)
        fil.Write (inet.document.body.innerHTML)
        fil.Close 'On ferme ce fichier temporaire
           
        'lecture du fichier xls
        'ouverture du fichier temp
        NOMFICH = "c:\temp\temp.xls" 'Chemin + nom du fichier temporaire
        Workbooks.Open Filename:=NOMFICH
         
        '--- A Partir d'ici on travaille sur le fichier . xls ----

        Dim valeur, dep
         
        Set ws2 = Worksheets(1)
        With ws2 'On travaille sur la feuille 1 de temp.xls
         
            For boucle_lignes_fichier_temp = 148 To 155 'Parcours les lignes du fichier "temp.xls" (sur la 1ère colonne)
                'On récupère la valeur dans le fichier temp.xls inscrite à la ligne qu'on boucle et à la colonne 1
                valeur = ws2.Cells(boucle_lignes_fichier_temp, 1)
                'On récupère le nb
                If valeur = "Nombre" Then
                    dep = boucle_lignes_fichier_temp
                    nb = ws2.Cells(dep, 2)
                    Exit For
                End If
            Next boucle_lignes_fichier_temp
                         
            'On ferme sans enregistrer le fichier .XLS
            ActiveWindow.Close SaveChanges:=False
         
        End With 'On a fini de travailler sur le fichier Excel temp.xls
           
End Sub

Cette procédure est appelée 50 fois environ dans un programme, car je récupère 50 données d'une page qui varie selon un paramètre. Sauf qu'au bout d'un moment, j'ai un message d'erreur sur la ligne "Set inet = CreateObject("InternetExplorer.Application")" en me disant "mémoire insuffisante". Je ne vois pas trop pourquoi alors que le programme a pu charger correctement les premières pages, il s'arrête à un moment. Est-ce qu'il manque un code à la fin pour fermer la page IE qu'on a ouverte? .. je sais pas trop

Merci de votre aide!
 

Lone-wolf

XLDnaute Barbatruc
Bonjour richert

Bienvenue sur XLD et bonne année:)

Il manque ceci après Next boucle_lignes_fichier_temp

Inet.Quit
Set Inet = Nothing

Met aussi après les Dim : Application.EnableEvents = False et avant En Sub Application.EnableEvents = True
 

richert90

XLDnaute Occasionnel
Bonsoir et meilleurs voeux également!
J'avais essayé en mettant
VB:
inet.quit
mais sans succès. Peut-être il manquait le
VB:
Set Inet = Nothing
^^.
Par contre j'avais peut-être trouvé une autre solution qui a l'air de fonctionner: c'est de déclarer le
VB:
Set inet = CreateObject("InternetExplorer.Application")
en dehors de la procédure, ce qui va permettre de travailler toujours sur le même objet (écraser à chaque appel de procédure) et pas d'en recréer un à chaque fois. Du coup avec ça je n'ai plus eu le message d'erreur "mémoire insuffisante".
Est-ce que vous pensez que c'est aussi une bonne solution ou pas?

Merci d'avance,
 

Discussions similaires

Réponses
8
Affichages
618