Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Adresse Ip

9 réponses
Avatar
StDonat
Bonjour
J’ai une application qui tourne sur un réseau d’entreprise et j’aurai besoin
de localiser l’utilisateur, afin de l’orienter différemment selon d’où il se
connecte. Pour cela il faudrait que je puisse récupérer, par VBA, son adresse
IP ?
Es-ce possible, et comment faire ?
Merci

9 réponses

Avatar
Misange
Bonsoir
c'est là :
http://www.excelabo.net/trucs/adresseIP
Misange

StDonat a écrit :
Bonjour
J’ai une application qui tourne sur un réseau d’entreprise et j’aurai besoin
de localiser l’utilisateur, afin de l’orienter différemment selon d’où il se
connecte. Pour cela il faudrait que je puisse récupérer, par VBA, son adresse
IP ?
Es-ce possible, et comment faire ?
Merci



Avatar
Péhemme
Bonsoir StDonat,

Je ne sais plus qui (un guru de ce forum) a publié ceci, il y a fort
longtemps.
S'il se reconnait, merci à lui (mais merci à tous les gurus en général).
Cette macro fonctionnait sous Windoxs XP et Excel 2003.
Michel

Sub IP_Address()
Dim ws As Object, fso As Object, Env As Object, ts As Object
Dim wFile As String, IP As String

Set ws = CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
Set Env = ws.Environment("PROCESS")
If Env("OS") = "Windows_NT" Then
wFile = fso.gettempname
ws.Run "%comspec% /c ipconfig > " & wFile, 0, True
Else
wFile = "winipcfg.out"
ws.Run "winipcfg /batch", 0, True
End If
Set ws = Nothing
Set ts = fso.opentextfile(wFile)
Do While Not ts.AtEndOfStream
IP = ts.Readline
If InStr(1, IP, "Adresse IP", 1) <> 0 Then
IP = Right(IP, Len(IP) - InStr(1, IP, ":", 1) - 1)
MsgBox IP
Exit Do
End If
Loop
ts.Close
Set ts = Nothing
fso.deletefile wFile
Set fso = Nothing
End Sub

"StDonat" a écrit dans le message de
news:
Bonjour
J’ai une application qui tourne sur un réseau d’entreprise et j’aurai
besoin
de localiser l’utilisateur, afin de l’orienter différemment selon d’où il
se
connecte. Pour cela il faudrait que je puisse récupérer, par VBA, son
adresse
IP ?
Es-ce possible, et comment faire ?
Merci



Avatar
FS
Bonjour,

Pour ce que j'en sais, il faut passer par internet pour récupérer son
adresse IP dite "publique". Du moins lorsqu'on est derrière un routeur
(et dans ce cas les solutions proposées renvoient l'adresse locale
attribuée par le routeur).
J'ai bidouillé un peu un code trouvé sur internet
(http://faq.vb.free.fr/index.php?question8) qui ne fonctionne pas
chez moi avec le site retenu. Je suis passé par http://www.mon-ip.com/
et ça paraît donner le résultat attendu :

'==========================(dans un module ordinaire)
'
' API permettant de récupérer le contenu d'une page Web dans un fichier
'
Private Declare Function URLDownloadToFile Lib "urlmon" _
Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szUrl As
String, _
ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB
As Long) As Long

'
' Exemple d'utilisation de GetPublicIP
'
Sub essai()
Dim ip As String
Dim ret As Boolean

ret = GetPublicIP(ip)
If ret Then
MsgBox "Votre IP publique est : " & ip
Else
MsgBox "impossible de lire l'adresse IP"
End If
End Sub

'
' Lit le contenu d'un fichier et retourne un buffer
'
Public Function readFromFile(ByVal szFileName As String, ByRef buf As
String) As Boolean
Dim f As Integer

On Error GoTo readFromFile_err

f = FreeFile
Open szFileName For Binary As #f
buf = Space$(LOF(f))
Get #f, , buf
Close #f
readFromFile = True

readFromFile_ok:
Exit Function
readFromFile_err:
Resume readFromFile_ok
End Function

'
' Appelle URLDownloadToFile et stocke le résultat dans un fichier
'
Function DownloadPage(ByVal url As String, ByVal FileName As String) As
Boolean
Dim done As Boolean
Dim value As Long

On Error Resume Next

done = True
If Dir$(FileName) <> "" Then
Kill FileName
End If
value = URLDownloadToFile(0, url, FileName, 0, 0)
If Dir$(FileName) = "" Then
done = False
End If
DownloadPage = done
End Function

'
' Retourne le contenu d'une page Web dans une chaine de caractères
'
Public Function getHtmlFromUrl(ByVal szUrl As String, ByRef szBuf As
String) As Boolean
Dim ret As Boolean

ret = DownloadPage(szUrl, "d:my_temp_ip.dat")
If ret Then
ret = readFromFile("d:my_temp_ip.dat", szBuf)
End If
getHtmlFromUrl = ret
Kill "d:my_temp_ip.dat"
End Function

'
' Retourne l'adresse IP publique
'
Public Function GetPublicIP(ByRef szIP) As Boolean

Dim szBuf As String, S As String
Dim p As Long
Dim ret As Boolean

ret = getHtmlFromUrl("http://www.mon-ip.com/", szBuf)
S = Left(Split(szBuf, "var Ip = """)(1), 20)
szIP = Split(S, """;")(0)
GetPublicIP = True

End Function
'=========================
FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/

StDonat a écrit :
Bonjour
J’ai une application qui tourne sur un réseau d’entreprise et j’aurai besoin
de localiser l’utilisateur, afin de l’orienter différemment selon d’où il se
connecte. Pour cela il faudrait que je puisse récupérer, par VBA, son adresse
IP ?
Es-ce possible, et comment faire ?
Merci



Avatar
FS
Petite précision. Je n'ai posté ce code que pour faire avancer le
schmilblick, contrairement à ce que ma formulation pouvait laisser croire :

> (et dans ce cas les solutions proposées renvoient l'adresse locale
> attribuée par le routeur).

Ce qui était bien la demande de "StDonat" :)

FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/

FS a écrit :
Bonjour,

Pour ce que j'en sais, il faut passer par internet pour récupérer son
adresse IP dite "publique". Du moins lorsqu'on est derrière un routeur
(et dans ce cas les solutions proposées renvoient l'adresse locale
attribuée par le routeur).
J'ai bidouillé un peu un code trouvé sur internet
(http://faq.vb.free.fr/index.php?question8) qui ne fonctionne pas
chez moi avec le site retenu. Je suis passé par http://www.mon-ip.com/
et ça paraît donner le résultat attendu :

'==========================(dans un module ordinaire)
'
' API permettant de récupérer le contenu d'une page Web dans un fichier
'
Private Declare Function URLDownloadToFile Lib "urlmon" _
Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szUrl As
String, _
ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB
As Long) As Long

'
' Exemple d'utilisation de GetPublicIP
'
Sub essai()
Dim ip As String
Dim ret As Boolean

ret = GetPublicIP(ip)
If ret Then
MsgBox "Votre IP publique est : " & ip
Else
MsgBox "impossible de lire l'adresse IP"
End If
End Sub

'
' Lit le contenu d'un fichier et retourne un buffer
'
Public Function readFromFile(ByVal szFileName As String, ByRef buf As
String) As Boolean
Dim f As Integer

On Error GoTo readFromFile_err

f = FreeFile
Open szFileName For Binary As #f
buf = Space$(LOF(f))
Get #f, , buf
Close #f
readFromFile = True

readFromFile_ok:
Exit Function
readFromFile_err:
Resume readFromFile_ok
End Function

'
' Appelle URLDownloadToFile et stocke le résultat dans un fichier
'
Function DownloadPage(ByVal url As String, ByVal FileName As String) As
Boolean
Dim done As Boolean
Dim value As Long

On Error Resume Next

done = True
If Dir$(FileName) <> "" Then
Kill FileName
End If
value = URLDownloadToFile(0, url, FileName, 0, 0)
If Dir$(FileName) = "" Then
done = False
End If
DownloadPage = done
End Function

'
' Retourne le contenu d'une page Web dans une chaine de caractères
'
Public Function getHtmlFromUrl(ByVal szUrl As String, ByRef szBuf As
String) As Boolean
Dim ret As Boolean

ret = DownloadPage(szUrl, "d:my_temp_ip.dat")
If ret Then
ret = readFromFile("d:my_temp_ip.dat", szBuf)
End If
getHtmlFromUrl = ret
Kill "d:my_temp_ip.dat"
End Function

'
' Retourne l'adresse IP publique
'
Public Function GetPublicIP(ByRef szIP) As Boolean

Dim szBuf As String, S As String
Dim p As Long
Dim ret As Boolean

ret = getHtmlFromUrl("http://www.mon-ip.com/", szBuf)
S = Left(Split(szBuf, "var Ip = """)(1), 20)
szIP = Split(S, """;")(0)
GetPublicIP = True

End Function
'========================= >
FS


Avatar
Misange
Salut Frédéric
mais tu as raison, on est de plus en plus souvent derrière un routeur et
c'est bien de savoir ce qu'on récupère !
j'archive ;-)
Misange

FS a écrit :
Petite précision. Je n'ai posté ce code que pour faire avancer le
schmilblick, contrairement à ce que ma formulation pouvait laisser croire :

> (et dans ce cas les solutions proposées renvoient l'adresse locale
> attribuée par le routeur).

Ce qui était bien la demande de "StDonat" :)

FS


Avatar
FS
Bonjour Florence,

Si tu archives, je te suggère de préférer cette version, un peu plus
"compacte" et commentée :

'======================== Private Declare Function URLDownloadToFile Lib "urlmon" _
Alias "URLDownloadToFileA" _
(ByVal pCaller As Long, _
ByVal szUrl As String, _
ByVal szFileName As String, _
ByVal dwReserved As Long, _
ByVal lpfnCB As Long) As Long

Private Declare Function DeleteUrlCacheEntry Lib "Wininet.dll" _
Alias "DeleteUrlCacheEntryA" _
(ByVal lpszUrlName As String) As Long

Sub essai()
MsgBox "Adresse IP publique : " & AdresseIP_Publique
End Sub


Function AdresseIP_Publique()
Dim sSourceURL As String, sLocalFile As String
Dim NumFile As Integer, LenFile As Long
Dim sVarFile As String, S As String

'site où récupérer l'adresse IP
sSourceURL = "http://www.mon-ip.com/"
'fichier temporaire où récupérer le contenu de la page html
sLocalFile = "c:ip.txt"

's'assurer que la page n'est pas en cache
DeleteUrlCacheEntry sSourceURL

'récupération du contenu de la page dans un fichier temporaire
If URLDownloadToFile(0, sSourceURL, sLocalFile, 0, 0) <> 0 Then
S = "Impossible d'atteindre l'adresse " & sSourceURL
Else
'affectation de l'ensemble du contenu du fichier à une variable
NumFile = FreeFile()
Open sLocalFile For Input As #NumFile
LenFile = FileLen(sLocalFile)
sVarFile = Input(LenFile, NumFile)
Close NumFile

'récupération de l'adresse dans le contenu du fichier
S = Split(Left(Split(sVarFile, "var Ip = """)(1), 20), """;")(0)

'nettoyage
Kill sLocalFile
End If

'et renvoi
AdresseIP_Publique = S
End Function
'========================
FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/

Misange a écrit :
Salut Frédéric
mais tu as raison, on est de plus en plus souvent derrière un routeur et
c'est bien de savoir ce qu'on récupère !
j'archive ;-)
Misange

FS a écrit :
Petite précision. Je n'ai posté ce code que pour faire avancer le
schmilblick, contrairement à ce que ma formulation pouvait laisser
croire :

> (et dans ce cas les solutions proposées renvoient l'adresse locale
> attribuée par le routeur).

Ce qui était bien la demande de "StDonat" :)

FS




Avatar
Misange
merci !
Misange

FS a écrit :
Bonjour Florence,

Si tu archives, je te suggère de préférer cette version, un peu plus
"compacte" et commentée :

'======================== > Private Declare Function URLDownloadToFile Lib "urlmon" _
Alias "URLDownloadToFileA" _
(ByVal pCaller As Long, _
ByVal szUrl As String, _
ByVal szFileName As String, _
ByVal dwReserved As Long, _
ByVal lpfnCB As Long) As Long

Private Declare Function DeleteUrlCacheEntry Lib "Wininet.dll" _
Alias "DeleteUrlCacheEntryA" _
(ByVal lpszUrlName As String) As Long

Sub essai()
MsgBox "Adresse IP publique : " & AdresseIP_Publique
End Sub


Function AdresseIP_Publique()
Dim sSourceURL As String, sLocalFile As String
Dim NumFile As Integer, LenFile As Long
Dim sVarFile As String, S As String

'site où récupérer l'adresse IP
sSourceURL = "http://www.mon-ip.com/"
'fichier temporaire où récupérer le contenu de la page html
sLocalFile = "c:ip.txt"

's'assurer que la page n'est pas en cache
DeleteUrlCacheEntry sSourceURL

'récupération du contenu de la page dans un fichier temporaire
If URLDownloadToFile(0, sSourceURL, sLocalFile, 0, 0) <> 0 Then
S = "Impossible d'atteindre l'adresse " & sSourceURL
Else
'affectation de l'ensemble du contenu du fichier à une variable
NumFile = FreeFile()
Open sLocalFile For Input As #NumFile
LenFile = FileLen(sLocalFile)
sVarFile = Input(LenFile, NumFile)
Close NumFile

'récupération de l'adresse dans le contenu du fichier
S = Split(Left(Split(sVarFile, "var Ip = """)(1), 20), """;")(0)

'nettoyage
Kill sLocalFile
End If

'et renvoi
AdresseIP_Publique = S
End Function
'======================== >
FS


Avatar
StDonat
Merci FS
C'est juste ce que je voulais!


"FS" wrote:

Bonjour,

Pour ce que j'en sais, il faut passer par internet pour récupérer son
adresse IP dite "publique". Du moins lorsqu'on est derrière un routeur
(et dans ce cas les solutions proposées renvoient l'adresse locale
attribuée par le routeur).
J'ai bidouillé un peu un code trouvé sur internet
(http://faq.vb.free.fr/index.php?question8) qui ne fonctionne pas
chez moi avec le site retenu. Je suis passé par http://www.mon-ip.com/
et ça paraît donner le résultat attendu :

'==========================(dans un module ordinaire)
'
' API permettant de récupérer le contenu d'une page Web dans un fichier
'
Private Declare Function URLDownloadToFile Lib "urlmon" _
Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szUrl As
String, _
ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB
As Long) As Long

'
' Exemple d'utilisation de GetPublicIP
'
Sub essai()
Dim ip As String
Dim ret As Boolean

ret = GetPublicIP(ip)
If ret Then
MsgBox "Votre IP publique est : " & ip
Else
MsgBox "impossible de lire l'adresse IP"
End If
End Sub

'
' Lit le contenu d'un fichier et retourne un buffer
'
Public Function readFromFile(ByVal szFileName As String, ByRef buf As
String) As Boolean
Dim f As Integer

On Error GoTo readFromFile_err

f = FreeFile
Open szFileName For Binary As #f
buf = Space$(LOF(f))
Get #f, , buf
Close #f
readFromFile = True

readFromFile_ok:
Exit Function
readFromFile_err:
Resume readFromFile_ok
End Function

'
' Appelle URLDownloadToFile et stocke le résultat dans un fichier
'
Function DownloadPage(ByVal url As String, ByVal FileName As String) As
Boolean
Dim done As Boolean
Dim value As Long

On Error Resume Next

done = True
If Dir$(FileName) <> "" Then
Kill FileName
End If
value = URLDownloadToFile(0, url, FileName, 0, 0)
If Dir$(FileName) = "" Then
done = False
End If
DownloadPage = done
End Function

'
' Retourne le contenu d'une page Web dans une chaine de caractères
'
Public Function getHtmlFromUrl(ByVal szUrl As String, ByRef szBuf As
String) As Boolean
Dim ret As Boolean

ret = DownloadPage(szUrl, "d:my_temp_ip.dat")
If ret Then
ret = readFromFile("d:my_temp_ip.dat", szBuf)
End If
getHtmlFromUrl = ret
Kill "d:my_temp_ip.dat"
End Function

'
' Retourne l'adresse IP publique
'
Public Function GetPublicIP(ByRef szIP) As Boolean

Dim szBuf As String, S As String
Dim p As Long
Dim ret As Boolean

ret = getHtmlFromUrl("http://www.mon-ip.com/", szBuf)
S = Left(Split(szBuf, "var Ip = """)(1), 20)
szIP = Split(S, """;")(0)
GetPublicIP = True

End Function
'========================= >
FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/

StDonat a écrit :
> Bonjour
> J’ai une application qui tourne sur un réseau d’entreprise et j’aurai besoin
> de localiser l’utilisateur, afin de l’orienter différemment selon d’où il se
> connecte. Pour cela il faudrait que je puisse récupérer, par VBA, son adresse
> IP ?
> Es-ce possible, et comment faire ?
> Merci
>
.



Avatar
fetnat
Bonjour,

En complément, j'avais archivé cette version de Michel Pierron
concernant l'IP des serveurs.

Fetnat


trouver l'IP des serveurs qui sont sur le réseau local
Michel Pierron

Sub GetIP()
Dim y&
With ThisWorkbook.Sheets("Serveur")
For y = 1 To .Cells(.Rows.Count, 2).End(xlUp).Row
On Error Resume Next
.Cells(y, 14) = IPA(.Cells(y, 2))
Next y
End With
End Sub

' Computer = "." => PC local
Private Function IPA(Computer$) As String
Dim IP As Object, i As Byte
For Each IP In GetObject("winmgmts:" & Computer & "rootcimv2") _
.ExecQuery("Select IPAddress from
Win32_NetworkAdapterConfiguration")
If Not IsNull(IP.IPAddress) Then
For i = LBound(IP.IPAddress) To UBound(IP.IPAddress)
If Len(IPA) Then IPA = IPA & vbLf
IPA = IPA & IP.IPAddress(i)
Next i
End If
Next IP
End Function


Misange a écrit :
merci !
Misange

FS a écrit :
Bonjour Florence,

Si tu archives, je te suggère de préférer cette version, un peu plus
"compacte" et commentée :

'======================== >> Private Declare Function URLDownloadToFile Lib "urlmon" _
Alias "URLDownloadToFileA" _
(ByVal pCaller As Long, _
ByVal szUrl As String, _
ByVal szFileName As String, _
ByVal dwReserved As Long, _
ByVal lpfnCB As Long) As Long

Private Declare Function DeleteUrlCacheEntry Lib "Wininet.dll" _
Alias "DeleteUrlCacheEntryA" _
(ByVal lpszUrlName As String) As Long

Sub essai()
MsgBox "Adresse IP publique : " & AdresseIP_Publique
End Sub


Function AdresseIP_Publique()
Dim sSourceURL As String, sLocalFile As String
Dim NumFile As Integer, LenFile As Long
Dim sVarFile As String, S As String

'site où récupérer l'adresse IP
sSourceURL = "http://www.mon-ip.com/"
'fichier temporaire où récupérer le contenu de la page html
sLocalFile = "c:ip.txt"

's'assurer que la page n'est pas en cache
DeleteUrlCacheEntry sSourceURL

'récupération du contenu de la page dans un fichier temporaire
If URLDownloadToFile(0, sSourceURL, sLocalFile, 0, 0) <> 0 Then
S = "Impossible d'atteindre l'adresse " & sSourceURL
Else
'affectation de l'ensemble du contenu du fichier à une variable
NumFile = FreeFile()
Open sLocalFile For Input As #NumFile
LenFile = FileLen(sLocalFile)
sVarFile = Input(LenFile, NumFile)
Close NumFile

'récupération de l'adresse dans le contenu du fichier
S = Split(Left(Split(sVarFile, "var Ip = """)(1), 20), """;")(0)

'nettoyage
Kill sLocalFile
End If

'et renvoi
AdresseIP_Publique = S
End Function
'======================== >>
FS