Bonjour,
J'utilise excel pour contrôler Internet Explorer.
J'ouvre bien ma page, je navigue dedans pour remplir les cases qui vont bien, je clique sur un bouton pour calculer un résultat. Là, une nouvelle page s'ouvre avec mes résultat.
Comme j'ai plusieurs pages ouvertes je recherche celle qui m'intéresse et copie son code source pour traitement ultérieur.
Ensuite je ferme toutes les pages.
Problèmes:
- Le code source de la page est bien affectée à la variable Resultat quand je tourne en débug, mais si je met un point d'arrêt après l'affectation de la variable, je me rend compte qu'elle est vide.
- La methode IE.Quit renvoie apparemment une erreur qui semble finir prématurément ma boucle For, elle ne ferme donc qu'une page web, pas les autres.
- Pour la méthode MiseEnForme, j'ai du déclarer ma variable et tant que Variant ce j'obtenais l'erreur "Type d'argument Byref incompatible" en la déclarant comme une String...
Avec vous des idées des erreurs commises?
Merci. Cordialement,
Pierre
Voici le source
J'utilise excel pour contrôler Internet Explorer.
J'ouvre bien ma page, je navigue dedans pour remplir les cases qui vont bien, je clique sur un bouton pour calculer un résultat. Là, une nouvelle page s'ouvre avec mes résultat.
Comme j'ai plusieurs pages ouvertes je recherche celle qui m'intéresse et copie son code source pour traitement ultérieur.
Ensuite je ferme toutes les pages.
Problèmes:
- Le code source de la page est bien affectée à la variable Resultat quand je tourne en débug, mais si je met un point d'arrêt après l'affectation de la variable, je me rend compte qu'elle est vide.
- La methode IE.Quit renvoie apparemment une erreur qui semble finir prématurément ma boucle For, elle ne ferme donc qu'une page web, pas les autres.
- Pour la méthode MiseEnForme, j'ai du déclarer ma variable et tant que Variant ce j'obtenais l'erreur "Type d'argument Byref incompatible" en la déclarant comme une String...
Avec vous des idées des erreurs commises?
Merci. Cordialement,
Pierre
Voici le source
Code:
Sub BtRecherche_Click()
Application.ScreenUpdating = False
AjoutReferences
Dim i As Integer
Dim Resultat As String
Dim ville As String
Dim appIE As InternetExplorer
Dim HTMLDoc As HTMLDocument
Dim oHTML_Element As IHTMLElement
Dim winShell As New ShellWindows
Dim sURL As String
Set appIE = New InternetExplorer
'Ancienne adresse
'sURL = "http://re.jrc.ec.europa.eu/pvgis/apps3/pvest.php?lang=fr&map=europe"
'Nouvelle adresse
sURL = "http://re.jrc.ec.europa.eu/pvgis/apps4/pvest.php"
appIE.Silent = True
appIE.Navigate sURL
appIE.Visible = True
Do 'Attend que la page soit bien chargée
Loop Until appIE.ReadyState = READYSTATE_COMPLETE
Set HTMLDoc = appIE.Document
' Liste des objets présents sur la page
i = 0
For Each oHTML_Element In HTMLDoc.getElementsByTagName("input")
Range("A" & 10 + i) = oHTML_Element.Type
Range("B" & 10 + i) = oHTML_Element.ID
Range("C" & 10 + i) = oHTML_Element.Title
Range("D" & 10 + i) = oHTML_Element.ClassName 'Tagname = "INPUT"
Range("E" & 10 + i) = oHTML_Element.getAttribute("Name")
i = i + 1
Next
Range("A" & 10 + i) = "terminé"
'Recherche la barre de texte et ecris l'adresse
For Each oHTML_Element In HTMLDoc.getElementsByTagName("input")
If oHTML_Element.getAttribute("name") = "address" Then oHTML_Element.setAttribute "value", "rouen": Exit For
Next
'Recherche du boutton "Search" et clic
For Each oHTML_Element In HTMLDoc.getElementsByTagName("input")
If oHTML_Element.getAttribute("value") = "Search" Then oHTML_Element.Click: Exit For
Next
Do 'Attend que la page soit bien chargée
Loop Until appIE.ReadyState = READYSTATE_COMPLETE
'Clic sur les CheckBox pour choisir les options
For Each oHTML_Element In HTMLDoc.getElementsByTagName("input")
If oHTML_Element.ID = "optrad" Then oHTML_Element.Click
If oHTML_Element.ID = "selectrad" Then oHTML_Element.Click
If oHTML_Element.ID = "optincl" Then oHTML_Element.Click
If oHTML_Element.ID = "degreedays" Then oHTML_Element.Click
Next
'Recherche du bouton "Calculer" et clic
For Each oHTML_Element In HTMLDoc.getElementsByTagName("input")
If oHTML_Element.ID = "MRchoicesubmit" Then oHTML_Element.Click: Exit For
Next
Do 'Attend que la page soit ouverte
Loop Until appIE.ReadyState = READYSTATE_COMPLETE
'Dim Cadre As Frame
'Recherche la bonne page et récupère les données
For Each appIE In winShell
If Right(appIE.LocationURL, 10) = "MRcalc.php" Then
appIE.Visible = True
Set HTMLDoc = appIE.Document
Resultat = HTMLDoc.documentElement.innerHTML
End If
Next appIE
ville = "Rouen"
'Mise en forme des données
MiseEnForme Resultat', ville
Range("A100") = Resultat
'Fermeture des fenetres
For Each appIE In winShell
If Left(appIE.LocationURL, 4) = "http" Then appIE.Quit
Next appIE
'appIE.Quit 'ferme les fenetres
Set appIE = Nothing
Application.ScreenUpdating = True
End Sub
'Ajout les références nécéssaires à l'utilisation de la macro
Sub AjoutReferences()
On Error GoTo Handler
ThisWorkbook.VBProject.References.AddFromFile ("C:\Windows\System32\mshtml.tlb") 'Microsoft HTML Object Library
ThisWorkbook.VBProject.References.AddFromFile ("C:\Windows\System32\shdocvw.dll") 'Microsoft internet Controls
Handler:
If Err.Number = 32813 Then
Else: MsgBox Err.Number & vbLf & Err.Description
End If
End Sub
Sub MiseEnForme(Buffer As Variant) ', ville As String)
Dim Tableau As String
Dim Longitude, Latitude As String
Dim Altiture, Inclinaison, Pombrage As Double
Dim Deb, Fin As Integer
'Recherche de la position
Deb = InStr(1, Buffer, "Location:")
Fin = InStr(Deb, Buffer, ",")
Latitude = Mid(Buffer, Deb + 10, Fin - Deb)
Deb = Fin
Fin = InStr(Deb + 1, Buffer, ",")
Longitude = Mid(Buffer, Deb, Fin - Deb)
End Sub