IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Récupérer adresse IP


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 55
    Points : 38
    Points
    38
    Par défaut Récupérer adresse IP
    Bonjour,

    lors de l'éxecution d'une macro, je dois remplir des cellules avec un chemin préfixé de l'adresse IP de la ou est exéctuée la macro. Je ne veux à aucun moment devoir spécifier l'ip car la macro sera executé sur des machines différentes..

    J'ai essayé avec la méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Excel.Application.ActiveWorkbook.Path
    et avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GetAbsolutePathName(..)
    mais les deux me renvoient une lettre, en l'occurence Y:\ au lieu de \\126.150

    Auriez vous une idée??

    Merci beaucoup!!

    Bruno

  2. #2
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Points : 9 402
    Points
    9 402
    Par défaut
    Je pense qu'il va falloir te tourner vers les API.

    Sur ce lien tu trouvera sans doute ton bonheur
    http://docvb.free.fr/api.php

    Jérôme

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 55
    Points : 38
    Points
    38
    Par défaut
    En passant par ton lien, j'ai pu trouver ce code qui fonctionne. Il me renvoie bien une IP... mais c'est celle de la machine à partir de laquelle j'éxecute Excel et non pas celle sur laquelle se trouve mon fichier que je suis en train de modifier (ex : excel se trouve sur la machine A, mon fichier sur la B.. il me renvoie l'ip de la A alors que je voudrais celle de la B) ... .. n'y connaissant vraiment pas grand chose en VB et devant trouver une solution rapidement je crie encore au secours!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    ' Déclaration des types
    Public Type HOSTENT
        hName As Long
        hAliases As Long
        hAddrType As Integer
        hLength As Integer
        hAddrList As Long
    End Type
     
    Public Type WSADATA
        wversion As Integer
        wHighVersion As Integer
        szDescription(0 To 256) As Byte
        szSystemStatus(0 To 128) As Byte
        iMaxSockets As Integer
        iMaxUpDg As Integer
        lpszVendorInfo As Long
    End Type
     
    ' Déclarations des fonctions API
    Public Declare Function WSAStartup Lib "WSOCK32.DLL" _
         (ByVal wversion&, lpWSAData As WSADATA) As Long
    Public Declare Function WSACleanup Lib "WSOCK32.DLL" () As Long
     
    Public Declare Function gethostname Lib "WSOCK32.DLL" _
         (ByVal hostname As String, ByVal HostLen As Integer) As Long
    Public Declare Function gethostbyname Lib "WSOCK32.DLL" _
         (ByVal hostname As String) As Long
     
    Public Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" _
         (Dest As Any, ByVal source As Long, ByVal cbCopy As Long)
     
    Private Const SOCKET_ERROR = -1
     
    ' Type utilisateur
    Public Type IPtype
        Nom As String * 256
        AdresseIP As String * 64
    End Type
     
    ' Origine : Janick Tremblay
    ' E-mail : <a href="mailto:jafi@videotron.ca">jafi@videotron.ca</a>
     
    Public Function ObtenirAdresseIP() As IPtype
    ' Cette fonction récupère le nom et
    ' l'adresse IP de la machine locale
    Dim WSAD As WSADATA
    Dim host As HOSTENT
    Dim lgRetVal As Long
    Dim stNom As String * 256
    Dim lgAdresse As Long
    Dim stIPadr As String
    Dim Temp() As Byte
    Dim lgFor As Long
    ' Initialisation
    ObtenirAdresseIP.Nom = vbNullString
    ObtenirAdresseIP.AdresseIP = vbNullString
    ' Vérifie l'accès à la DLL
    If (WSAStartup(&H101, WSAD) <> 0) Then
        MsgBox "WINSOCK.DLL ne répond pas.", vbExclamation, "Echec"
        Exit Function
    End If
    ' Récupération du nom
    If (gethostname(stNom, Len(stNom)) = SOCKET_ERROR) Then
        MsgBox "Erreur Winsock", vbExclamation, "Echec"
        Exit Function
    End If
    ' Récupération de l'adresse IP
    lgAdresse = gethostbyname(stNom)
    If (lgAdresse = 0) Then
        MsgBox "WINSOCK.DLL ne répond pas.", vbExclamation, "Echec"
        Exit Function
    End If
     
    CopyMemory host, lgAdresse, Len(host)
    CopyMemory lgAdresse, host.hAddrList, 4
    ReDim Temp(1 To host.hLength)
    CopyMemory Temp(1), lgAdresse, host.hLength
    ' Récomposition de l'adresse
    For lgFor = 1 To host.hLength
        stIPadr = stIPadr & Temp(lgFor) & "."
    Next lgFor
    stIPadr = Left$(stIPadr, Len(stIPadr) - 1)
    lgRetVal = WSACleanup()
    ' Retourne les valeurs
    ObtenirAdresseIP.Nom = stNom
    ObtenirAdresseIP.AdresseIP = stIPadr
    End Function
     
    Public Sub Main()
    Dim Adr As IPtype
    Dim stNom As String, stAdr As String
    Dim lgTmp As Long
    ' Récupération des informations
    Adr = ObtenirAdresseIP
    lgTmp = InStr(Adr.Nom, Chr$(0))
    If (lgTmp <> 0) Then
        stNom = "Nom = " & Left$(Adr.Nom, lgTmp - 1)
        stAdr = Trim$(Adr.AdresseIP)
    End If
    ' Affiche le résultat
    MsgBox stNom & vbCrLf & "Adresse IP = " & stAdr, vbOKOnly, "IP"
    End Sub

  4. #4
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Points : 9 402
    Points
    9 402
    Par défaut
    Ci dessous un code qui te permet d'avoir l'IP de la machine que tu souhaites
    il suffit d'appeler la fonction GetIPAddress(Nom de la machine)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
     
    Private Declare Function WSAStartup Lib "wsock32" (ByVal wVersionRequired As Long, lpWSADATA As WSADATA) As Long
    Private Declare Function WSACleanup Lib "wsock32" () As Long
    Private Declare Function gethostname Lib "wsock32" (ByVal szHost As String, ByVal dwHostLen As Long) As Long
    Private Declare Function gethostbyname Lib "wsock32" (ByVal HostName As String) As Long
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (xDest As Any, xSource As Any, ByVal nBytes As Long)
    Private Const MAX_WSADescription As Long = 256
    Private Const MAX_WSASYSStatus As Long = 128
    Private Const WS_VERSION_REQD     As Long = &H101
    Private Const IP_SUCCESS As Long = 0
    Private Const SOCKET_ERROR As Long = -1
    Private Const NO_ERROR = 0
    Public Type WSADATA
       wVersion                                 As Integer
       wHighVersion                             As Integer
       szDescription(0 To MAX_WSADescription)   As Byte
       szSystemStatus(0 To MAX_WSASYSStatus)    As Byte
       wMaxSockets                              As Integer
       wMaxUDPDG                                As Integer
       dwVendorInfo                             As Long
    End Type
    Public Type Hostent
       hName      As Long
       hAliases   As Long
       hAddrType  As Integer
       hLen       As Integer
       hAddrList  As Long
    End Type
     
    ' Renvoie l'adresse IP
    Public Function GetIPAddress(ByVal Machine As String) As String
        Dim sHostName   As String * 256
        Dim lpHost      As Long
        Dim HOST        As Hostent
        Dim dwIPAddr    As Long
        Dim tmpIPAddr() As Byte
        Dim i           As Integer
        Dim sIPAddr     As String
     
        If Not SocketsInitialize() Then
            GetIPAddress = ""
            Exit Function
        End If
        ' Si GetHostName ne marche pas
        If gethostname(sHostName, 256) = SOCKET_ERROR Then
            GetIPAddress = ""
            Call SocketsCleanup
            Exit Function
        End If
        sHostName = Trim$(sHostName)
        'lpHost = gethostbyname(sHostName)
        lpHost = gethostbyname(Machine)
        ' Si l'adresse récupérée est vide
        If lpHost = 0 Then
            GetIPAddress = ""
            Call SocketsCleanup
            Exit Function
        End If
        ' On formate l'adresse pour qu'elle soit de la forme xxx.xxx.xxx.xxx
        CopyMemory HOST, ByVal lpHost, Len(HOST)
        CopyMemory dwIPAddr, ByVal HOST.hAddrList, 4
        ReDim tmpIPAddr(1 To HOST.hLen)
        CopyMemory tmpIPAddr(1), ByVal dwIPAddr, HOST.hLen
        For i = 1 To HOST.hLen
            sIPAddr = sIPAddr & tmpIPAddr(i) & "."
        Next
        ' On renvoie la valeur
        GetIPAddress = Mid$(sIPAddr, 1, Len(sIPAddr) - 1)
        Call SocketsCleanup
    End Function
     
    ' Vide le socket
    Public Function SocketsCleanup()
        SocketsCleanup = IIf(WSACleanup() = 0, True, False)
    End Function
     
    ' Initialise le socket
    Public Function SocketsInitialize() As Boolean
        Dim WSAD As WSADATA
        SocketsInitialize = WSAStartup(WS_VERSION_REQD, WSAD) = IP_SUCCESS
    End Function
    Jérôme

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 55
    Points : 38
    Points
    38
    Par défaut
    Merci mais je devais pouvoir récupérer cette information sans spécifier de nom de machine pour l'execution se fasse de manière transparente... J'abandonne, je vais stocker dans un fichier texte cette info qui devra être modifiée à chaque exécution sur un serveur différent...

    Encore merci tout de même!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. récupérer adresse IP d'une imprimante réseau
    Par anonymkim dans le forum VBA Access
    Réponses: 5
    Dernier message: 21/06/2006, 07h55
  2. Récupérer adresse erronnée + envoi par mail
    Par Cid67 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 10/04/2006, 12h17
  3. récupérer adresse ip
    Par mussara dans le forum Langage
    Réponses: 3
    Dernier message: 05/04/2006, 11h56
  4. Récupérer adresse IP client avec Internet Explorer
    Par samyrentier dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 24/03/2006, 17h41
  5. [CF][C#] Comment récupérer adresse Mac d'un PPC ?
    Par JBernn dans le forum Windows Mobile
    Réponses: 18
    Dernier message: 12/01/2006, 19h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo