Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !
Chatgpt à dit:Si vous utilisez uniquement une connexion Ethernet (RJ45), la précision de votre géolocalisation sera principalement limitée par votre adresse IP, ce qui, dans la plupart des cas, ne sera pas aussi précis que les méthodes basées sur le GPS ou les réseaux Wi-Fi.
### Pourquoi la géolocalisation via Ethernet (IP) est limitée :
- **Localisation par adresse IP** : En utilisant une connexion Ethernet, la localisation est basée sur l'adresse IP attribuée par votre fournisseur d'accès à Internet (FAI). Cette méthode est généralement précise à l'échelle d'une ville ou d'une région, mais pas à l'échelle de quelques mètres. La précision dépend du type d'IP (statique ou dynamique) et du nombre de serveurs proxy ou de relais réseau que vous traversez.
- **Problème avec la précision** : Une adresse IP publique donnée peut être associée à une large zone géographique, parfois à des dizaines de kilomètres de votre position réelle. C'est pour cela que, même si vous êtes dans une zone urbaine dense, vous pourriez être géolocalisé à 50 mètres ou plus de votre position réelle.
### Comment maximiser la précision avec une connexion RJ45 (IP) :
1. **Utiliser plusieurs services de géolocalisation IP** : Chaque fournisseur de service de géolocalisation (comme IPStack, IPinfo, ou FreeGeoIP) peut avoir une base de données d'IP légèrement différente. Tester plusieurs services pourrait donner des résultats plus précis.
Vous pouvez essayer les services suivants :
- **ipinfo.io**
- **ipgeolocation.io**
- **ipstack.com**
2. **Code VBA pour tester différentes APIs** :
Voici un exemple VBA pour utiliser plusieurs API et comparer les résultats. Cela peut vous aider à trouver le service qui vous donne la localisation la plus précise.
```vba
Sub GetIPLocation()
Dim http As Object
Dim url As String
Dim response As String
' Utiliser IPInfo
Set http = CreateObject("MSXML2.XMLHTTP")
url = "https://ipinfo.io/json" ' API IPInfo
http.Open "GET", url, False
http.Send
response = http.responseText
MsgBox "IPInfo.io result: " & response
' Utiliser IPStack
Set http = CreateObject("MSXML2.XMLHTTP")
url = "http://api.ipstack.com/check?access_key=YOUR_API_KEY" ' API IPStack
http.Open "GET", url, False
http.Send
response = http.responseText
MsgBox "IPStack result: " & response
' Utiliser ipgeolocation.io
Set http = CreateObject("MSXML2.XMLHTTP")
url = "https://api.ipgeolocation.io/ipgeo?apiKey=YOUR_API_KEY" ' API ipgeolocation.io
http.Open "GET", url, False
http.Send
response = http.responseText
MsgBox "IPGeolocation.io result: " & response
End Sub
```
**Note** : Vous devrez vous inscrire à ces services pour obtenir une clé API (gratuite dans la plupart des cas).
3. **Vérifiez votre adresse IP publique** :
Parfois, la localisation est très inexacte si votre IP publique change régulièrement ou si elle est associée à un serveur d'une autre ville. Vous pouvez utiliser des services comme `whatismyip.com` pour vérifier votre IP publique et voir si elle est bien attribuée à votre zone géographique.
### Autres solutions si vous êtes limité à une connexion RJ45 :
- **Utiliser un VPN localisé près de chez vous** : Si la localisation par IP n'est pas suffisamment précise, l'utilisation d'un VPN peut parfois vous permettre de simuler une position proche de votre emplacement réel.
- **Services locaux payants (si nécessaire)** : Certains services de localisation offrent des options payantes qui fournissent des données plus précises ou plus fréquentes, mais ceux-ci sont rarement gratuits.
En résumé, avec une connexion Ethernet (RJ45), vous êtes limité à la précision de la géolocalisation par IP, qui dépend fortement de votre FAI. L'usage de plusieurs services d'IP et une comparaison des résultats peut légèrement améliorer la précision, mais atteindre une précision inférieure à 50 mètres est très difficile sans une technologie basée sur le GPS ou le Wi-Fi.,
Sub PositionAvecApiAdresseGouv(adresse)
Dim http As Object
Const BaseURL = "https://api-adresse.data.gouv.fr/search/?q="
Set http = CreateObject("MSXML2.XMLHTTP")
URL = BaseURL & adresse
On Error Resume Next
With http
.Open "GET", URL, False
.Send
res = .responseText
End With
Set http = Nothing
résultat = Split(res, Chr(13))
deb = InStr(1, res, "coordinates"":[")
Fin = InStr(deb, res, "]")
coor = Mid(res, deb + 13, Fin - (deb + 13) + 1)
lon = Split(Split(coor, ",")(0), "[")(1)
lat = Split(Split(coor, ",")(1), "]")(0)
Debug.Print "======== Position avec ApiAdresseGouv ========="
Debug.Print "Latitude : " & lat & " - Longitude : " & lon
End Sub
Sub PositionAvecNominatim(adresse)
Dim http As Object, objDom As Object, res
Const BaseURL = "https://nominatim.openstreetmap.org/search.php?format=xml&q="
Set http = CreateObject("MSXML2.XMLHTTP")
Set objDom = CreateObject("MSXML2.DOMDocument.6.0")
URL = BaseURL & adresse
On Error Resume Next
With http
.Open "GET", URL, False
.Send
res = .responseText
End With
Set http = Nothing
'Debug.Print res
objDom.LoadXML res
Debug.Print "======== Position avec OpenStreetMap Nominatim ========="
Debug.Print "Latitude : " & objDom.SelectSingleNode("//place").getAttribute("lat") _
& " - Longitude : " & objDom.SelectSingleNode("//place").getAttribute("lon")
Set objDom = Nothing
End Sub
Sub PositionWithGoogleApis(adresse)
Dim http As Object, objDom As Object, res
Const BaseURL = "https://maps.googleapis.com/maps/api/geocode/xml?address="
Const ApiKey = "MettreIciSonApiKey"
Set http = CreateObject("MSXML2.XMLHTTP")
Set objDom = CreateObject("MSXML2.DOMDocument.6.0")
URL = BaseURL & adresse & "&key=" & ApiKey
On Error Resume Next
With http
.Open "GET", URL, False
.Send
res = .responseText
End With
Set http = Nothing
'Debug.Print res
objDom.LoadXML res
Debug.Print "======== Position avec GoogleApis ========="
Debug.Print "Latitude : " & objDom.SelectSingleNode("//location/lat").Text & _
" - Longitude : " & objDom.SelectSingleNode("//location/lng").Text
Set objDom = Nothing
End Sub
Sub RecupPositions()
Const adresse1 = "23 avenue commune de Paris Hennebont"
Const adresse2 = "25 avenue commune de Paris Hennebont"
Debug.Print "===== " & adresse1 & " ====="
PositionAvecApiAdresseGouv adresse1
PositionAvecNominatim adresse1
PositionWithGoogleApis adresse1
Debug.Print "===== " & adresse2 & " ====="
PositionAvecApiAdresseGouv adresse2
PositionAvecNominatim adresse2
PositionWithGoogleApis adresse2
End Sub
===== 23 avenue commune de Paris Hennebont =====
======== Position avec ApiAdresseGouv =========
Latitude : 47.799765 - Longitude : -3.265957
======== Position avec OpenStreetMap Nominatim =========
Latitude : 47.7997640 - Longitude : -3.2659570
======== Position avec GoogleApis =========
Latitude : 47.7997487 - Longitude : -3.2658122
===== 25 avenue commune de Paris Hennebont =====
======== Position avec ApiAdresseGouv =========
Latitude : 47.800003 - Longitude : -3.26778
======== Position avec OpenStreetMap Nominatim =========
Latitude : 47.7998932 - Longitude : -3.2674882
======== Position avec GoogleApis =========
Latitude : 47.7996538 - Longitude : -3.2658544
Moi avec ma limitation à 1000 requêtes par jour je n'ai jamais rien payé et si on me vole ma clé cela bloquera l'utilisation. A vérifier aussi que Google ne change pas ses conditions d'utilisation.Avec un crédit gratuit offert par Google de 200$ par mois et en limitant son quota à 1000 requêtes par jour (ce qui est faisable) , cela reste gratuit car un crédit de 200$ correspond à 40000 requêtes.
Donc si vous n'avez pas trop de requêtes à faire par jour vous pouvez envisager d'utiliser l'API googleapis sans coût.
Sub PositionAvecNominatim(adresse)
Dim http As Object, objDom As Object, res
Const BaseURL = "https://nominatim.openstreetmap.org/search.php?format=xml&q="
Set http = CreateObject("MSXML2.XMLHTTP")
Set objDom = CreateObject("MSXML2.DOMDocument.6.0")
URL = BaseURL & adresse
On Error Resume Next
With http
.Open "GET", URL, False
.Send
res = .responseText
End With
Set http = Nothing
'Debug.Print res
objDom.LoadXML res
Debug.Print "======== Position avec OpenStreetMap Nominatim ========="
Debug.Print "Latitude : " & objDom.SelectSingleNode("//place").getAttribute("lat") _
& " - Longitude : " & objDom.SelectSingleNode("//place").getAttribute("lon")
Set objDom = Nothing
End Sub
Sub PositionAvecNominatim(adresse)
Dim http As Object, objDom As Object, res
Const BaseURL = "https://nominatim.openstreetmap.org/search.php?format=xml&q="
Set http = CreateObject("MSXML2.XMLHTTP")
Set objDom = CreateObject("MSXML2.DOMDocument.6.0")
URL = BaseURL & adresse
On Error Resume Next
With http
.Open "GET", URL, False
.Send
res = .responseText
End With
Set http = Nothing
'Debug.Print res
objDom.LoadXML res
With Worksheets("MaPosition")
'Debug.Print "======== Position avec OpenStreetMap Nominatim ========="
Debug.Print objDom.SelectSingleNode("//place").getAttribute("lat") _
& " " & objDom.SelectSingleNode("//place").getAttribute("lon")
.Range("D2") = Info_adresse.TextBox1 & " " & Info_adresse.Cp & " " & Info_adresse.Cpville
.Range("B2") = Info_adresse.Cpville
.Range("G2") = objDom.SelectSingleNode("//place").getAttribute("lon")
.Range("H2") = objDom.SelectSingleNode("//place").getAttribute("lat")
End With
Set objDom = Nothing
End Sub
Sub RecupPositions()
'Const adresse1 = "23 avenue commune de Paris Hennebont"
Const adresse2 = Info_adresse.TextBox1 & " " & Info_adresse.Cp & " " & Info_adresse.Cpville
'Debug.Print "===== " & adresse1 & " ====="
'PositionAvecApiAdresseGouv adresse1
'PositionAvecNominatim adresse1
'PositionWithGoogleApis adresse1
Debug.Print "===== " & adresse2 & " ====="
'PositionAvecApiAdresseGouv adresse2
PositionAvecNominatim adresse2
'PositionWithGoogleApis adresse2
End Sub
Sub RecupPositions()
Dim adresse2 As String
adresse2 = Info_adresse.TextBox1 & " " & Info_adresse.Cp & " " & Info_adresse.Cpville
adresse2 ne doit pas être une constante car il est constitué de "choses" variables . Faire ceci plutôt :
VB:Sub RecupPositions() Dim adresse2 As String adresse2 = Info_adresse.TextBox1 & " " & Info_adresse.Cp & " " & Info_adresse.Cpville
Sub PositionAvecNominatim(adresse)
Dim http As Object, objDom As Object, res
Const BaseURL = "https://nominatim.openstreetmap.org/search.php?format=xml&q="
Set http = CreateObject("MSXML2.XMLHTTP")
Set objDom = CreateObject("MSXML2.DOMDocument.6.0")
URL = BaseURL & adresse
On Error Resume Next
With http
.Open "GET", URL, False
.Send
res = .responseText
End With
Set http = Nothing
'Debug.Print res
objDom.LoadXML res
With Worksheets("MaPosition")
'Debug.Print "======== Position avec OpenStreetMap Nominatim ========="
Debug.Print objDom.SelectSingleNode("//place").getAttribute("lat") _
& " " & objDom.SelectSingleNode("//place").getAttribute("lon")
.Range("D2") = Info_adresse.TextBox1 & " " & Info_adresse.Cp & " " & Info_adresse.Cpville
.Range("B2") = Info_adresse.Cpville
.Range("G2") = objDom.SelectSingleNode("//place").getAttribute("lon")
.Range("H2") = objDom.SelectSingleNode("//place").getAttribute("lat")
End With
Set objDom = Nothing
End Sub
Sub RecupPositions()
Dim adresse2 As String
adresse2 = Info_adresse.TextBox1 & " " & Info_adresse.Cp & " " & Info_adresse.Cpville
PositionAvecNominatim adresse2
End Sub
Le mieux en fait c'est googlepapis (qui pointe sur ton logement)
oops 🤭 googlepapis c'est pour les anciensLe mieux en fait c'est googlepapis
We use cookies and similar technologies for the following purposes:
Est ce que vous acceptez les cookies et ces technologies?
We use cookies and similar technologies for the following purposes:
Est ce que vous acceptez les cookies et ces technologies?