Ping depuis excel cellule par cellule.

Mortith

XLDnaute Nouveau
Bonjour,
Etant un débutant sur excel, je ne sais pas créer de macro mais dans le cadre d'un stage informatique, il se peut que j'en ai besoin.
J'ai déjà trouvé quelques réponses sur divers forums mais aucune correspondant exactement à ce que je cherche.
Mon problème est le suivant: Je dispose d'un grand nombre d'adresses IP sur une feuille excel et j'aimerais pouvoir les ping en affichant le résultant de la requête d’écho dans la case à côté ainsi que la date du ping.
Seulement voilà, parmi toutes les réponses que j'ai pu trouvé sur le net, toutes proposaient un ping "collectif". Je voudrai savoir s'il était possible, d'une manière ou d'une autre, de ping une seule cellule en particulier(en la sélectionnant,là aussi, d'une quelconque façon)?
Merci d'avance pour votre aide.
Cordialement.
 

Lolote83

XLDnaute Barbatruc
Re : Ping depuis excel cellule par cellule.

Salut MORTITH,
Voir ici peut être.
Cordialement
Lolote83
 

Pièces jointes

  • Copie de MORTITH - Ping une adresse.xlsm
    31.2 KB · Affichages: 400
  • Copie de MORTITH - Ping une adresse.xlsm
    31.2 KB · Affichages: 244
  • Copie de MORTITH - Ping une adresse.xlsm
    31.2 KB · Affichages: 282

MichD

XLDnaute Impliqué
Re : Ping depuis excel cellule par cellule.

Bonjour,

Essaie comme ceci :

Dans ta plage de cellules, les adresses doivent être saisies de cette manière :

Excel Downloads
Accueil de Cjoint.com
answers.microsoft.com

VB:
Sub Ping_Adresse_IP()
    Dim Rg As Range
    Dim c As Range
    Dim Message, V As String
    Dim Sh As Worksheet

'************ Variable à définir*****************
Set Sh = Worksheets("Feuil1")
'***********************************************

With Sh
    'Définir la plage de cellules où sont les adresses
    Set Rg = .Range("A1:A" & .Range("A" & .Cells.Rows.Count).End(xlUp).Row)
End With

For Each c In Rg
    Message = sPing(c)
    c.Offset(, 1) = Message
    c.Offset(, 2) = Time
Next
Sh.Columns("A:C").EntireColumn.AutoFit
Set Rg = Nothing: Set c = Nothing: Set Sh = Nothing
End Sub
'---------------------------------------------------------


Cette fonction émane de ce site Web
[URL="https://social.technet.microsoft.com/Forums/scriptcenter/en-us/e59a38e1-eaf0-4b13-af10-fd4be559f50f/ping-from-vba-in-excel"]https://social.technet.microsoft.com/Forums/scriptcenter/en-us/e59a38e1-eaf0-4b13-af10-fd4be559f50f/ping-from-vba-in-excel[/URL]
'---------------------------------------------------------
Function sPing(sHost) As String
Dim oPing As Object, oRetStatus As Object

Set oPing = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery _
("select * from Win32_PingStatus where address = '" & sHost & "'")

For Each oRetStatus In oPing
    If IsNull(oRetStatus.StatusCode) Or oRetStatus.StatusCode <> 0 Then
        sPing = "Status code is " & oRetStatus.StatusCode
    Else
        sPing = "Pinging " & sHost & " with " & oRetStatus.BufferSize & " bytes of data:" & Chr(10) & Chr(10)
        sPing = sPing & "Time (ms) = " & vbTab & oRetStatus.ResponseTime & Chr(10)
        sPing = sPing & "TTL (s) = " & vbTab & vbTab & oRetStatus.ResponseTimeToLive
    End If
Next
End Function
 
Dernière édition:

Mortith

XLDnaute Nouveau
Re : Ping depuis excel cellule par cellule.

Merci de vos réponses!
Lolote83 : Ta solution se rapproche de ce que je cherche, serait-il possible de faire en sorte que l'on puisse effectuer un ping de la case sélectionnée? (c'est à dire de cliquer sur la cellule dans laquelle se trouve l'adresse et ensuite sur le bouton)

MichD : Comme je suis étranger à ce langage, je ne comprends pas comment le mettre en place. Quelles lignes dois-je modifier pour régler la plage de cellules dans lesquelles se trouveront les adresses?
 

Lolote83

XLDnaute Barbatruc
Re : Ping depuis excel cellule par cellule.

Salut MORTITH, MICHD,
Voici le fichier corrigé.
Tu sélectionnes une cellule puis clic sur le bouton "Sur sélection de cellule"
Autre option, tu double-clique sur une cellule contenant une adresse a vérifier
@+ Lolote83
 

Pièces jointes

  • Copie de MORTITH - Ping une adresse.xlsm
    33.6 KB · Affichages: 244
  • Copie de MORTITH - Ping une adresse.xlsm
    33.6 KB · Affichages: 160
  • Copie de MORTITH - Ping une adresse.xlsm
    33.6 KB · Affichages: 274

Mortith

XLDnaute Nouveau
Re : Ping depuis excel cellule par cellule.

Merci!
Je vais paraître exigent mais est-ce possible d'actualiser le résultat "faux/vrai" automatiquement après le ping?
J'ai également deux autres interrogations: Peut-on changer les mots "faux/vrai" par d'autres (par exemple "mauvais/bon")? Et est-ce possible d'afficher la date/heure à laquelle le test est effectué à droite du résultat?
Merci beaucoup de votre aide!
 

MichD

XLDnaute Impliqué
Re : Ping depuis excel cellule par cellule.

Tu devrais durant ton stage de formation en profiter pour te familiariser avec cet environnement!!!

Un fichier exemple. Tu peux ajouter toutes les adresses que tu désires à la suite de cette déjà existantes ou les remplacer au besoin... Respecte la syntaxe en saisissant ces adresses.
 

Pièces jointes

  • Ping Avec Excel-Publié.xlsm
    23.7 KB · Affichages: 373

david84

XLDnaute Barbatruc
Re : Ping depuis excel cellule par cellule.

Bonjour,
placer les adressesIP dans la colonne A à partir de A1 et tester (cocher Microsoft WMI Scripting Vx.x Library dans Outils>Références):
Code:
'cocher Microsoft WMI Scripting Vx.x Library
Sub Ping_ordinateur()
Dim strComputer As String
Dim objWMIService As SWbemServicesEx
Dim objStatus As SWbemObjectEx
Dim colPings As SWbemObjectSet
Dim ColIp As Range, c As Range

strComputer = "."
Set ColIp = Sheets(1).Range("A1:A" & Sheets(1).Range("A" & Sheets(1).Cells.Rows.Count).End(xlUp).Row)
For Each c In ColIp
  Set objWMIService = GetObject( _
      "winmgmts:\\" & strComputer & "\root\cimv2")
  Set colPings = objWMIService.ExecQuery _
      ("Select * From Win32_PingStatus where Address = '" & c.Value & "'")
  
  For Each objStatus In colPings
    If IsNull(objStatus.StatusCode) _
        Or objStatus.StatusCode <> 0 Then
        c.Offset(, 1).Value = "L'ordinateur n'a pas répondu."
    Else
        c.Offset(, 1).Value = "L'ordinateur a répondu."
    End If
  Next
Next c
End Sub
A+
 

Lolote83

XLDnaute Barbatruc
Re : Ping depuis excel cellule par cellule.

RE,
modif faite.
par contre je n'ai pas compris :
Je vais paraître exigent mais est-ce possible d'actualiser le résultat "faux/vrai" automatiquement après le ping?
Qu'entends tu par automatiquement après le ping ?
@+ Lolote83

Salut a tous, j'ai vu des réponses.
 

Pièces jointes

  • Copie de MORTITH - Ping une adresse.xlsm
    34.4 KB · Affichages: 204
  • Copie de MORTITH - Ping une adresse.xlsm
    34.4 KB · Affichages: 137
  • Copie de MORTITH - Ping une adresse.xlsm
    34.4 KB · Affichages: 234

Mortith

XLDnaute Nouveau
Re : Ping depuis excel cellule par cellule.

Lolote83 : Je veux dire par là que quand je double-clique sur une des adresses, cela m'affiche ensuite dans une fenêtre à part si c'est faux ou vrai. Je voulais savoir s'il était possible que la cellule à droite de l'adresse puisse être actualisée pour afficher le résultat (par exemple si une adresse est bonne il sera affiché "vrai" mais si on perd la connexion et que l'on refait un test cela affichera automatiquement "faux").

EDIT: J'ai remarqué que cette option était bien fonctionnelle, je ne m'en étais pas rendu compte tout à l'heure.

MichD : Je ne savais pas qu'on pouvait faire autant de manipulations via Excel, je vais donc m'y pencher car on peut l'utiliser pour de nombreux usages, apparemment.

david84 : Le bouton références est grisé, je ne peux donc pas y accéder, mes réglages sont peut-être un peu sans dessus dessous avec tous les essais que j'ai pu faire. Je vais essayer de régler ça.

EDIT: J'ai résolu le problème, cette manipulation fonctionne bien mais ça ping toutes les adresse à la suite, chose que je voudrais éviter.
 
Dernière édition:

david84

XLDnaute Barbatruc
Re : Ping depuis excel cellule par cellule.

Sans cocher la référence Microsoft WMI Scripting Vx.x Library :
Code:
Sub Ping_ordinateur()
Dim strComputer As String
Dim objWMIService As Object
Dim objStatus As Object
Dim colPings As Object
Dim ColIp As Range, c As Range

strComputer = "."
Set ColIp = Sheets(1).Range("A1:A" & Sheets(1).Range("A" & Sheets(1).Cells.Rows.Count).End(xlUp).Row)
For Each c In ColIp
  Set objWMIService = GetObject( _
      "winmgmts:\\" & strComputer & "\root\cimv2")
  Set colPings = objWMIService.ExecQuery _
      ("Select * From Win32_PingStatus where Address = '" & c.Value & "'")
  
  For Each objStatus In colPings
    If IsNull(objStatus.StatusCode) _
        Or objStatus.StatusCode <> 0 Then
        c.Offset(, 1).Value = "L'ordinateur n'a pas répondu."
    Else
        c.Offset(, 1).Value = "L'ordinateur a répondu."
    End If
  Next
Next c
End Sub
A+
 

david84

XLDnaute Barbatruc
Re : Ping depuis excel cellule par cellule.

Avec possibilité de sélectionner la\les cellule(s) choisie(s) : sélectionner les cellules choisies et lancer la macro :
Code:
Sub Ping_ordinateur()
Dim strComputer As String
Dim objWMIService As Object
Dim objStatus As Object
Dim colPings As Object
Dim ColIp As Range, c As Range

strComputer = "."
'Set ColIp = Sheets(1).Range("A1:A" & Sheets(1).Range("A" & Sheets(1).Cells.Rows.Count).End(xlUp).Row)
Set ColIp = Selection
For Each c In ColIp
  Set objWMIService = GetObject( _
      "winmgmts:\\" & strComputer & "\root\cimv2")
  Set colPings = objWMIService.ExecQuery _
      ("Select * From Win32_PingStatus where Address = '" & c.Value & "'")
  
  For Each objStatus In colPings
    If IsNull(objStatus.StatusCode) _
        Or objStatus.StatusCode <> 0 Then
        c.Offset(, 1).Value = "L'ordinateur n'a pas répondu."
    Else
        c.Offset(, 1).Value = "L'ordinateur a répondu."
    End If
  Next
Next c
End Sub
A+
 

Corniaux Michael

XLDnaute Nouveau
Bonsoir je me présente Mike 45 ans et je booose dans l'IT mais personnes dans mes équipes n'arrive à m'aider ...
j'ai une liste de 500 nom DNS de serveurs dans excel et j'ai besoin d'avoir via un bouton de recuperer les adresses IP interne de ces machines.
Je m'explique, dans la colonne A, le nom des serveur qui ressemble a MIS00001; MIS00002 MIS00003 ... cette colonne contient pres de 500 lignes. dans la colonne B, j'ai besoin de récupérer les adresse IP interne a mon Entreprise ...
Donc j'aimerais avoir un bouton qui fait un Ping du nom de la celulle A et qui retourne le retour du ping , disons "10.10.3.1" dans la celulle B.
J'ai un premier besoin pour ces 500 lignes, mais dans un moins j,'aurais le mêmebesoin pour pres de 5000 machines ... d'ou mon appel a l'aide sur ce forum ...
Un Grand merci d'avance.
Merci
Mike
 

Discussions similaires