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 :

Requête ping depuis Excel en VB.


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Juin 2015
    Messages : 15
    Par défaut Requête ping depuis Excel en VB.
    Bonjour à tous,

    J'aimerai solliciter votre aide pour m'aider dans ma requête.

    Je possède une base de donnée Access avec des informations (un parc informatique ).
    Depuis Excel j'arrive à extraire certaines informations mais ma demande est la suivante:

    Comment peut-on depuis Excel et en VB lancer des requêtes PING sur les différentes adresse IP extraites.
    Et que selon le résultat ça m'affiche une cellule rouge ou verte.
    Les adresses IP extraites se situe toujours sur la même plage de cellule.

    En vous remerciant d'avance pour l'aide apporté.

    Lefanatique

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    VBA n'a rien en natif pour lancer un ping. Va falloir que tu regardes du côté de shell pour lancer un autre programme capable de le faire et récupérer la réponse de l'autre programme. Mais, vite fait comme cela, je ne connais pas la procédure exacte pour le faire comme du monde.

  3. #3
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, voir ici

  4. #4
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Juin 2015
    Messages : 15
    Par défaut
    Merci pour vos réponse.

    @clementmarcotte:
    Il me semble que cela est possible en VB car avant de poster sur ce forum j'ai trouvé 2-3 choses sans arriver à l'exploiter.
    https://msdn.microsoft.com/fr-fr/lib...v=vs.110).aspx
    Je m'avance peut-être aussi :s.

    @kiki29
    Est-ce qu'on est obliger d'utiliser tout le code en sont intégralité ou on peut commencer à la ligne 50 ?
    Désolé mais je ne comprend pas tout ce qu'il y a dans le code.

    Merci.

  5. #5
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, non, il y a aussi la FAQ ?

  6. #6
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour

    Citation Envoyé par Lefanatique Voir le message
    Merci pour vos réponse.

    @clementmarcotte:
    Il me semble que cela est possible en VB car avant de poster sur ce forum j'ai trouvé 2-3 choses sans arriver à l'exploiter.
    https://msdn.microsoft.com/fr-fr/lib...v=vs.110).aspx
    Je m'avance peut-être aussi :s.
    Merci.
    C'est parce que tu confonds VBA et VB.net. VBA est un langage qui descend, du moins en partie de VB6 et qui doit être lié à l'application qui l'héberge. VB6 descend des premiers BASIC de Microsoft pour MS-DOS dans à la fin des années 1970, mais adapté et amélioré pour supporter Windows.

    VB.net est le successeur de VB6, mais a été bâti à partir de zéro pour être un vrai langage de programmation orientée objet, avec un respect partiel de la compatibilité ascendante, et pas un langage de POO d'opérette comme VB6 et VBA qui font de la POO à s'arracher les cheveux. Quand tu vois Framework sur la page, c'est VB.net et pas VBA.

  7. #7
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, en faisant de l'archéologie informatique j'ai retrouvé ceci
    A adapter à ton contexte, ici on sélectionne les adresses ip en A1:Ax puis on lance la procédure "Boucle_Sur_Selection"
    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
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    Option Explicit
     
    Const SOCKET_ERROR = 0
     
    Private Type WSAdata
        wVersion As Integer
        wHighVersion As Integer
        szDescription(0 To 255) As Byte
        szSystemStatus(0 To 128) As Byte
        iMaxSockets As Integer
        iMaxUdpDg As Integer
        lpVendorInfo As Long
    End Type
     
    Private Type Hostent
        h_name As Long
        h_aliases As Long
        h_addrtype As Integer
        h_length As Integer
        h_addr_list As Long
    End Type
     
    Private Type IP_OPTION_INFORMATION
        TTL As Byte
        Tos As Byte
        Flags As Byte
        OptionsSize As Long
        OptionsData As String * 128
    End Type
     
    Private Type IP_ECHO_REPLY
        Address(0 To 3) As Byte
        Status As Long
        RoundTripTime As Long
        DataSize As Integer
        Reserved As Integer
        data As Long
        Options As IP_OPTION_INFORMATION
    End Type
     
    Private Declare Function GetHostByName Lib _
                                           "wsock32.dll" Alias "gethostbyname" _
                                           (ByVal HostName As String) As Long
     
    Private Declare Function WSAStartup Lib _
                                        "wsock32.dll" (ByVal wVersionRequired&, _
                                                       lpWSAdata As WSAdata) As Long
     
    Private Declare Function WSACleanup Lib "wsock32.dll" _
                                        () As Long
     
    Private Declare Sub CopyMemory Lib "kernel32" _
                                   Alias "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, _
                                                          ByVal cbCopy As Long)
     
    Private Declare Function IcmpCreateFile Lib "icmp.dll" _
                                            () As Long
     
    Private Declare Function IcmpCloseHandle Lib "icmp.dll" _
                                             (ByVal HANDLE As Long) As Boolean
     
    Private Declare Function IcmpSendEcho Lib "ICMP" _
                                          (ByVal IcmpHandle As Long, ByVal DestAddress As Long, _
                                           ByVal RequestData As String, _
                                           ByVal RequestSize As Integer, RequestOptns As _
                                                                         IP_OPTION_INFORMATION, ReplyBuffer As IP_ECHO_REPLY, _
                                           ByVal ReplySize As Long, ByVal TimeOut As Long) As Boolean
     
    Private Function IP_connect(HostName)
    Dim hFile As Long, lpWSAdata As WSAdata
    Dim hHostent As Hostent, AddrList As Long
    Dim Address As Long, rIP As String
    Dim OptInfo As IP_OPTION_INFORMATION
    Dim EchoReply As IP_ECHO_REPLY
     
        WSAStartup &H101, lpWSAdata
     
        If GetHostByName(HostName + String(64 - Len(HostName), 0)) <> SOCKET_ERROR Then
            CopyMemory hHostent.h_name, ByVal GetHostByName(HostName + String(64 - Len(HostName), 0)), Len(hHostent)
            CopyMemory AddrList, ByVal hHostent.h_addr_list, 4
            CopyMemory Address, ByVal AddrList, 4
        End If
     
        hFile = IcmpCreateFile()
     
        If hFile = 0 Then
            IP_connect = "Unable to Create File Handle"
            Exit Function
        End If
     
        OptInfo.TTL = 255
     
        If IcmpSendEcho(hFile, Address, _
                        String(32, "A"), 32, OptInfo, EchoReply, _
                        Len(EchoReply) + 8, 2000) Then
     
            rIP = CStr(EchoReply.Address(0)) + _
                  "." + CStr(EchoReply.Address(1)) + "." + _
                  CStr(EchoReply.Address(2)) + "." + _
                  CStr(EchoReply.Address(3))
        Else
            IP_connect = "Timeout"
        End If
     
        If EchoReply.Status = 0 Then
            IP_connect = "Reply from " + HostName + " (" + rIP _
                         + ") received after " + _
                         Trim$(CStr(EchoReply.RoundTripTime)) + "ms"
        Else
            IP_connect = "Failure ..."
        End If
     
        IcmpCloseHandle (hFile)
        WSACleanup
     
    End Function
     
    Sub Boucle_Sur_Selection()
    Dim Sel As Range
    Dim Cel As Range
    Dim message As String
     
        Set Sel = Selection
     
        For Each Cel In Sel
            message = IP_connect(Cel.Value)
            ActiveCell = Cel
            ActiveCell.Offset(0, 1) = message
            ActiveCell.Offset(0, 2) = Time
            ActiveCell.Offset(1, 0).Range("A1").Select
        Next Cel
     
        Columns("A:C").EntireColumn.AutoFit
        Set Sel = Nothing
    End Sub
    Images attachées Images attachées  

  8. #8
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Juin 2015
    Messages : 15
    Par défaut
    Bonjour,

    .. commentaire qui arrive un peu à la bourre, désolé...

    Quand je teste le code du commentaire précédent j'obtiens l'erreur suivante :

    "
    Erreur de compilation:

    Seuls des commentaires peuvent apparaître après End SuB, End Function, ou End Property. "

    Sur la ligne : " Private declare function GetHostByName Lib _ etc ....

    Avez vous une idée?
    Merci.

  9. #9
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Les déclarations d'appel des fonctions de Library doivent être placées en entête du module. Tout en haut en dessous des Option (Explicit et/ou Base) si tu en as.

    Exemple :
    correct :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Option Explicit
     
    Private declare function GetHostByName Lib _etc...
     
    Sub Untelle()
     
    End Sub
    Erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Option Explicit
     
    Sub Untelle()
     
    End Sub
     
    Private declare function GetHostByName Lib _etc...

  10. #10
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Juin 2015
    Messages : 15
    Par défaut
    Ok je vais faire le test et je reviendrais pour confirmer que j'ai réussi .. ou pas.

    merci encore.

Discussions similaires

  1. [XL-2010] Passage de paramètre dans une requête ACCESS depuis EXCEL
    Par shakapouet dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/02/2017, 11h52
  2. [VBA] [5.1.8] Créer une requête BO (via Macro depuis Excel)
    Par Bretonnie dans le forum SDK
    Réponses: 6
    Dernier message: 08/04/2015, 18h20
  3. [Excel 2003-2007] requêtes SQL vers une base access depuis Excel
    Par .Spirit dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 27/10/2010, 17h03
  4. [AC-2007] Importation d'un requête depuis Excel 2007
    Par bonobar dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 06/08/2010, 11h46
  5. Requête d'insertion depuis Excel
    Par basticx35 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/05/2010, 14h16

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