OVH Cloud OVH Cloud

Obtenir le Code sourse d'une page Web en VBA

28 réponses
Avatar
Fredo P.
Bonjour
Tout est dans le titre
Est qu'il est possible de définir puis copier le code source d'une page Web.

10 réponses

1 2 3
Avatar
Fredo P.
"MichD" a écrit dans le message de news:
jmc1ke$g1t$
Dans la fenêtre de l'éditeur de code, barre des menus / outils / référence
/
décoche la bibliothèque suivante si elle est cochée : 'Microsoft Internet
controls"


Elle n'est pas
Le mieux teste cette procédure en utilisant un classeur tout neuf.

Il y a peut-être des nuances selon les différentes versions, mais je ne
saurais te dire.
Tu devrais tenter ta chance sur des forums spécialisés sur cette
application en
particulier.

Désolé.


--
MichD
---------------------------------------------------------------


Avatar
Fredo P.
à propos de l'erreur 7 , je suis tombé sur ça
http://www.vbfrance.com/codes/OBTENIR-CODE-HTML-PAGE-WEB-FACILEMENT_6751.aspx

"Gloops" a écrit dans le message de news:
jmcfpl$ug7$
Gloops a écrit, le 14/04/2012 20:25 :
IE.Navigate2 "google.html"
MsgBox "Navigation effectuée"



Pendant que je testais ça, Yopop proposait, à la place de ce message :

Do Until IE.readystate = 4
DoEvents
Loop
Avatar
Fredo P.
J'ai manqué de persévérance pour ce truc qui m'a paru un peu trop ardu pour
mes neurones
Que ce soit avec
Do Until IE.readystate = 4
DoEvents
Loop

ou avec

While IE.Busy
DoEvents
Wend
rien ne passe, ou alors, je manque de patience.

===== Début module ===== Option Explicit

Dim L As Integer

Public Sub TestHtml()
Dim IE As New InternetExplorer
Dim IEDoc As HTMLDocument
Dim CodeSource As String
Dim C As Range
Dim N As Integer
Dim Elt As HTMLDTElement
On Error GoTo ErrTestHtml
DoEvents
Range("A1") = ""
IE.Navigate2 "google.html"
MsgBox "Navigation effectuée"
Set IEDoc = IE.document
Debug.Print "IE"
CodeSource = IEDoc.body.innerHTML
Debug.Print CodeSource
MsgBox Len(CodeSource)
'Range("A1") = CodeSource
L = 1
Set Elt = IEDoc.body
TraitementElement Elt
Exit Sub
ErrTestHtml:
MsgBox Err.Description, , Err.Number
Resume Next
End Sub

Private Sub TraitementElement(ByVal E As HTMLDTElement)
Dim N As Integer
Dim C As Range
On Error GoTo ErrTraitementElement
L = L + 1
Set C = Cells(L, 2)
C = E.outerHTML
For N = 0 To E.ChildNodes.Length - 1
TraitementElement E.ChildNodes(N)
Next
Exit Sub
ErrTraitementElement:
Cells(L, 3) = Err.Description
Resume Next
End Sub

==== Fin module =====
Avatar
Gloops
Et avec un MsgBox ?
C'est moins élégant, mais ça marche.

As-tu vérifié ce que ça donne en pas à pas ?





_______________________________________
Fredo P. a écrit, le 16/04/2012 00:38 :
J'ai manqué de persévérance pour ce truc qui m'a paru un peu trop ardu pour
mes neurones
Que ce soit avec
Do Until IE.readystate = 4
DoEvents
Loop

ou avec

While IE.Busy
DoEvents
Wend
rien ne passe, ou alors, je manque de patience.

Avatar
MichD
Bonjour,

Avec ceci, tu devrais pouvoir importer dans Excel tout le code source d'une adresse
Internet.

Copie ce qui suit dans un module standard :

Le code suivant ne requiert aucune addition d'une quelconque référence à ton projet VBA.

'-------------------------------------
Sub test()
Dim CodeSource As String, IE As Object
Dim TempFile As String
Set IE = CreateObject("InternetExplorer.Application")

TempFile = "c:MichD.txt"

IE.Visible = False ' Ou True
IE.Navigate
URL:="http://www.tierce-magazine.com/accueil/pid107-les-reunions-du-jour.html?day=tomorrow"

Do Until IE.readystate = 4
DoEvents
Loop

CodeSource = IE.Document.body.innerHTML

Open TempFile For Output As #1
Print #1, CodeSource
Close #1

Open TempFile For Input As #1
Do While Not EOF(1)
Input #1, LaLigne
A = A + 1
Range("A" & A) = LaLigne
Loop
Close #1

Kill TempFile
IE.Quit

End Sub
'-------------------------------------


--
MichD
---------------------------------------------------------------
Avatar
Gloops
Fredo P. a écrit, le 16/04/2012 00:38 :
J'ai manqué de persévérance pour ce truc qui m'a paru un peu trop ardu pour
mes neurones
Que ce soit avec
Do Until IE.readystate = 4
DoEvents
Loop

ou avec

While IE.Busy
DoEvents
Wend
rien ne passe, ou alors, je manque de patience.



Je viens de faire un essai, avec IE.Busy j'ai toujours l'erreur, en
revanche avec Do Until IE.ReadyState = READYSTATE_COMPLETE ça s'exé cute
proprement.

Et j'ai bien vérifié que READYSTATE_COMPLETE vaut 4.

Il y a 5 valeurs, pour ReadyState. Je ne serais pas étonné que IE.Bus y
corresponde à certaines de ces valeurs, mais qu'il en reste d'autres qu e
READYSTATE_COMPLETE dans celles qui ne sont pas concernées.

Maintenant, si le test avec IE.Busy est satisfaisant sur certaines
machines et pas sur d'autres, il est possible qu'il en aille de même de
celui avec ReadyState.

Ajouter une temporisation, après ?

Dim Dt As Date
Dt = Now + TimeValue("00:00:02")
Application.Wait Dt


Oui enfin c'est histoire d'essayer quelque chose ...

Et les deux secondes, c'est une valeur imaginée à la louche.
ça doit couvrir le temps entre le moment où IE retourne la valeur
attendue, et celui où il est effectivement en mesure de répondre à la
sollicitation pour retourner la source de la page.
Il faut des mecs balaises pour dire de quoi ça peut dépendre, en
revanche pour essayer de bricoler un truc qui puisse attendre le temps
qu'il faut, j'imagine que ça peut représenter plus de monde.
Quoi qu'on n'est pas au bout.
Avatar
Gloops
Gloops a écrit, le 16/04/2012 13:59 :
Maintenant, si le test avec IE.Busy est satisfaisant sur certaines
machines et pas sur d'autres, il est possible qu'il en aille de même de
celui avec ReadyState.



A propos, quelle est la taille de CodeSource, finalement ?
Avatar
Fredo P.
"MichD" a écrit dans le message de news:
jmh196$vhk$
Bonjour,

Avec ceci, tu devrais pouvoir importer dans Excel tout le code source
d'une adresse
Internet.



Bonjour MichDenis
Alors ça, tu remontes dans mon estime, c'est nickel!
On peut avoir la méthode de recherche ou connaitre la source?
si c'est pas secret bien sur!
Ou est ce par simple intuition?

Copie ce qui suit dans un module standard :

Le code suivant ne requiert aucune addition d'une quelconque référence à
ton projet VBA.

'-------------------------------------
Sub test()
Dim CodeSource As String, IE As Object
Dim TempFile As String
Set IE = CreateObject("InternetExplorer.Application")

TempFile = "c:MichD.txt"

IE.Visible = False ' Ou True
IE.Navigate
URL:="http://www.tierce-magazine.com/accueil/pid107-les-reunions-du-jour.html?day=tomorrow"

Do Until IE.readystate = 4
DoEvents
Loop

CodeSource = IE.Document.body.innerHTML

Open TempFile For Output As #1
Print #1, CodeSource
Close #1

Open TempFile For Input As #1
Do While Not EOF(1)
Input #1, LaLigne
A = A + 1
Range("A" & A) = LaLigne
Loop
Close #1

Kill TempFile
IE.Quit

End Sub
'-------------------------------------


--
MichD
---------------------------------------------------------------



Avatar
MichD
| Alors ça, tu remontes dans mon estime, c'est nickel!
| On peut avoir la méthode de recherche ou connaitre la source?
| si c'est pas secret bien sur!
| Ou est ce par simple intuition?

Je n'ai pas compris ta remarque. Il n'y a rien de secret, tout est dans la procédure!
Avatar
Fredo P.
Ce n'est pas sur la procédure qu'est posée la question mais sur comment tu
as pu trouvé cette procédure, si il ya eu une recherche sur la toile ou une
pure création avec pour seul soutient tes connaissances ou encore si la
recherche eu été sur librairie ou autre, voila c'est pas plus curieux que
ça.
Ceci pour peut être pouvoir moi même avoir la ressource de trouver sans être
obligé de venir sur mpfe
"MichD" a écrit dans le message de news:
jmi3im$ugc$
| Alors ça, tu remontes dans mon estime, c'est nickel!
| On peut avoir la méthode de recherche ou connaitre la source?
| si c'est pas secret bien sur!
| Ou est ce par simple intuition?

Je n'ai pas compris ta remarque. Il n'y a rien de secret, tout est dans la
procédure!

1 2 3