Récupérer le code HTML d'une page web multi-frame à partir d'Excel

bayeuxenbessin

XLDnaute Nouveau
Bonjour,

J'ai demandé il y a quelques mois s'il était possible de récupérer le contenu HTML d'une page web à partir d'excel.

A partir du code qui m'avait aimablement été fourni par MichelXLD j'avais écrit celui ci :

Sub RecuperationFichierHTML()
'****************************
'* Récupère le fichier HTML *
'* d'une page sur Internet *
'****************************
'Création des fichiers texte
For NumLigneAdresse = 2 To NombredeLigneAdresse

'Récupération des adresses
'AdresseEnCours = Cells(NumLigneAdresse, ColonneAdresseAdresse).Value
AdresseEnCours = "http://www.orange.fr"

Dim Http As Object
Set Http = CreateObject("WinHttp.WinHttpRequest.5.1")
Http.Open "GET", AdresseEnCours, False
Http.Send
Call BinaryToString(Http.ResponseBody, AdresseEnCours)
Set Http = Nothing
Next NumLigneAdresse

'Positionnement sur la feuille Menu
'Sheets("Menu").Select
End Sub
Function BinaryToString(Binary, AdresseEnCours, Optional CharSet = "")

'Déclaration des variables
Dim BinaryStream As Object

Set BinaryStream = CreateObject("ADODB.Stream")
NomDuFichier = "Recuperation.txt"

Chemin = ActiveWorkbook.Path
AnneeEnCours = Trim(Str(Year(Date)))
MoisEnCours = Trim(Str(Month(Date)))
LongueurMoisEnCours = Len(MoisEnCours)
If LongueurMoisEnCours = 1 Then
MoisEnCours = "0" & MoisEnCours
End If 'LongueurMoisEnCours = 1
JourEnCours = Trim(Str(Day(Date)))
HoraireEnCours = Str(Time)
HeureEnCours = Left(HoraireEnCours, 2)
MinuteEnCours = Mid(HoraireEnCours, 4, 2)
SecondeEnCours = Right(HoraireEnCours, 2)
NomDuFichier = Chemin & "\" & AnneeEnCours & MoisEnCours & JourEnCours & HeureEnCours & MinuteEnCours & SecondeEnCours & " Récuperation.txt"
'Récupération des données HTML
With BinaryStream
.Type = 1 ' (Type Binary)
.Open
.Write Binary
.Position = 0
.Type = 2 ' (Type Text)
.CharSet = "us-ascii"
' Specify charset For the source text (unicode) data.
If Len(CharSet) Then .CharSet = CharSet
BinaryToString = .ReadText
.WriteText BinaryToString
'.SaveToFile FileName, 2
.SaveToFile NomDuFichier, 2
'***********************
VariableTest = .ReadText
'***********************
End With
Set BinaryStream = Nothing
End Function

Ce code fonctionne parfaitement si la page ne possède pas de frame mais renvoi le contenu du premier frame s'il y en a plusieurs.

Quelqu'un saurait-il me dire ce qui devrait être rajouter et à quel endroit pour pointer sur le frame qui m'interesse (qui n'est pas forcement le premier).

En recherchant dans ce forum j'ai vu qu'une fonction inner(0) - avec 0 => N° du frame permettrait de résoudre ce problème mais je n'arrive pas à placer correctement ce paramètres sur le code que je possède déjà.

Si quelqu'un a une idée pour résoudre ce problème ?
 
Dernière édition:

macsscam

XLDnaute Junior
Re : Récupérer le code HTML d'une page web multi-frame à partir d'Excel

Bonjour,

Une autre solution pour récupérer le code HTML d'une page internet est celle-ci : (on remercie une fois de plus Michel)

Code:
Private Sub commandButton3_Click()
    'michelxld le 10.01.2005
    'nécéssite d'activer la référence Microsoft HTML Objects Library
    'nécéssite d'activer la référence Microsoft Internet Controls
    
    Dim IE As InternetExplorer
    Dim maPageHtml As HTMLDocument
    
    Set IE = CreateObject("internetExplorer.Application")
    IE.Visible = True
    IE.navigate ("www.exalead.fr")
        Do Until IE.readyState = READYSTATE_COMPLETE
        DoEvents
        Loop 'attend la fin du chargement pour continuer la procedure
    
    Set maPageHtml = IE.document
end sub

Tu peux adapter ce code pour récupérer les frames qui t'intéressent en ajoutant par exemple

Code:
Dim Helem As IHTMLElementCollection

(...)

Set Helem = maPageHtml.frames.Item(0).document

En faisant itérer le Item(0) jusqu'à tomber sur la frame qui t'intéresse.

Désolé, je ne suis pas assez connaisseur pour réussir à adapter ton code pour utiliser l'objet frames.


Bon courage,

--
Max
 

Statistiques des forums

Discussions
311 720
Messages
2 081 917
Membres
101 839
dernier inscrit
laurentEstrées