Comment convertir une adresse postale en coordonnées GPS sur Excel (Latitude et longitude) ?
Dans ce tutoriel, je vais vous montrer comment obtenir des coordonnées GPS (latitude et longitude) à partir d’une adresse postale. Nous verrons que pour cela, il sera nécessaire de construire une petite fonction personnalisée qui repose sur l’utilisation du service web OpenStreetMap.
Téléchargement
Vous pouvez télécharger le fichier d'exemple de cet article en cliquant sur le lien suivant :
Tutoriel Vidéo
1. Comment convertir des adresses postales en coordonnées GPS
Comme nous venons de le voir dans l’introduction de ce tutoriel, nous allons voir comment convertir une série d’adresses en coordonnées GPS :
Pour pouvoir convertir une adresse postale en coordonnées GPS, le moyen le plus rapide et le plus simple est d’utiliser un service web, que nous pourrons ensuite analyser pour extraire la portion d’information qui nous intéresse.
Il existe de nombreux services sur internet qui propose de réaliser cette conversion, le plus célèbre étant incontestablement celui de Google.
Celui-ci propose en effet une API spécifique qui fournit en autres choses ce genre de service.
Une API est une interface de programmation d’application, comprenez par là un ensemble d’outils à destination principale des développeurs.
Pour simplifier, et notamment pour éviter d’avoir à souscrire à cet API auprès de Google, nous allons donc découvrir une solution alternative.
Nous allons donc utiliser les services du principal concurrent de Google Maps, à savoir OpenStreetMap, que nous retrouvons à l’adresse suivante :
https://www.openstreetmap.org/
Nous commençons donc par nous y rendre, puis nous saisir la première adresse de notre liste, afin d’analyser le comportement opéré :
Tout d’abord, nous pouvons constater qu’OpenStreetMap a bien identifié l’adresse demandée.
En plus de cela, nous pouvons nous apercevoir que cette adresse se retrouve directement saisie dans la barre d’adresse de la page :
Nous pourrons donc facilement appeler cette adresse en utilisant le lien suivant :
https://www.openstreetmap.org/search?query=5%20Avenue%20Anatole%20France%2075007%20Paris
Si nous recopions uniquement cette partie dans la barre d’adresse, nous pourrons constater que la page sera automatiquement redirigée à l’adresse :
La partie ajoutée correspond justement à ce qui nous intéresse, c’est-à-dire les coordonnées GPS.
2. La fonction COORDONNEESGPS()
Pour générer un équivalent de cette adresse dans Excel, nous pouvons simplement concaténer les différents éléments en utilisant une esperluette :
="https://www.openstreetmap.org/search?query="&A8
Cela étant fait, nous allons pouvoir analyser l’URL affichée dans la barre d’adresse pour obtenir les coordonnées GPS.
Malheureusement, il ne sera pas possible d’obtenir cette information directement avec une fonction Excel.
Mais pas d’inquiétude, nous allons développer notre propre fonction directement en VBA.
Et pour que ce tutoriel soit accessible à tout le monde, nous allons revenir dans le détail sur aspect de cette dernière.
Si vous souhaitez aller plus loin dans la découverte du langage VBA, vous pouvez évidemment consulter la formation disponible sur le blog en cliquant ici.
Pour commencer, nous allons lancer l’éditeur de code VBE (pour Visual Basic Editor), qui est l’éditeur de code intégré dans les différentes applications de la suite Office et qui permet de développer des macro-commandes en VBA.
Pour cela, nous appuyons simplement sur les touches [Alt]+[F11] :
VBE s’ouvre alors et nous allons commencer par créer un nouveau module.
Un module est une feuille de saisie de code dans laquelle nous allons pouvoir saisir nos macros et fonctions.
Pour insérer un nouveau module, nous nous rendons dans le menu Insertion > Module :
Une fois le module inséré, nous pouvons créer notre fonction, en utilisant le mot-clé Function, suivi du nom de la fonction :
Function coordonneesGPS()
End Function
Excel ajoute ensuite la dernière ligne (End Function), et tout ce que nous viendrons saisir entre ces deux lignes sera exécuté lorsque nous appellerons cette fonction.
Pour commencer, nous allons passer un argument à la fonction, en le saisissant simplement entre les parenthèses.
Ici, il s’agira de venir saisir l’adresse de la page web, nous appelons donc cet argument URL et nous le typons en tant que String, c’est-à-dire une chaine de caractères :
Function coordonneesGPS(URL As String)
End Function
3. L’objet VBA Internet Explorer
Maintenant que la fonction est préparée, nous allons pouvoir lancer la page correspondante à l’URL afin d’analyser la redirection (la nouvelle adresse d’accès à la page dans laquelle OpenStreetMap ajoute les coordonnées GPS).
Pour ce faire, nous allons devoir créer un objet qui va permettre de lancer la page web.
Cet objet, nous allons l’appeler web, et le définir en tant que « InternetExplorer.Application » :
Dim web As Object
Set web = CreateObject("InternetExplorer.Application")
Pour lancer la navigation, nous utilisons maintenant la méthode navigate de cet objet web avec pour paramètre l’URL cible :
web.navigate URL
Il ne reste plus qu’à attendre le chargement complet de la page :
Do While web.busy And web.readyState <> 4
DoEvents
Loop
Ensuite, nous pouvons récupérer la redirection de l’adresse avec la propriété locationUrl :
coordonneesGPS = web.locationUrl
Pour simplifier la lecture du résultat, nous ne récupérons ici que la partie qui a été ajoutée à la fin, en supprimant tout ce qui se trouve tout d’abord tout ce qui se trouve avant le symbole dièse :
coordonneesGPS = Right(coordonneesGPS, Len(coordonneesGPS) - InStr(coordonneesGPS, "#"))
Et dans un deuxième temps, tout ce qui se trouve avant le slash :
coordonneesGPS = Right(coordonneesGPS, Len(coordonneesGPS) - InStr(coordonneesGPS, "/"))
Nous ne pouvons pas extraire directement ce qui se trouve après le slash, étant donné que nous en retrouvons un grand nombre dans l’adresse complète.
Par contre, avant que la redirection ne soit effective, il est nécessaire d’attendre un peu de temps.
Pour cela, nous insérons une petite pause d’une seconde en utilisant la procédure que nous avions mise en place lors du tutoriel dédié :
Sub pause(duree As Double)
Dim finPause As Double
finPause = Timer + duree
Do While Timer < finPause
DoEvents
Loop
End Sub
Puis, nous pouvons insérer cette pause d’une seconde juste avant d’affecter la valeur de web.locationUrl à la fonction :
pause (1)
Attention, la durée de cette pause est à adapter en fonction des conditions de travail : débit internet et ressources disponibles sur poste de travail.
En effet, le but de celle-ci est de permettre à OpenStreetMap de recentrer la page, ce qui peut demander un certain temps.
Et enfin, pour finir, nous pouvons fermer la session d’internet explorer avec un web.Quit :
web.Quit
Nous pouvons maintenant tester la fonction directement sur la feuille de calcul en l’appelant comme n’importe quelle autre fonction :
=coordonneesGPS("https://www.openstreetmap.org/search?query="&A8
Bien entendu, le temps d’exécution de ces fonctions va dépendre de plusieurs éléments :
- La qualité de la connexion internet,
- Les ressources disponibles
Sachant que chaque requête demandera au moins une seconde, qui correspond à la pause imposée.
4. Extraire la latitude et la longitude
Maintenant, nous pouvons extraire les informations de ce résultat pour obtenir la latitude et la longitude en fonction des adresses correspondantes.
Pour la latitude tout d’abord, il suffit d’extraire la partie située sur la gauche du slash, nous utiliserons donc les fonction GAUCHE() et TROUVE() :
=GAUCHE(B8;TROUVE("/";B8)-1)
Ensuite, pour la longitude, nous utiliserons bien évidemment la fonction DROITE() :
=DROITE(B8;NBCAR(B8)-TROUVE("/";B8))