Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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 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


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

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Bonsoir
voila ton fichier modifié, cela devrait fonctionner comme tu le souhaites.
il vaut mieux toujours mettre un fichier pour les tests!
Cordialement
 

Pièces jointes

  • Copie de PING.xlsm
    16.9 KB · Affichages: 146
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…