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

XL 2019 Tranformer des coordonnées GPS en adresses postales

alinco

XLDnaute Junior
Bonjour à tous,

Existe-t-il un moyen de convertir en masse des coordonnées GPS (long & Lat) provenant de deux colonnes Excel en adresses postales sur une 3ème colonne (N°, rue, CP, ville) ??

Merci de votre aide
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Je doute fort qu'une macro y parvienne par un moyen qui ne tiendrait pas compte de la forme des zones couvertes par de quelconques centres de références trop globaux à moins d'y ajouter des caractéristiques sous forme de dimensions supplémentaires calculables à partir des coordonnées cherchées (et l'altitude ?) dans chaque référence envisagée. Mais quelle que soit la finesse de la base de référence, ça reviendrait à y chercher l'élément dont la somme des carrés des différences de coordonnées entre la sienne et celle cherchée est la plus faible (on peut généralement négliger la courbure de la terre pour un seul pays)
On aurait sans doute meilleurs temps de dialoguer avec un site qui offre ce service. Je ne sais pas faire …
 

dg62

XLDnaute Barbatruc
et peut-être avec cela


base de toutes les adresses avec leur coordonnées mise à disposition gratuitement et classée par département

Schéma des données téléchargeables de la Base Adresse Nationale (2015)
CSV
Le séparateur point-virgule et l'encodage UTF-8 sont utilisés.

Nom du champDescription
idIdentifiant de la BD ADRESSE® (IGN) composé de la classe ADRNIVX et du numéro de l’objet dans la base de production du RGE®
nom_voieNom de la voie en minuscules accentuées avec les noms alternatifs éventuels
id_fantoirIdentifiant FANTOIR contenu dans le fichier des propriétés bâties de la DGFiP
numeroNuméro éventuel de l’adresse dans la voie
repIndice de répétition associé au numéro (par exemple bis, a…)
code_inseeIdentifiant INSEE de la commune sur la base du Code Officiel géographique en vigueur
code_postalCode postal du bureau de dustribution de la voie
aliasÉventuellement le nom en langue régionale ou une autre appellation différente de l’appellation officielle
nom_ldNom du lieu-dit qui peut être le nom de la voie (parfois)
nom_afnorNom normalisé selon la norme postale
libelle_acheminementNom de la commune d’acheminement
xCoordonnées cartographique en projection légale
yCoordonnées cartographique en projection légale
lonLongitude en WGS-84
latLatitude en WGS-84
nom_communeNom officiel de la commune
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Merci, mais j'avais déjà trouvé tout ça de mon coté. Je vais essayer de me passer du ScriptControl.Eval. Ça devrait être possible car responseText n'est jamais qu'une propriété String.
Plutôt que de faire renvoyer à la fonction un Object dont on n'a aucune idée de ce qu'on peut tirer, autant lui faire renvoyer un tableau contenant les infos. Ou à la réflexion peut être plutôt un Dictionary de la scrrun.dll.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Je sais tout ça. C'est un partit-pris de ma part, je n'utilise JAMAIS le type Object, parce que ça aboutit toujours à du code trop hermétique à mon gout, et à des liaisons tardives, résolues à l'exécution au lieu d'être résolus à la compilation. Là il semblerait que la définition de l'objet renvoyé par la méthode Eval de l'objet ScriptControl n'existe nulle part. Si ça se confirme, je ne remplacerai peut être pas le décorticage par Eval, mais je m'efforcerai de circonscrire tout ce code incompréhensible dans la procédure la plus basique, mettant le résultat sous forme d'objets connus.
 

Dranreb

XLDnaute Barbatruc
Bonjour @tatiak
J'ai longtemps hésité à refaire le travail de la méthode Eval de l'objet ScriptControl.
Mais l'objet qu'elle renvoie (souvent décrié d'ailleurs dans tous ce que j'ai pu trouver comme problème s'y rapportant soumis sur internet) est une telle aberration au regard des règles d'une programmation saine, et si inexploitable pour y retrouver les clés quand elles sont à priori inconnues, que j'ai fini par m'y résoudre.
J'ai écrit une Function DicoJS(Optional ByVal Txt As String) As Dictionary qui met sous forme de Dictionary imbriqués la valeur de la propriété ResponseText de l'objet MSXML2.XMLHTTP
Est-ce que ça vous intéresse quand même ?
Si oui, eh ben pour l'instant votre classeur Localisation_json.xlsm est en plein chantier pour l'adapter à l'utilisation de ce Dictionary, mais je le joindrai dans l'état où il sera dès que vous souhaiterez le voir, voire l'adapter vous-même.
Mon module MDicoJS comprend aussi une Function SousDicoJS(ByVal Dico As Dictionary, ParamArray SuiteDesClés()) As Dictionary et une Function DonnéeJS(ByVal Dico As Dictionary, ParamArray SuiteDesClés()) permettant d'extraire de celui rendu par DicoJS respectivement soit un sous-dictionnaire soit une donnée attaché(e) à une chaine de clés successives. En cas d'échec un message explique de façon extrèmement détaillée ce qui coince. Il y a aussi une Sub AuditDicoJS(ByVal Dico As Dictionary, ByVal Cible As Range) qui reproduit dans une plage tout le détail de l'arborescence.
 

ralph45

XLDnaute Impliqué
Bonjour @tou.te.s du forum,

Je déterre ce fil de conversation de l'année dernière que je trouve super intéressant et qui ne nécessiterait pas de nouveau post si... si...

1° le premier fichier joint (@tatiak) ne plantait à cette instruction :
Set ScriptControl = CreateObject("MSScriptControl.ScriptControl")

2° ... et que le 2ème (@Dranreb) ne plantait pas ici :
Function DicoRéponse(ByVal Site As String) As Dictionary

Ce serait la caverne d'Ali-Baba si l'un des deux fonctionnait !
 

ralph45

XLDnaute Impliqué
Bonsoir Dranreb,

Je me suis mal exprimé, la référence "Microsoft Scripting Runtime" était déjà cochée, mais le code plante exactement ici : Dim XHR As New MSXML2.XMLHTTP

VB:
Function DicoRéponse(ByVal Site As String) As Dictionary
   Dim XHR As New MSXML2.XMLHTTP
   XHR.Open "GET", Site, False
   XHR.send
   Set DicoRéponse = DicoJS(XHR.ResponseText)
   End Function
 

Discussions similaires

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