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

dysorthographie

XLDnaute Accro
Bonjour,
pour ceux que ça pourrais intéresser, voici un l'onglet des ville avec le Code postaux.

j'avais déjà ajouté une macro pou le CP Insee. pour les données météo je suis pas a votre niveau mais je récupère casi tout je suis encore qu'a l'ébauche et je n'aurais peut-être pas fini quand ce poste sera flagué à résolu mais si ce que j'ai déjà fait peut être utile à quelqu'un ...
 

Pièces jointes

  • Projet Météo en cour.xlsm
    151.1 KB · Affichages: 5

Nicolas JACQUIN

XLDnaute Impliqué
Supporter XLD
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..

Bonjour Staple1600,

PQ c'est pas du tout dans mais compétence, mais je suis à l'écoute de toutes améliorations

Merci
 

Pièces jointes

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

Staple1600

XLDnaute Barbatruc
Re

@jurassic pork
L'erreur survenait quand j'utilisais le parser de Daniel FERRY
Mais comme plus tard, tu as dit qu'il fallait reprendre l'ancien parser (celui de Tim HALL)
Je suis parti sur la piste PQ, et je m'y embourbe un chouia
(J'essaie de créé une fonction pour passer le nom d'une ville en paramètre)
J'en suis là
PowerQuery:
let
Ville=Choix_Ville,
Source = Json.Document(Web.Contents("https://geo.api.gouv.fr/communes?nom=" & Ville)),
vTable = Table.FromRecords(Source),
Fin = Table.ExpandListColumn(vTable, "codesPostaux")
in
Fin
Et par exemple pour Nantes, j'obtiens
PQ_test2.PNG

versus ceci en VBA (avec ton code)
INSEE_VBA.PNG
 

jurassic pork

XLDnaute Occasionnel
C'est ce que je disais : il y a plusieurs lignes quand il y a plusieurs codes postaux pour la même commune, il faut prendre que la première. Un spécialiste PowerQuery va te régler cela en moins de 2 et il va aussi te récupérer la ville dans une cellule nommée du classeur.
 

Staple1600

XLDnaute Barbatruc
Re

@jurassic pork
et il va aussi te récupérer la ville dans une cellule nommée du classeur.
Ca je sais faire
Mais comme tu disais que l'inconvénient de PQ c'est de passer par le chargement des données dans une feuille
J'essaie de voir si on peut ne pas passer par une feuille
(mais récupérer le résultat de la requête dans un string que l'on pourra ensuite manier en VBA)
Pour le moment, je patauge
(et je vais sans doute patauger longtemps si PQ ne renvoie ses résultats que sur des feuilles ;)
 

jurassic pork

XLDnaute Occasionnel
Re

@jurassic pork
Mais comme tu disais que l'inconvénient de PQ c'est de passer par le chargement des données dans une feuille
J'essaie de voir si on peut ne pas passer par une feuille
J'ai aussi regardé ce problème et j'ai trouvé une possibilité. Il faut passer par un Data Model. Il faut charger la requête Powerquery dans le Data Model. J'y suis arrivé mais je maîtrise pas trop pour l'instant alors je ne met pas de code.
Par contre une fois que cela est fait j'arrive à lire les données qui sont dedans. Voici par exemple pour ta requête PowerQuery chargée dans le DataModel (CodeINSEE est la connexion au Data Model) :
VB:
Sub GetPowerQueryResult()
    Dim oConn As WorkbookConnection, oRS As Object ' Recordset
    Dim oCnn As Object, sTabName As String
    Set oConn = ThisWorkbook.Connections("CodeINSEE")
    sTabName = oConn.ModelTables(1).Name
    Set oCnn = ThisWorkbook.Model.DataModelConnection.modelConnection.ADOConnection
    Set oRS = CreateObject("ADODB.RecordSet")
    oRS.Open "EVALUATE '" & sTabName & "'", oCnn
    Do While Not oRS.EOF
        Debug.Print oRS.Fields(0) & " -> Code INSEE: " & oRS.Fields(1) & _
                               " - Dep: " & oRS.Fields(2) & _
                               " - Cp: " & oRS.Fields(6) & _
                               " - Pop: " & oRS.Fields(7)
        oRS.MoveNext
    Loop
End Sub
voici ce que j'obtiens comme résultat :
Rennes -> Code INSEE: 35238 - Dep: 35 - Cp: 35000 - Pop: 225081
Rennes -> Code INSEE: 35238 - Dep: 35 - Cp: 35200 - Pop: 225081
Rennes -> Code INSEE: 35238 - Dep: 35 - Cp: 35700 - Pop: 225081
Rennes-le-Château -> Code INSEE: 11309 - Dep: 11 - Cp: 11190 - Pop: 89
Rennes-les-Bains -> Code INSEE: 11310 - Dep: 11 - Cp: 11190 - Pop: 210
Rennes-sur-Loue -> Code INSEE: 25488 - Dep: 25 - Cp: 25440 - Pop: 108
Rennes-en-Grenouilles -> Code INSEE: 53189 - Dep: 53 - Cp: 53110 - Pop: 108
 

Discussions similaires

Statistiques des forums

Discussions
315 093
Messages
2 116 127
Membres
112 667
dernier inscrit
foyoman