IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Ouverture du même cmd avec la fonction Shell [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Mai 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2015
    Messages : 19
    Par défaut Ouverture du même cmd avec la fonction Shell
    Bonjour à tous ,

    J'ai vu pas mal de post sur le sujet mais aucun ne me répond pleinement .. :/

    Je ping des équipements et je copie le résultat du test dans un .txt en VBA avec la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Shell "cmd /k ping 1.1.1.2 -n 10 -w 250 > c:ping.txt", vbHide
    jusque là tout va bien ..

    Seulement j'aimerais que le MÊME cmd dont le résultat est négatif s'ouvre sans pour autant refaire le test. J'ai donc mis l'option /k à ma commande pour ne pas fermer le cmd mais je n'arrive pas à le reprendre sans relancer un autre cmd ..

    Des idées ?

    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 093
    Billets dans le blog
    20
    Par défaut
    SAlut,
    tu peux essayer comme cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    Public oShell
    Sub test_equipement()
    Set oShell = CreateObject("wscript.Shell")
    MsgBox IsOnline("1.1.1.2")
    End Sub
     
     
    Function IsOnline(Address)
        Dim strText
        IsOnline = False
        Set oExecObj = oShell.Exec("%comspec% /c ping -a -n 1 -w 20 " & Address)
        Do While Not oExecObj.StdOut.AtEndOfStream
            strText = oExecObj.StdOut.ReadAll()
            If InStr(strText, "ponse de") > 0 Then
                IsOnline = True
                Exit Function
            Else
     
            Shell "cmd /k echo ping " & Address & " -n 10 -w 250 "
     
            End If
        Loop
    End Function
    Have a nice day. Oliv'
    Votre réponse est peut être dans mon blog !
    https://www.developpez.net/forums/blogs/191381-oliv-/

  3. #3
    Membre averti
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Mai 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2015
    Messages : 19
    Par défaut
    Tout d'abord, merci à toi !
    Mais je n'ai pas tout compris a ton script .. :/
    J'ai déjà un début de code de mon coté je ne sais pas si je peux "fusionner" les deux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Sub Bouton1_Cliquer()
     
    Shell "cmd /k ping 1.1.1.2 -n 10 -w 250 > c:ping.txt", vbHide    ' Copie du contenu du cmd lors du ping dans ping.txt
     
    Sleep 10000
     
    Dim Temp As String
    Open "c:ping.txt" For Input As #1
    Temp = Input(LOF(1), 1)        ' Copie de ping.txt dans Temp
    Close 1
     
    If Temp Like "*reçus = 10*" Then
     
    MsgBox "Ping avec Shell OK"
     
    Else
     
    'MsgBox Temp
     
    Shell "cmd", vbNormalFocus
     
    End If
     
    End Sub
    Là, ça va jusqu'a mon Else en faite après je ne sais pas donc je vais essayer ton code mais j'aimerais le comprendre d'abord avant de le copier

  4. #4
    Expert confirmé
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 093
    Billets dans le blog
    20
    Par défaut
    Mon script lance 1 ping puis vérifie par le retour de la variable si c'est un succès ou pas!

    Ça dépend de ton besoin, est ce que 1 reçu est suffisant ? ou tous les envoyés= reçus ?

    mais en gros çà fait pareil sans passer par un fichier txt

    tu dois pouvoir modifier mon code comme cela pour qu'il fasse comme le tien

    attention l'encodage est différent les accents et cie arrivent différemment ici reçus=re‡us

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     Function IsOnline(Address)
        Dim strText
        IsOnline = False
        Set oExecObj = oShell.Exec("%comspec% /c ping -a -n 10 -w 250 " & Address)
        Do While Not oExecObj.StdOut.AtEndOfStream
            strText = oExecObj.StdOut.ReadAll()
    ' pour copier le retour dans le presse papier
    'il faut decommenter les lignes et ajouter un USERFORM (à supprimer ensuite)
           ' With New DataObject
          '  .SetText strText
          '  .PutInClipboard
         '  End With
            If InStr(strText, "re‡us = 10") > 0 Then
                IsOnline = True
                Exit Function
            Else
     
            Shell "cmd /k echo ping " & Address & " -n 10 -w 250 "
     
            End If
        Loop
    End Function
    Have a nice day. Oliv'
    Votre réponse est peut être dans mon blog !
    https://www.developpez.net/forums/blogs/191381-oliv-/

  5. #5
    Membre averti
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Mai 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2015
    Messages : 19
    Par défaut
    Ok super !!

    Mais ton code ouvre un second cmd pour le deuxième test ?! Parce que j'ai justement besoin d'avoir 10 pings ok, c'est pour ça que je voudrais ne pas avoir à relancer le ping car ça prend 10sec en cas d'échec ..

    Merci je remplace ma copie fichier par ton code

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Ouverture du même cmd
    Par Ju 54 dans le forum Excel
    Réponses: 1
    Dernier message: 07/01/2016, 14h14
  2. Probleme avec la fonction Shell
    Par amine.gafsi dans le forum VC++ .NET
    Réponses: 3
    Dernier message: 17/04/2008, 16h14
  3. Comment fermer un programme ouvert avec la fonction Shell
    Par nicolas2603 dans le forum VBA Access
    Réponses: 13
    Dernier message: 08/02/2008, 20h01
  4. Problème avec la fonction SHELL
    Par Kokito dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 21/11/2006, 16h22
  5. fermeture d'un fichier ouvert avec la fonction shell
    Par julio02200 dans le forum Access
    Réponses: 10
    Dernier message: 19/06/2006, 10h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo