XL 2021 Récupérer info météo

Nicolas JACQUIN

XLDnaute Impliqué
Supporter XLD
Bonjour à tous et toutes,

En complément de mon "Calendrier, éphéméride, lunaison et marée V2.2", je pensais rajouter un module météo dans le style

Capture d’écran 2024-10-01 164305.jpg


ou au mieux ça


Capture d’écran 2024-10-01 164408.jpg


J'ai trouvé beaucoup de chose mais j'y arrive pas du tout
J'ai essayé sur ChatGPT mais ça me renvois systématiquement sur "api.openweathermap" qui demande une inscription obligatoirement pour avoir une clé d'enregistrement, mais pour moi ce n'est pas le but.

Je suis loin d'êtres un champion, très loin même, mais je n'arrive pas à trouver une solution satisfaisante à ce que je souhaite.
Je joint un fichier qui ne sert pas trop à grand chose, mais c'est loin d'être le résultat voulu, juste pour dire que j'ai quand même cherché ;) ;)

Si vous avez de meilleurs solutions, merci à vous tous.

Nicolas.
 

Pièces jointes

  • Météo.xlsm
    77.8 KB · Affichages: 22

Nicolas JACQUIN

XLDnaute Impliqué
Supporter XLD
Hello,
A mon avis il manque un manque un morceau de phrase peut être ? :
Est ce que tu aurais moyen lignes par lignes d'expliquer ton code quand même
Si c'est le cas donne moi le code que tu veux que j'explique.
Ami calmant, J.P

Re,

VB:
#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

ce code là, s'il serait possible pour moi de comprendre comment tu fais, pour essayer de mon coté de reproduire quelque chose de similaire si j'y arrive bien sûre, mais au moins de comprendre le fonctionnement de ce code, c'est bien beau de l'avoir tout fait mais je préfèrerai le comprendre quand même.
Merci
Nico
 

jurassic pork

XLDnaute Occasionnel
Il y a trop de choses à expliquer et je ne connais pas ton niveau au niveau code HTML. Si tu lis pas le tutoriel tu risques de ne rien comprendre. Avant toute chose dans un premier temps il faut que tu saches afficher le code html de la page que tu veux piloter avec les outils de développement de ton navigateur (dans le menu chercher outils de developpement). ça aussi c'est expliqué dans le tutoriel.
 

Discussions similaires

Statistiques des forums

Discussions
314 738
Messages
2 112 340
Membres
111 514
dernier inscrit
N.Jnin