XL 2016 RESOLU VBA aide commande EXCEL Ping Liste de postes

richard31

XLDnaute Occasionnel
Bonjour

J ai une liste de Hostname dans la colonne B de B8 à BX . Je possède une code qui fonctionne bien et est capable de pinger la liste des postes , et d'écrire dans la colonne C l'adresse IP, si bien sur le poste est donc joignable.

Peut'on mettre l'information " poste non joignable"' à la place d'une cellule vide quand celui ci est dans ce cas ?

De plus la commande recommence du début à chaque fois et donc réécrit les adresses IP déjà analysées ce qui est très embêtant ... Je ne sais pas comment lui dire que si il voir une entrée en B (donc un résultat déjà écrit) de ne pas lancer la commende et continuer ... :(

Voici la commande en question:

Sub PingListePostes()
On Error Resume Next
Set objhttp = CreateObject("MSXML2.ServerXMLHTTP.4.0")
Dim ra As Range, cell As Range, PingResult As Variant
Set ra = Range([B8], Range("B" & Rows.Count).End(xlUp))
ra.Offset(, 1).Resize(, 2).ra.Offset

For Each cell In ra.Cells
Computer$ = Trim(cell): IP = ""

For Each PingResult In GetObject("winmgmts://./root/cimv2").ExecQuery _
("SELECT * FROM Win32_PingStatus WHERE Address = '" & Computer$ & "'")
If IsObject(PingResult) Then IP = PingResult.ProtocolAddress
If IsNull(PingResult.StatusCode) _
Or PingResult.StatusCode <> 0 Then
End If
Next
cell.Next = IP: DoEvents
Next cell
Set objhttp = Nothing
MsgBox "FIN DU PING"
End Sub



Merci les gens :)
 
Dernière édition:

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Bonjour

au lieu de IP="" , initialises IP = "Poste Non joignable", cela devrait suffire.

Cordialement
Code:
Sub PingListePostes()
On Error Resume Next
Set objhttp = CreateObject("MSXML2.ServerXMLHTTP.4.0")
Dim ra As Range, cell As Range, PingResult As Variant
Set ra = Range([B8], Range("B" & Rows.Count).End(xlUp))
ra.Offset(, 1).Resize(, 2).ra.Offset

For Each cell In ra.Cells
Computer$ = Trim(cell): IP = "Poste Non joignable"

For Each PingResult In GetObject("winmgmts://./root/cimv2").ExecQuery _
("SELECT * FROM Win32_PingStatus WHERE Address = '" & Computer$ & "'")
If IsObject(PingResult) Then IP = PingResult.ProtocolAddress
If IsNull(PingResult.StatusCode) _
Or PingResult.StatusCode <> 0 Then
End If
Next
cell.Next = IP: DoEvents
Next cell
Set objhttp = Nothing
MsgBox "FIN DU PING"
End Sub
 

richard31

XLDnaute Occasionnel
Bonjour

au lieu de IP="" , initialises IP = "Poste Non joignable", cela devrait suffire.

Cordialement
Code:
Sub PingListePostes()
On Error Resume Next
Set objhttp = CreateObject("MSXML2.ServerXMLHTTP.4.0")
Dim ra As Range, cell As Range, PingResult As Variant
Set ra = Range([B8], Range("B" & Rows.Count).End(xlUp))
ra.Offset(, 1).Resize(, 2).ra.Offset

For Each cell In ra.Cells
Computer$ = Trim(cell): IP = "Poste Non joignable"

For Each PingResult In GetObject("winmgmts://./root/cimv2").ExecQuery _
("SELECT * FROM Win32_PingStatus WHERE Address = '" & Computer$ & "'")
If IsObject(PingResult) Then IP = PingResult.ProtocolAddress
If IsNull(PingResult.StatusCode) _
Or PingResult.StatusCode <> 0 Then
End If
Next
cell.Next = IP: DoEvents
Next cell
Set objhttp = Nothing
MsgBox "FIN DU PING"
End Sub

Bonjour et merci pour le retour mais ça laisse toujours une cellule vide :(

et vous ne savez pas comment lui dire de ne pas faire de ping si c'est déjà fait ?
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Bonjour

bizarre ton truc, la variable IP n'est mise à jour que s'il y a ping (If IsObject(PingResult) Then IP = PingResult.ProtocolAddress), elle contient donc soit l'adresse soit l'initialisation, ta variable est ensuite écrite dans la cellule, la cellule vide ne devrait pas être possible.
mets un fichier exemple qu'on puisse voir le lien entre macro et fichier
pour ne pas retester une valeur déja trouvée
For Each cell In ra.Cells
if not cell="" and not cell="Poste Non joignable" then exit for
 

richard31

XLDnaute Occasionnel
Bonjour

bizarre ton truc, la variable IP n'est mise à jour que s'il y a ping (If IsObject(PingResult) Then IP = PingResult.ProtocolAddress), elle contient donc soit l'adresse soit l'initialisation, ta variable est ensuite écrite dans la cellule, la cellule vide ne devrait pas être possible.
mets un fichier exemple qu'on puisse voir le lien entre macro et fichier
pour ne pas retester une valeur déja trouvée
For Each cell In ra.Cells
if not cell="" and not cell="Poste Non joignable" then exit for


oui je comprends rien surtout en VBA :( :( voici le fichier j 'ai juste effacé les IP . Il fonctionne mais donc laisse un blanc quand ça ne fonctionne pas mais le plus embêtant c est qui recommence la liste et donc efface à chaque fois ce qu'il à fait ...pffff
 

Pièces jointes

  • PING.xlsm
    15 KB · Affichages: 68

Statistiques des forums

Discussions
312 149
Messages
2 085 772
Membres
102 970
dernier inscrit
JMaurice