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

jurassic pork

XLDnaute Occasionnel
Sinon, question existentielle
Est-ce prudent ou pas cette bidouille dans la Registry ?
Ca laisse la porte ouverte à d'éventuels soucis de sécurité, non ?
(activeX vérolés et tutti quanti)
Il n'est pas nécessaire de faire cette modification si on ne met pas le contrôle activeX webBrower dans une feuille de classeur. La manip est donnée à titre indicatif. Dans le classeur de Nicolas on utilise le WebBrowser dans un formulaire.
 

Staple1600

XLDnaute Barbatruc
Re

@jurassic pork
Sur 365, j'ai du faire la manip, sinon ca ne fonctionne pas un userform.
(Et je crois que je l'avais fait aussi quand j'étais sous XL2013)
Je parlais juste d'une manière générale.
Personnellement, je n'ouvre jamais un classeur tiers en activant les macros.
Je posais juste la question de savoir si cette modif dans le registre constituait un risque ou pas pour un "newbie" qui télécharge et teste à tout va des classeurs macrotés de toute provenance.
Fin de l'aparté

Pour revenir au fil
J'ai eu une erreur 438 quand j'ai fais mon propre classeur de test avec ton code initial
(message#5)

Je vais essayer de reproduire le bug en refaisant un classeur de test
 

jurassic pork

XLDnaute Occasionnel
Sinon pour ceux que ça intéresse j'ai un nouveau code pour aller chercher le code INSEE d'une commune et d'autres infos comme le code postal et la population en utilisant l'api du gouvernement geoapi :
geoapi.png

Les résultats sont affichés dans la ListBox.
Voici le code :
VB:
Sub RecupCodeInsee(commune)
    Dim http As Object, res As Object, elem
    Const BaseURL = "https://geo.api.gouv.fr/communes?nom="
    Set http = CreateObject("MSXML2.XMLHTTP")
    UrL = BaseURL & commune
    On Error Resume Next
    With http
        .Open "GET", UrL, False
        .Send
        Set res = JsonConverter.ParseJson(.responseText)
    End With
    For Each elem In res
       Forme.Lb_Result.AddItem elem("nom") & " -> Code INSEE: " & elem("code") & _
                               " - Dep: " & elem("codeDepartement") & _
                               " - Cp: " & elem("codesPostaux")(1) & _
                               " - Pop: " & elem("population")
    Next
    Set http = Nothing
    Set res = Nothing
End Sub


Sub TestRecupCodeInsee()
    Forme.Show 0
    Forme.TB_Ville = "TestRecupCodeINSEE Rennes"
    Forme.Lb_Result.Clear
    Forme.MultiPage1.Value = 2
    RecupCodeInsee "Rennes"
End Sub

Le code du bouton Code INSEE :
VB:
Private Sub CommandButton2_Click()
   Me.Lb_Result.Clear
   RecupCodeInsee Me.TB_Ville
End Sub
 

Staple1600

XLDnaute Barbatruc
Re

@jurassic pork
C'est cette erreur que j'ai quand je teste dans un classeur vierge
webbrowser.PNG

J'essaie plusieurs fois. Toujours le message d'erreur
Puis je modifie légèrement ton code
VB:
Private Sub UserForm_Initialize()
WebBrowser1.Navigate2 "about:blank"
End Sub
Private Sub CommandButton1_Click()
Const MeteoHennebont As String = _
   "<iframe seamless width=""888"" height=""336"" frameborder=""0"" src=""https://www.infoclimat.fr/public-api/mixed/iframeSLIDE?_ll=47.80512,-3.27337&_inc=WyJIZW5uZWJvbnQiLCIyMiIsIjMwMTM1MjEiLCJGUiJd&_auth=U0lXQFUrXX8EKQQzD3lWf1E5ATQJf1J1An5XNFgyBHlSOV46DmhcPwNuVShXeAEoVmZQLgs2BDsBYQRgD2VUKFMvVzBVNl0%2BBGgEYw89VmNRfQF%2BCStSawJ%2BVy9YPQRmUi9eOw5lXDsDclU2V2ABN1Z7UDcLPAQjAX0EYg9lVDVTN1c7VTNdPwRtBGAPPVZ9UX0BZwkwUjwCMldlWD0ENlI3XmgOPlw3A2pVMFdnAStWYVA5CzQEOgFkBGYPZVQ%2FUy9XLFVPXUwEdgQmD31WN1EkAXwJY1I0AjU%3D&_c=dfd17f0f948fa6a147d55390a8272cd8""></iframe>"
WebBrowser1.Document.Body.InnerHtml = MeteoHennebont
End Sub
Et là, plus d'erreur

Je ne comprends pas le pourquoi de la chose 🤔
 

jurassic pork

XLDnaute Occasionnel
Re

@jurassic pork
C'est cette erreur que j'ai quand je teste dans un classeur vierge
Regarde la pièce jointe 1204547
J'essaie plusieurs fois. Toujours le message d'erreur
Puis je modifie légèrement ton code
VB:
Private Sub UserForm_Initialize()
WebBrowser1.Navigate2 "about:blank"
End Sub
Private Sub CommandButton1_Click()
Const MeteoHennebont As String = _
   "<iframe seamless width=""888"" height=""336"" frameborder=""0"" src=""https://www.infoclimat.fr/public-api/mixed/iframeSLIDE?_ll=47.80512,-3.27337&_inc=WyJIZW5uZWJvbnQiLCIyMiIsIjMwMTM1MjEiLCJGUiJd&_auth=U0lXQFUrXX8EKQQzD3lWf1E5ATQJf1J1An5XNFgyBHlSOV46DmhcPwNuVShXeAEoVmZQLgs2BDsBYQRgD2VUKFMvVzBVNl0%2BBGgEYw89VmNRfQF%2BCStSawJ%2BVy9YPQRmUi9eOw5lXDsDclU2V2ABN1Z7UDcLPAQjAX0EYg9lVDVTN1c7VTNdPwRtBGAPPVZ9UX0BZwkwUjwCMldlWD0ENlI3XmgOPlw3A2pVMFdnAStWYVA5CzQEOgFkBGYPZVQ%2FUy9XLFVPXUwEdgQmD31WN1EkAXwJY1I0AjU%3D&_c=dfd17f0f948fa6a147d55390a8272cd8""></iframe>"
WebBrowser1.Document.Body.InnerHtml = MeteoHennebont
End Sub
Et là, plus d'erreur

Je ne comprends pas le pourquoi de la chose 🤔
Ce n'est pas pour rien que dans mon code original il y a l'attente que la page soit prête :
VB:
Private Sub CommandButton1_Click()
    Me.WebBrowser1.Navigate "about:blank"
    Do Until WebBrowser1.ReadyState = READYSTATE_COMPLETE
        Sleep 50 ' tempo 50 ms
        DoEvents
    Loop
    Me.WebBrowser1.Document.Body.InnerHtml = InfosMeteo(Me.TB_Ville)
End Sub
On peut mettre effectivement la page blanche dans le Initialize , le seul souci c'est qu'on efface pas la page avant de charger les prévisions à chaque fois que l'on fait une demande de prévision. Dans le cas où une demande n'aboutit pas on se retrouve avec l'ancienne demande dans le webBrowser
 

jurassic pork

XLDnaute Occasionnel
Re

@jurassic pork
Concernant ton code relatif à l'INSSE
JsonConverter.ParseJson
C'est celui de Tim Hall sur Github ?

Tu peux joindre un fichier Excel l'incluant pour tester, stp ?
Le module JsonConverter est dans le classeur de Nicolas. Je ne sais pas si il va inclure ce nouveau code dans son classeur. Ce qu'on voit dans ma capture d'écran c'est ce qui a été fait.
C'est pas compliqué à tester un formulaire avec un TextBox un bouton et une ListBox et le module JsonConverter qui est bien celui de Tim Hall.
 

Nicolas JACQUIN

XLDnaute Impliqué
Supporter XLD
Le module JsonConverter est dans le classeur de Nicolas. Je ne sais pas si il va inclure ce nouveau code dans son classeur. Ce qu'on voit dans ma capture d'écran c'est ce qui a été fait.
C'est pas compliqué à tester un formulaire avec un TextBox un bouton et une ListBox et le module JsonConverter qui est bien celui de Tim Hall.

Re,
Je viens de l'inclure dans le prog, entre temps j'avais fais quelques modifs.
Dernière mise à jour jointe
Merci l'ami
 

Pièces jointes

  • Calendrier Ephéméride Marée V2.6.xlsm
    425.6 KB · Affichages: 6

Staple1600

XLDnaute Barbatruc
Re

Désolé pour le dérangement, je précise que jusqu'au dernier message de @jurassic pork , je n'avais ouvert aucune PJ du fil.
(J'ai fait mes tests dans un classeur test en copiant/collant les codes VBA qui m'intéressaient dans ce fil
Je suis allé directement sur Github, et j'ai cru que c'était un module de classe
(à cause de cette ligne : @CLASS JsonConverter)
j'ai donc mis le code dans un module de classe.

En regardant la PJ du 1er message, j'ai vu mon erreur.

Encore désolé, mais quand je le peux, j'évite d'accumuler des classeurs du net sur mon PC.
 

Staple1600

XLDnaute Barbatruc
Re

@NicolasJACQUIN
Il est d'usage (enfin c'était le cas jadis) de prévenir quand il y des procédures dans ThisWorkBook
Notamment une WorkBook_Open()
On n'est jamais trop prudent ;)

Avant de tester, je lis d'abord le code VBA de ton fichier du message#69
Ca me prendra un peu de temps (parce que je suis déjà à l'apéro)

EDITION
• 1
Je ne comprends pas pourquoi les déclarations des variables sont un module de classe
• 2
=> Feuille: VILLES
La Belgique n'est pas un département
Dans la colonne nommée URL, ce ne sont pas des URL, non ?

RESULTAT TEST
Test OK sur O365 64 bits

Opinion personnelle
Beau boulot
Mais trop de couleurs, tue la couleur
Une version avec le gris standard des Userform me conviendrait mieux ;)

Tiens, c'est une suggestion d'évolution
Prévoir un paramétrage des couleurs de fond
Voir un dark mode
 
Dernière édition:

jurassic pork

XLDnaute Occasionnel
Si il y en a qui puisse tester tester le fichier du post #69, pour me dire si il y avait des bugs, merci à tous et un grand merci à jurassic pork ;)
Moi j'ai regardé seulement la partie météo qui m'a l'air correcte. Le seul petit bug que j'ai vu c'est que pour ouvrir le formulaire il faut cliquer sur un jour mais si on est déjà dans la cellule cela ne se déclenche pas. Il faut cliquer sur un autre jour.
 

Discussions similaires

Statistiques des forums

Discussions
315 095
Messages
2 116 166
Membres
112 675
dernier inscrit
Tazra_IMOU