Comment créer un outil géographique pour obtenir les coordonnées de latitude et de longitude des adresses avec Excel VBA

Partage maintenant:

Suivez cet article et construisez votre propre outil géographique avec lequel vous pouvez obtenir les coordonnées de latitude et de longitude d'une adresse. Des convertisseurs comme celui-ci sont couramment utilisés par les courtiers immobiliers.

Téléchargez

Si vous souhaitez commencer à utiliser le logiciel dès que possible, vous pouvez :

Téléchargez le logiciel maintenant

Sinon, si vous voulez bricoler, vous pouvez lire le contenu ci-dessous.

Préparons l'interface graphique

Il vous suffit d'une simple feuille Excel, que vous pouvez nommer comme vous le souhaitez. Dans cet exemple, j'utilise le nom par défaut « Feuille1 ». L'étape suivante consiste à ajouter les en-têtes nécessaires. Le convertisseur de latitude et de longitude fournit un résultat précis pour l'adresse saisie si celle-ci inclut la ville, la région, le code postal et le pays. Comme indiqué sur l'image, préparez les en-têtes. Ajoutons la latitude et la longitude comme deux dernières colonnes. Nous avons également besoin d'un bouton pour permettre à l'utilisateur d'effectuer la conversion. Insérons donc une forme et colorions-la pour qu'elle ressemble à un bouton.Préparer l'interface graphique

Rendons-le fonctionnel

Le script fourni ici doit être copié dans un nouveau module. N'oubliez pas d'enregistrer votre classeur en tant que fichier de classeur activé par macro. Le sous « FindThis » doit être attaché au bouton que nous venons de créer.

Testons-le

Ajoutez l'adresse et les autres informations dans les colonnes correspondantes. Cliquez sur le bouton pour exécuter la macro qui affichera les coordonnées de latitude et de longitude de toutes les adresses de la feuille. La macro commencera à la ligne 2 et s'exécutera jusqu'à ce qu'une ligne soit vide.Ajouter une adresse et cliquer sur le bouton

Comment cela fonctionne?

Avec le script, nous avons créé deux fonctions. Un pour récupérer la valeur Lat et un autre pour récupérer la valeur Long. À l'aide d'une boucle FOR, nous transmettons chaque adresse à ces fonctions et affichons le résultat à l'écran.

scénario

Function GETLAT(v_address As String, v_suburb As String, v_state As String, v_postcode As Long)
    
    Dim URl As String, lastRow As Long
    Dim xmlHttp As Object, html As Object, objResultDiv As Object, objH3 As Object, link As Object
    
    URl = "https://maps.googleapis.com/maps/api/geocode/xml?address=" & Application.WorksheetFunction.Substitute(v_address, " ", "+") & Application.WorksheetFunction.Substitute(v_suburb, " ", "+") & Application.WorksheetFunction.Substitute(v_state, " ", "+") & Application.WorksheetFunction.Substitute(v_postcode, " ", "+") & ",Australia"
    
    Set xmlHttp = CreateObject("MSXML2.XMLHTTP")
    xmlHttp.Open "GET", URl, False
    xmlHttp.setRequestHeader "Content-Type", "text/xml"
    xmlHttp.send
    
    Set html = CreateObject("htmlfile")
    html.body.innerhtml = xmlHttp.ResponseText
    v_string = html.body.innerhtml
    x = InStr(1, v_string, "<LAT>")
    If x <> 0 Then
        y = InStr(x + 5, v_string, "</LAT>")
        GETLAT = Mid(v_string, x + 5, y - (x + 5))
    End If
End Function

Function GETLNG(v_address As String, v_suburb As String, v_state As String, v_postcode As Long)
    
    Dim URl As String, lastRow As Long
    Dim xmlHttp As Object, html As Object, objResultDiv As Object, objH3 As Object, link As Object
    
    URl = "https://maps.googleapis.com/maps/api/geocode/xml?address=" & Application.WorksheetFunction.Substitute(v_address, " ", "+") & Application.WorksheetFunction.Substitute(v_suburb, " ", "+") & Application.WorksheetFunction.Substitute(v_state, " ", "+") & Application.WorksheetFunction.Substitute(v_postcode, " ", "+") & ",Australia"
    
    Set xmlHttp = CreateObject("MSXML2.XMLHTTP")
    xmlHttp.Open "GET", URl, False
    xmlHttp.setRequestHeader "Content-Type", "text/xml"
    xmlHttp.send
    
    Set html = CreateObject("htmlfile")
    html.body.innerhtml = xmlHttp.ResponseText
    v_string = html.body.innerhtml
    
    x = InStr(1, v_string, "<LNG>")
    If x <> 0 Then
        y = InStr(x + 5, v_string, "</LNG>")
        GETLNG = Mid(v_string, x + 5, y - (x + 5))
    End If
End Function

Sub FindThis()
    For r = 2 To 5
        Range("F" & r).Value = GETLAT(Range("A" & r).Value, Range("B" & r).Value, Range("C" & r).Value, Range("D" & r).Value)
        Range("G" & r).Value = GETLNG(Range("A" & r).Value, Range("B" & r).Value, Range("C" & r).Value, Range("D" & r).Value)
    Next r
End Sub

Si vous ne recevez pas de résultats appropriés à l'aide du script, Excel corrompu peut être une raison probable. Vous pouvez ensuite utiliser Outil de récupération de fichier Excel comme DataNumen Excel Repair pour corriger Excel.

Introduction de l'auteur:

Nick Vipond est un expert en récupération de données dans DataNumen, Inc., qui est le leader mondial des technologies de récupération de données, y compris problème de doc de réparation et produits logiciels de récupération Outlook. Pour plus d'informations, visitez www.datanumen.com

Partage maintenant:

Les commentaires sont fermés.