Option Explicit
'
' Fanch55 Juin 2022
'
Sub Start_Gps()
Dim Stamp As Variant
Dim UrlReq As Variant
Dim Line As Range
Dim R As Long
[TabGps[[Longitude]:[Name]]].ClearContents
Stamp = Timer
Application.ScreenUpdating = False
For Each Line In [TabGps].Rows
R = Line.Row - [TabGps[#Headers]].Row
' On décompose les assignations pour plus de clarté
' car le Vbe est mauvais avec les continuations avec des crochets
' Cela permet également de mettre une des assignations en commentaire sans la supprimer ..
UrlReq = vbNullString
UrlReq = UrlReq & [TabGps[Id]].Rows(R) & " "
UrlReq = UrlReq & [TabGps[Adresse]].Rows(R) & " "
UrlReq = UrlReq & [TabGps[Cp]].Rows(R) & " "
UrlReq = UrlReq & [TabGps[Ville]].Rows(R) & " "
UrlReq = UrlReq & [TabGps[Pays]].Rows(R)
[TabGps[[Longitude]:[Name]]].Rows(R) = GetGps([Site], UrlReq)
[TabGps[Requête]].Rows(R) = UrlReq
Next
[TabGps].Calculate
Application.ScreenUpdating = True
MsgBox "Temps d'exécution : " & Timer - Stamp & " secondes."
End Sub
Function GetGps(Url, Adr) ' renvoie un tableau de 3 éléments: latitude,longitude et Nom de l'endroit
Dim XmlHttpRequest As Object
Dim Reponse As Object
GetGps = Array("", "", "Stop: Pas d'adresse indiquée")
Adr = WorksheetFunction.EncodeURL(Trim(Adr))
If Adr <> vbNullString Then
' Set XmlHttpRequest = CreateObject("MSXML2.serverXMLHTTP")
Set XmlHttpRequest = CreateObject("MSXML2.XMLHTTP")
With XmlHttpRequest
.Open "GET", Url & "/search?limit=1&format=xml&q=" & Adr, False
.Send
If .Status <> 200 Then
GetGps = Array("", "", "Stop: " & .ResponseXML.Text)
Err.Clear
Else
Set Reponse = .ResponseXML.SelectSingleNode("//place")
If Not Reponse Is Nothing Then
With Reponse.Attributes
GetGps = Array(Format(.getnameditem("lat").Value, "0.00000"), _
Format(.getnameditem("lon").Value, "0.00000"), _
.getnameditem("display_name").Value)
End With
Set Reponse = Nothing
Else
GetGps = Array("", "", "Stop: Pas de coordonnées pour l'adresse indiquée")
End If
End If
End With
Set XmlHttpRequest = Nothing
End If
End Function