Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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



ou au mieux ça




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: 18

Staple1600

XLDnaute Barbatruc
Re

@jurassic pork
Merci de m'avoir informer pour les MP
PS: je parlais juste de WebBrower et de ton message#5 de ce fil
Afin de comprendre pourquoi le fait de passer le Navigate2 dans l'Initialize finissait par supprimer l'erreur 424
NB: Le MP était motivé par le fait ne de pas encombrer le fil de Nicolas

Pour revenir au fichier du message#69
@Nicolas JACQUIN
[avis personnel]
Ca parait logique de vouloir savoir les phases de la Lune dans le mois courant ou dans le futur
Mais est-ce utile de le savoir pour les années antérieures?

Au niveau ergonomie, si on clique pour afficher l'userform, on devrait aussi cliquer sur la celluleJ1 pour choisir l'année et le mois
Donc logiquement, on devrait lire : Choix d'une période en J1
(Oui je sais, je pinaille )
[/avis personnel]
 

TooFatBoy

XLDnaute Barbatruc
Hi,

S'il y en a qui peuvent tester le fichier du post #69, pour me dire s'il y a des bugs,
J'ai testé, et apparemment ça fonctionne correctement, à part un petit bug au niveau du numéro de la semaine.
C'est d'autant plus étonnant que ledit numéro est correct dans le UserForm.

Exemple : le 1er janvier 2023 apparaît dans le calendrier comme étant dans la semaine "zéro" , alors que dans le UserForm il apparaît bien dans la semaine 52.


[edit]
Il y a aussi un bug sur le numéro de semaine en fin d'année : par exemple la dernière semaine de décembre 2019 apparaît comme étant la semaine 53 alors que c'est en réalité la semaine numéro 1 de 2020.
Mais là tu n'y es pour rien, c'est la fonction DatePart qui retourne un numéro de semaine erroné.
[/edit]
 
Dernière édition:

jurassic pork

XLDnaute Occasionnel
Re

@jurassic pork
Concernant ton code relatif à l'INSSE
JsonConverter.ParseJson
C'est celui de Tim Hall sur Github ?
Hello,
J'ai trouvé un analyseur Json plus compact que celui de JsonConverter (source 4K au lieu de 45K) : Celui de Daniel Ferry qui utilise les expressions régulières pour effectuer l'analyse. Le code se trouve ici (code complet en bas de la page) . J'ai mis ce code dans un module que j'ai appelé JsonConv et je l'ai testé dans le classeur de Nicolas pour la récupération des codes INSEE :
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)
        Set res = JsonConv.ParseJSON(.responseText)
    End With
'    Debug.Print ListPaths(dic)
    For Each elem In res
       Forme.Lb_Result.AddItem elem.nom & " -> Code INSEE: " & elem.code & _
                               " - Dep: " & elem.codeDepartement & _
                               " - Cp: " & elem.codesPostaux(0) & _
                               " - Pop: " & elem.population
'       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
J'obtiens les mêmes résultats qu'avec JsonConverter et la syntaxe est plus simple mais avec attention aux tableaux dont l'index commence à 0.
Ami calmant, J.P
 

jurassic pork

XLDnaute Occasionnel
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.
Hello,
voici ce que je propose pour le problème évoqué dans le message #73
1 : A l'ouverture du classeur au moment où l'on colore le jour courant en vert on sélectionne la cellule qui se trouve juste en dessous :
Dans le code de recup_jour de la feuille Calendrier mettre :
VB:
With Worksheets("Calendrier")
        For i = 1 To nbjour
            If col = 9 Then lig = lig + 2: col = 2 'pour changer de ligne quand on arrive au dimanche
            If Date = DateSerial(année, Mois, i) Then 'si on est sur la date du jour
                .cells(lig, col).Interior.Color = 65280 'couleur verte
                .cells(lig + 1, col).Select ' Sélection cellule en dessous
            Else
                .cells(lig, col).Interior.Color = 15395562
            End If
            col = col + 1 'on se déplace sur le jour suivant
        Next i
    End With

2 : A la fin d'utilisation du formulaire dans le Selection_Change de la feuille Calendrier on sélectionne la cellule qui se trouve en dessous de la cellule qui a déclenché l'ouverture du formulaire :
VB:
Forme.requête
        Call eJoursRestantsAvantProchaineSaison
        Forme.Tac
    End With
    Target.Offset(1, 0).Select
End Sub

Ami calmant, J.P
 

Nicolas JACQUIN

XLDnaute Impliqué
Supporter XLD
Bonjour à tous,
Merci pour vos retours,


Cette partie là j'en avais dé jà pris compte pas de soucis


Sur cette partie, j'ai bien rajouté le module, j'ai une erreur,
je pense que c'est cette partie là que j'ai pas compris ""l'index commence à 0.""




Sinon pour le dark proposé part Staple1600, j'ai tenté, je sais pas ce que vous en pensé



Je rejoint le fichier
Merci à tous
Nico
 

Pièces jointes

  • Calendrier Ephéméride Marée V2.6 Dark.xlsm
    422.6 KB · Affichages: 2
Dernière édition:

jurassic pork

XLDnaute Occasionnel
Sur cette partie, j'ai bien rajouté le module, j'ai une erreur,
Hello Nico,
Dans le module JsonConv tu as bien mis le code complet de :

[EDIT] je viens de regarder ton nouveau fichier :
il ne faut pas déplacer RecupCodeInsee dans le module JSonConv et dans JSonConv il ne doit y avoir que le code de Daniel Ferry.

Ami calmant, J.P
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonjour le fil

@jurassic pork
Idem chez moi, il ne passe rien
Et si je mets en commentaire le On Error
J'ai une erreur 424

PS: j'ai bien copié le code complet VBA JSON Parser dans un module nommé JsonConv
J'ai activé certaines références qui me semblaient utiles
Mon userform se nomme bien Forme et contient une ListBox nommée LB_Result

Et mon code de test est celui
Sub TestRecupCodeInsee()
Forme.Show 0
RecupCodeInsee "Rennes"
End Sub
 

Staple1600

XLDnaute Barbatruc
Re

@jurassic pork
Sur le site de Daniel FERRY, il évoque PowerQuery
Comme il existe des requêtes PQ dans le classeur, j'ai testé
Et cela fonctionne sans recourir à un parser en VBA
Ci-dessous , premier essai
PowerQuery:
let
    Source = Json.Document(Web.Contents("https://geo.api.gouv.fr/communes?nom=Rennes")),
    Source1 = Source{0},
    #"Converti en table" = Record.ToTable(Source1)
in
    #"Converti en table"
Si des powerqueristes plus chevronnés que moi passent dans le fil pour peaufiner une voix PQ

Sinon j'ai toujours l'erreur 424.
Je comprends pas où j'ai fait une erreur.
 

jurassic pork

XLDnaute Occasionnel
Hello Stapple1600,
effectivement il y a un souci pour JSonConv , le parseur ne renvoie pas ce que je croyais. Je vais investiguer. J 'ai du faire un essai où c'était toujour le JSonConverter qui faisait la conversion.
Le souci avec PowerQuery c'est qu'il faut passer par une feuille. On ne peut pas récupérer directement le résultat dans le VBA.
 

jurassic pork

XLDnaute Occasionnel
Bon en fait il faut oublier JsonConv et revenir à JsonConverter. JsonConv c'est plutôt pour aller chercher une valeur dans une chaîne json. Il renvoie en fait un dictionnaire avec tous les éléments du json.
Nicolas dans ton dernier classeur il me semble que tu as mis la procédure RecupCodeInsee dans le code du formulaire : il faut la mettre dans le module météo.
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

Avec cette requête PQ, j'obtiens les mêmes infos qu'en VBA
EDITION: Un code M plus concis
PowerQuery:
let
Source = Json.Document(Web.Contents("https://geo.api.gouv.fr/communes?nom=Rennes")),
vTable = Table.FromRecords(Source),
Fin = Table.ExpandListColumn(vTable, "codesPostaux")
in
Fin
PowerQuery:
let
    Source = Json.Document(Web.Contents("https://geo.api.gouv.fr/communes?nom=Rennes")),
    #"Converti en table" = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    #"Column1 développé" = Table.ExpandRecordColumn(#"Converti en table", "Column1", {"nom", "code", "codeDepartement", "siren", "codeEpci", "codeRegion", "codesPostaux", "population", "_score"}, {"Column1.nom", "Column1.code", "Column1.codeDepartement", "Column1.siren", "Column1.codeEpci", "Column1.codeRegion", "Column1.codesPostaux", "Column1.population", "Column1._score"}),
    #"Column1.codesPostaux développé" = Table.ExpandListColumn(#"Column1 développé", "Column1.codesPostaux")
in
    #"Column1.codesPostaux développé"
Mais effectivement, le résultat s'affiche sur une feuille.
Mais c'est déjà le cas si ma mémoire est bonne pour d'autres infos dans le classeur de Nicolas.

@Nicolas JACQUIN
je continue par curiosité d'explorer la piste PQ
En espérant que d'autres tenteront aussi l'aventure.
Si cela t'intéresse, je publierai mes résultats dans don fil
Sinon comme indiqué par @jurassic pork , utilise le parser JSON en VBA..
 
Dernière édition:

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…