Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1018 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [EXCEL/VBA] Masquer fenêtre DOS

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[EXCEL/VBA] Masquer fenêtre DOS

n°2085476
SaW3r
Posté le 28-06-2011 à 13:04:07  profilanswer
 

Bonjour, je cherche désespérément comment masquer une fenêtre DOS pendant l'exécution de ma macro..
 

Code :
  1. Function Get_DNS_Name(ligne)
  2.     'On créer un Shell qui va lancer la commande nslookup :
  3.     Set objShell = CreateObject("WScript.Shell" )
  4.     Set objExec = objShell.Exec("nslookup " & Cells(ligne, 2).Value)
  5.    
  6.     'On garde seulement la partie qui nous intéresse, c'est à dire le nom d'hôte distant :
  7.     Cells(ligne, 3).Value = Split(Mid(objExec.StdOut.ReadAll, 65), ".xxx" )
  8.    
  9.     'On nettoie tout :
  10.     Set objExec = Nothing
  11.     Set objShell = Nothing
  12.  
  13. End Function


 
La fenêtre s'ouvre et se referme immédiatement en exécutant bien la fonction mais j'ai environ 500 lignes et donc c'est assez désagréable comme effet de clignotement..
 
Merci de votre aide !

mood
Publicité
Posté le 28-06-2011 à 13:04:07  profilanswer
 

n°2085513
SuppotDeSa​Tante
Aka dje69r
Posté le 28-06-2011 à 14:36:32  profilanswer
 

Directement comme ca, pas possible.
Avec un Run oui, avec Exec non.
 
De mémoire, mais je ne garantis pas :
Tu vas dans le menu Démarrer, Accessoires
Click droit sur "Invite de commandes"
Dans l'onglet Raccourci, tu dois pouvoir dire de lancer les fenetres DOS en mode caché/réduit etc.


---------------
Soyez malin, louez entre voisins !
n°2085516
SaW3r
Posté le 28-06-2011 à 14:43:22  profilanswer
 

Merci de ta réponse ! La solution que tu me propose fonctionne effectivement mais je devrais réaliser la manip sur chaque pc et ce script va beaucoup se balader..
 
Saurais tu comment transformer mon code mais avec un Run et donc avec la possibilité de cacher ma fenêtre ?

n°2085518
SuppotDeSa​Tante
Aka dje69r
Posté le 28-06-2011 à 14:54:38  profilanswer
 

Pourquoi passes tu par des trucs vieux comme le monde ?
Lancer une commande nslookup pour recuperer le nom de la machine...
 
J'ai regardé ton fichier Excel, de diou comme tu te fais chier la vie !
Regarde du coté de WMI !
 
Regarde sur ce post que j'ai créé, comme je recupere :
IP
Carte reseau
Driver et version
http://forum.hardware.fr/hfr/Progr [...] m#t2085505
 

  • Donc par exemple, si tu veux le nom de la machine distante, à la ligne 18 de mon code tu rajoutes :
Code :
  1. Cells(ligne, 3).Value  = IPConfig.DNSHostName(Min)


  • Les DNS en colonne 4 et 5 :
Code :
  1. SrvDNS = IPConfig.DNSServerSearchOrder
  2.             Min = LBound(SrvDNS )
  3.             Max = UBound(SrvDNS )
  4.             CpteDNS = Max - Min + 1
  5.             If CpteDNS = 1 Then
  6.                 Cells(Ligne, 4) = SrvDNS (Min)
  7.             Else
  8.                 Cells(Ligne, 4) = SrvDNS (Min)
  9.                 Cells(Ligne, 5) = SrvDNS (Min)
  10.                
  11.             End If


  • Que sais-je encore... Le masque de sous reseau en colonne 6, la passerelle en colonne7, la macadresse en colonne8, savoir si le DHCP est activé ou pas en colonne9
Code :
  1. Cells(Ligne, 6) = IPConfig.IPSubnet(Min)
  2.             Cells(Ligne, 7) = IPConfig.DefaultIPGateway(Min)
  3.             Cells(Ligne, 8) = IPConfig.MACAddress(Min)
  4.             Cells(Ligne, 9) = IPConfig.DHCPEnabled


 
Etc.
 
Regarde mon code que j'ai donné sur l'autre topic et adapte ce que je viens de te donner.


---------------
Soyez malin, louez entre voisins !
n°2085519
SuppotDeSa​Tante
Aka dje69r
Posté le 28-06-2011 à 14:55:37  profilanswer
 

Pourquoi sur chaque PC ??? De ce que j'ai vu de ton fichier Excel, tu devrais pouvoir le lancer de n'importe ou sur le reseau et recuperer les infos des ordis disants


---------------
Soyez malin, louez entre voisins !
n°2085521
SaW3r
Posté le 28-06-2011 à 14:56:41  profilanswer
 

D'accord merci je regarde tout ça et je te tien au courant ! :)
 
Edit : La manip de réduire la fenêtre DOS en allant dans accessoire je voulais dire.. Je devrais faire cela sur chaque PC or le fichier va aller sur beaucoup de PC et oui il marche sur n'importe quel ordi du réseau ^^


Message édité par SaW3r le 28-06-2011 à 14:58:05
n°2085525
SuppotDeSa​Tante
Aka dje69r
Posté le 28-06-2011 à 14:59:57  profilanswer
 

Et comme je suis super sympa... :whistle:
 
Voila pour ton code :

Code :
  1. Function Get_DNS_Name(ligne)
  2. On Error Resume Next
  3.  
  4. StrComputer = Cells(ligne, 2).Value
  5. UserName = "DOMAINE\Administrator"
  6. Password = "MotDepasse"
  7.  
  8. '***** Récupération du nom de la machine
  9. 'Ordinateur distant
  10.    Set SWBemlocator = CreateObject("WbemScripting.SWbemLocator" )
  11.    Set objWMIService = SWBemlocator.ConnectServer(StrComputer, "root\CIMV2", UserName, Password)
  12.    Set IPConfigSet = objWMIService.ExecQuery("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE", , 48)
  13. 'Si ordinateur local, on doit utiliser une autre méthode n'incluant pas les users/mdp
  14.    If Err.Number <> 0 Then
  15.        Set IPConfigSet = GetObject("winmgmts:{impersonationLevel=impersonate}!//" & StrComputer).ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=TRUE" )
  16.    End If
  17.  
  18. 'On récupère en colonne3 le nom de la machine distante
  19.    For Each IPConfig In IPConfigSet
  20.        If IPConfig.IPAddress(Min) = StrComputer Then Cells(ligne, 3).Value = IPConfig.DNSHostName(Min)
  21.    Next
  22.  
  23. End Function


Message édité par SuppotDeSaTante le 28-06-2011 à 15:03:43

---------------
Soyez malin, louez entre voisins !
n°2085529
SaW3r
Posté le 28-06-2011 à 15:06:56  profilanswer
 

Waaah merci ! Mais je ne comprends pas, dès que je lance ton code excel plante immédiatement.. :s

n°2085532
SuppotDeSa​Tante
Aka dje69r
Posté le 28-06-2011 à 15:10:05  profilanswer
 

Ah bah faut peut etre adapter hein...
Forcément, le domaine, l'administrateur du domaine, et le mot de passe de l'admin ne sont pas les memes... (ligne 5 et 6)
 
Ca plante où ?


---------------
Soyez malin, louez entre voisins !
n°2085535
SaW3r
Posté le 28-06-2011 à 15:14:51  profilanswer
 

Et bien je l'ai adapté juste comme ceci :
 

Code :
  1. Sub Get_DNS_Name()
  2. For ligne = 2 To 10
  3. On Error Resume Next
  4. StrComputer = Cells(ligne, 1).Value 'Les IPs sont ici enfaite
  5. UserName = "addim.local\monlogin"
  6. Password = "monpass"
  7. '***** Récupération du nom de la machine
  8. 'Ordinateur distant
  9.     Set SWBemlocator = CreateObject("WbemScripting.SWbemLocator" )
  10.     Set objWMIService = SWBemlocator.ConnectServer(StrComputer, "root\CIMV2", UserName, Password)
  11.     Set IPConfigSet = objWMIService.ExecQuery("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE", , 48)
  12. 'Si ordinateur local, on doit utiliser une autre méthode n'incluant pas les users/mdp
  13.     If Err.Number <> 0 Then
  14.         Set IPConfigSet = GetObject("winmgmts:{impersonationLevel=impersonate}!//" & StrComputer).ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=TRUE" )
  15.     End If
  16.     For Each IPConfig In IPConfigSet
  17.         If IPConfig.IPAddress(Min) = StrComputer Then Cells(ligne, 3).Value = IPConfig.DNSHostName(Min)
  18.     Next
  19. Next
  20. End Sub


 
En pas à pas détaillé il plante pas mais il devient lent à ces 2 lignes :
 

Code :
  1. Set IPConfigSet = objWMIService.ExecQuery("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE", , 48)


 
ou
 

Code :
  1. Set IPConfigSet = GetObject("winmgmts:{impersonationLevel=impersonate}!//" & StrComputer).ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=TRUE" )

mood
Publicité
Posté le 28-06-2011 à 15:14:51  profilanswer
 

n°2085537
SuppotDeSa​Tante
Aka dje69r
Posté le 28-06-2011 à 15:20:52  profilanswer
 

Normal qu'il devienne lent, il se connecte a la machine pour recuperer toutes les propriétés et méthodes de la classe NetworkAdapterConfiguration...
 
D'ailleurs, un peu de lecture : http://msdn.microsoft.com/en-us/li [...] s.85).aspx


Message édité par SuppotDeSaTante le 28-06-2011 à 15:21:33

---------------
Soyez malin, louez entre voisins !
n°2085538
SaW3r
Posté le 28-06-2011 à 15:21:44  profilanswer
 

Oui mais je ne suis pas admin local ni du réseau.. C'est surement cela nan ?

n°2085540
SuppotDeSa​Tante
Aka dje69r
Posté le 28-06-2011 à 15:24:21  profilanswer
 

Ah bah je vois pas comment tu vas pouvoir recuperer les DNS de postes distants par exemple...
 
Meme si tu n'es pas admin, si en Cells(ligne, 1) c'est ton ip de ta machine locale, ca devrait te retourner le nom de ta machine à toi.
 
Executer un script sur le reseau sans avoir de droits admin... Mouai...


---------------
Soyez malin, louez entre voisins !
n°2085543
SaW3r
Posté le 28-06-2011 à 15:29:07  profilanswer
 

Bon enfaite ça fonctionne en local seulement mais des que je m'attaque à un poste distant c'est mort.. Via le nslookup c'est possible en tout cas.. C'est bien dommage ton script est bien plus rapide !
 
Je vais essayer de faire avec un Run..
 
EDIT :
 
J'arrive bien à lancer avec un Run en caché mais.. je n'arrive pas à récupérer le résultat.. Sauf dans un fichier texte..  
 

Code :
  1. Set oshell = CreateObject("WScript.Shell" )
  2. oshell.Run "ping -n 1 -w 20 172.26.2.xxx > toto.txt", 0, True


Message édité par SaW3r le 28-06-2011 à 15:48:53
n°2085547
SuppotDeSa​Tante
Aka dje69r
Posté le 28-06-2011 à 16:08:41  profilanswer
 

Code :
  1. Sub toto()
  2. Set oshell = CreateObject("WScript.Shell" )
  3. oshell.Run "cmd /c ping -n 1 -w 20 172.26.2.xxx>toto.txt", 0, True
  4. Set objet_fso = CreateObject("Scripting.FileSystemObject" )
  5. Set objTextFile = objet_fso.OpenTextFile("toto.txt", 1)
  6. Do While objTextFile.AtEndOfStream <> True
  7.     strText = strText & objTextFile.ReadLine
  8.    
  9. Loop
  10. End Sub


 
Pourquoi tu ping ?
Utilises plutot nbtstat - a 172.26.2.xxx comme ca tu as le domaine, le nom de la machine, l'ip et la mac adress d'un seul coup...


Message édité par SuppotDeSaTante le 28-06-2011 à 16:09:39

---------------
Soyez malin, louez entre voisins !
n°2085551
SaW3r
Posté le 28-06-2011 à 16:21:06  profilanswer
 

Lorsque je tente d'utiliser cette commande il me dit :
 
"Impossible d'accéder au pilote NetBT--NetBT peut ne pas être chargé"
 
Un programme à démarrer je suppose ?
 
J'ai avancé sur le Run.. Voila :
 

Code :
  1. For lngRow = 2 To 10
  2.    
  3.     Dim err As Long
  4.    
  5.     Set oShell = CreateObject("WScript.Shell" )
  6.     err = oShell.Run("ping -n 1 -w 20 " & Cells(lngRow, 1).Value, 0, True)
  7.    
  8.     If err = 1 Then 'répond pas
  9.     For i = 1 To 2
  10.     Cells(lngRow, i).Font.Color = RGB(255, 0, 0) 'rouge
  11.     Next
  12.     Else 'répond
  13.     For i = 1 To 2
  14.     Cells(lngRow, i).Font.Color = RGB(0, 255, 0) 'vert
  15.     Next
  16.     End If
  17.    
  18. Next


 
On ne voit plus rien..

Message cité 1 fois
Message édité par SaW3r le 28-06-2011 à 16:23:20
n°2085554
SuppotDeSa​Tante
Aka dje69r
Posté le 28-06-2011 à 16:56:56  profilanswer
 

SaW3r a écrit :

Lorsque je tente d'utiliser cette commande il me dit :
 
"Impossible d'accéder au pilote NetBT--NetBT peut ne pas être chargé"
 
Un programme à démarrer je suppose ?
 


 
Problème de droit


---------------
Soyez malin, louez entre voisins !
n°2086025
SaW3r
Posté le 30-06-2011 à 10:06:20  profilanswer
 

Effectivement maintenant que j'ai les droits sur la machine je peux réaliser cette commande mais elle ne répond que très rarement.. Voire jamais.. Donc inutile malheureusement..
 
Mais tant pis, mon problème est résolus, la fenêtre s'affiche désormais en arrière plan comme je le voulais. Je laisse le code ça pourrait en aider certains on sait jamais :
 

Code :
  1. Function Get_DNS_Name(ligne, IP)
  2.  
  3.     'On créer un script qui va inscrire le résultat de la commande nslookup dans un fichier texte :
  4.     Set oShell = CreateObject("WScript.Shell" )
  5.     oShell.Run "cmd /c nslookup " & IP & ">dns.txt", 0, True 'Plus d'infos ici : http://msdn.microsoft.com/en-us/li [...] s.85).aspx
  6.     Set oShell = Nothing 'On nettoie
  7.    
  8.     'On ouvre et lit notre fichier texte créé précedemment :
  9.     Set FSO = CreateObject("Scripting.FileSystemObject" )
  10.     Set txtStr = FSO.OpenTextFile("dns.txt", 1)
  11.    
  12.     'On ignore les 2 premières lignes :
  13.     txtStr.SkipLine
  14.     txtStr.SkipLine
  15.     'On garde simplement le nom de l'hôte :
  16.     dns = Split((Mid(txtStr.Read(100), 12)), ".xxxx" ) 'remplacer xxxx par votre domaine
  17.    
  18.     'On l'écrit :
  19.     Cells(ligne, 3) = dns
  20.     'On ferme le fichier, on nettoie tout et on efface le fichier :
  21.     txtStr.Close
  22.     Set FSO = Nothing
  23.     Set txtStr = Nothing
  24.     Kill "dns.txt"
  25.    
  26.    
  27. End Function


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [EXCEL/VBA] Masquer fenêtre DOS

 

Sujets relatifs
Envoi mail automatique via Excel(Résolu) Version driver carte reseau [VBS/VBA/VB]
Excel et SQL requete avec deux condition?[Résolu] Affectation de variable/Macro copier coller Excel
probleme excel vba sommeLiaison Excel et Powerpoint VBA
PING et NSLOOKUP dans excel ! (avancement 80%)exporter données vers feuilles excel
VBA, creer et ecrire un fichier text (.txt) depuis un macro 
Plus de sujets relatifs à : [EXCEL/VBA] Masquer fenêtre DOS


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR