#If VBA7 Then
Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr) 'For 64 Bit Systems
Public Declare PtrSafe Function PostMessage Lib "user32" Alias "PostMessageA" ( _
ByVal hwnd As LongPtr, _
ByVal wMsg As Long, _
ByVal wParam As LongPtr, _
lParam As Any) As Long
#Else
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 'For 32 Bit Systems
#End If
Function InfosMeteo(Ville) As String
'Déclaration des variables
Dim IE As Object, IEDoc As Object, eventObj As Object
Dim Results, elem, id, I As Integer
Set IE = CreateObject("InternetExplorer.Application")
Forme.Lb_Result.Clear
On Error GoTo ErrHandler
IE.Navigate "https://www.infoclimat.fr/previsions-meteo/details/3013521/hennebont.html"
IE.Top = 0
IE.height = 1
IE.Visible = False
Do Until IE.ReadyState = READYSTATE_COMPLETE
Forme.Previs_meteo.Enabled = False
Sleep 50 ' tempo 50 ms
DoEvents
Loop
Set IEDoc = IE.Document
IEDoc.querySelector("a[href=""#city""]").Click
Sleep 1000: DoEvents
IEDoc.querySelector("#city-name-autocomp").Value = Ville
IEDoc.querySelector("#city-name-autocomp").Focus
Set eventObj = IE.Document.createEvent("KeyboardEvent")
eventObj.keyCode = 40 ' DOWN
eventObj.initEvent "keydown", True, False
IE.Document.querySelector("#city-name-autocomp").dispatchEvent eventObj
Sleep 1000
With IEDoc.querySelectorAll("#ul-response-autocomp > li > a")
If .Length = 0 Then
Forme.Lb_Result.AddItem "Pas de commune trouvée !"
IE.Quit
InfosMeteo = "Pas de commune trouvée !"
Exit Function
End If
For I = 0 To .Length - 1
Debug.Print .item(I).innerText
Forme.Lb_Result.AddItem .item(I).innerText
Next I
End With
Forme.Lb_Result.ListIndex = 0
Set elem = IE.Document.querySelector("#ul-response-autocomp > li > a")
Debug.Print elem.getAttribute("href")
arr = Split(elem.getAttribute("href"), "/")
id = arr(UBound(arr) - 1)
Debug.Print id
'Sleep 50
IE.Navigate "https://www.infoclimat.fr/api-previsions-meteo.html?id=" _
& id & "&cntry=FR"
Do Until IE.ReadyState = READYSTATE_COMPLETE
Sleep 50 ' tempo 50 ms
DoEvents
Loop
Set elem = IEDoc.querySelector("textarea.better-inputs")
InfosMeteo = elem.innerText
IE.Quit
Forme.Previs_meteo.Enabled = True
Exit Function
ErrHandler:
Forme.Lb_Result.AddItem "Erreur InfosMeteo ligne " & Erl: IE.Quit: Set IE = Nothing
End Function
Sub TestInfosMeteo()
' mettre en commentaire les instructions liées avec le formulaire dans InfosMeteo si formulaire pas utilisé
Debug.Print InfosMeteo("Vannes")
End Sub
Sub TestRecupCodeInsee()
Forme.Show 0
Forme.TB_Ville = "TestRecupCodeINSEE Rennes"
Forme.Lb_Result.Clear
Forme.MultiPage1.Value = 2
RecupCodeInsee "Rennes"
End Sub