Récupérer les noms d'ordinateurs à partir de leurs ip

Je ne suis pas fort en vba mais j'ai essayé d'adapter un code vba sur le net pour déclarer une fonction dans mon module, sert a récupérer les noms des ordinateurs a partir de leurs adresses ip dans mon réseau local, mais ca ne marche pas , car il me retourne le message d'erreur : Erreur d’exécution "9" l'indice n’appartient pas à la sélection au moment ou il ne vèrifie pas le if:

Voici le code :

Function HostName(ip$) As String

Dim s As String, a

s = CreateObject("Wscript.Shell").Exec("nbtstat -a " & ip).stdout.ReadAll

a = Split(s, vbCrLf)

If UBound(a) > 4 Then

HostName = Trim(Left(a(8), Len(a(8)) - 26))

Else

HosteName = "Introuvable"

End If

End Function

Après avoir afficher le message d'erreur il m'indique l'erreur au niveau de la ligne:

HostName = Trim(Left(a(8), Len(a(8)) - 26))

Je ne sais pas quoi faire, merci beaucoup si quelqu'un peut m'aider et ca sera génial si l’exécution de ce code puisse passer en mode silencieux (sans affichage de flash command)

Bonjour toutes et tous

@ tester

Dim s, a As String

ou:

Dim s As String
Dim a As String

ou:

Dim s$
Dim a$ 

ou:

Dim s$, a$

une petite erreur sur HostName le e de trop


pour les exemples des variables c'est ici https://www.excel-pratique.com/fr/vba/variables


Function HostName(ip$) As String
' déclarations des variables
Dim s$, a$ 
s = CreateObject("Wscript.Shell").Exec("nbtstat -a " & ip).stdout.ReadAll
a = Split(s, vbCrLf)

If UBound(a) > 4 Then
HostName = Trim(Left(a(8), Len(a(8)) - 26))

Else
HostName = "Introuvable"

End If
End Function

j'espère ne pas m'être tromper je viens juste de boire mon 1er café lol

crdlt,

André

Bonjour,

Ceci a été testé ...

Sub test_HostName()
  MsgBox HostName("99.99.99.99")   '' << adresse à adapter
End Sub

Function HostName(ip$)
  Dim s As String, a
  s = CreateObject("Wscript.Shell").Exec("nslookup " & ip).StdOut.ReadAll
  a = Split(s, vbCrLf)
  If UBound(a) > 2 Then HostName = Right(a(3), Len(a(3)) - 9)
End Function

ric

c'est le code que j'ai adapté a mon besoin ric, pour récupérer les noms d'ordinateurs a partir de l'adresse ip

les déclarations des variables sont bonnes je pense, le code s’exécute sans problème si la première condition est vérifiée, mais une fois il veut passer a Else il met du temps sur une fenêtre dos et il m'affiche le message d'erreur Erreur d'execution 9

et il m'indique que l'erreur est sur la ligne :

HostName = Trim(Left(a(8), Len(a(8)) - 26))

j'utilise une procédure pour balayer une colonne de cellule contenant les adresses ip et ensuite afficher le nom d'ordinateur via la fonction HostName

Bonjour,

Si tu balaies une colonne d'adresses IP ... le message d'erreur arrive-t-il sur une adresse en particulier ou cela est aléatoire ?

Si c'est sur une adresse en particulier ... cette adresse représente quel type de matériel ? Serait-il différent des autres ?

Si tu enlèves cette adresse de la liste, l'erreur est-elle disparue ?

Pour tenter de dépanner ... peux-tu faire écrire les hostname (avant le trim) dans la colonne adjacente à son adresse ip ... tu vas peut-être y découvrir la source du souci ...

ric

Bonjour,

Si tu as ces erreurs, c'est probablement que l'adresse ip n'est pas accessible.

Essai ainsi ... ce code passera à la prochaine adresse ...

ce code écrit dans la cellule à droite de l'adresse les noms d'hôte contactés.

Sub test_HostName()
Dim Ad As String

For x = 5 To 13
    Ad = CStr(Cells(x, 1))
    Cells(x, 2) = HostName(Ad)
Next x
End Sub

Function HostName(ip$)
  Dim s As String, a
  s = CreateObject("Wscript.Shell").Exec("nslookup " & ip).StdOut.ReadAll
  a = Split(s, vbCrLf)
  On Error Resume Next
    If UBound(a) > 2 Then HostName = Right(a(3), Len(a(3)) - 9)
    On Error GoTo 0
End Function

ric

Merci bcp de votre soutien ric, je n'ai pas pu vous répondre a temps, j'avais un petit souci de connexion. J'ai testé le code que vous avez proposé avec quelques modif en utilisant la commande "nbtstat -a " qui m’intéresse et ça marche mais avec le code de gestion d'erreur que vous avez mis .moi je voudrais savoir pourquoi cette erreur apparait et on a besoin de le détourner en "On Error GoTo 0", car cela mis du temps et avec d'autres traitement ca peut devenir trop lourd.

j'ai mis le code comme ca:

Sub test_HostName()

Dim Ad As String

For x = 16 To 26

Ad = CStr(Cells(x, 4))

If (HostName(Ad) <> "") Then

Cells(x, 5) = HostName(Ad)

Else

Cells(x, 5) = "Not Found"

End If

Next x

End Sub

Function HostName(ip$)

Dim s As String, a

s = CreateObject("Wscript.Shell").Exec("nbtstat -a " & ip).stdout.ReadAll

a = Split(s, vbCrLf)

On Error Resume Next

If UBound(a) > 4 Then HostName = Trim(Left(a(8), Len(a(8)) - 26))

On Error GoTo 0

End Function

Merci encore une fois

Bonjour,

Quand une adresse ip ne répond pas (la machine est peut-être fermée), ce qui bloque le code.

Pour pouvoir continuer, j'ai utilisé On Error Resume Next .

On Error Resume Next reste actif tout au cours du traitement et il peut poser problème ultérieurement.

Pour le contrer dès que possible, l'on suggère d'utilise On Error Goto 0 pour arrêter l'effet On Error Resume Next .

Je ne suis qu'un junior en VBA. Je ne connais pas toute les finesses. Je suis les suggestions des senior. https://forum.excel-pratique.com/viewtopic.php?p=872765#p872765

ric

Rechercher des sujets similaires à "recuperer noms ordinateurs partir leurs"