Extraire une phrase et la mettre dans une autre case

Résolu
Manar -  
 Manar -
Bonjour,
J'ai besoin d'extraire une partie d'un ping affiché sur excel et le mettre sur une autre case mais j y arrive pas. Quelqu'un peut m'aider à le faire?

En gros j'ai besoin d'extraire que la moyenne qui se trouve à la fin du résultat:

Envoi d'une requ^te 'Ping' 172.16.212.215 avec 1024 octets de donn'esÿ:

R'ponse de 172.16.212.215ÿ: octets=1024 temps<1ms TTL=254

R'ponse de 172.16.212.215ÿ: octets=1024 temps<1ms TTL=254

R'ponse de 172.16.212.215ÿ: octets=1024 temps<1ms TTL=254

R'ponse de 172.16.212.215ÿ: octets=1024 temps<1ms TTL=254

Statistiques Ping pour 172.16.212.215:

Paquetsÿ: envoy's = 4, re#us = 4, perdus = 0 (perte 0%),

Dur'e approximative des boucles en millisecondes :

Minimum = 0ms, Maximum = 0ms, Moyenne = 0ms

Merci d'avance :)

3 réponses

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,

    Manque de précision...
    Tout ce texte se trouve dans la même cellule ou sur plusieurs lignes?
    0
    1. Manar
       
      Bonjour,
      Tout ce texte se trouve dans la même cellule.
      J'ai fait un programme qui lance un ping sur excel et j'ai besoin d'extraire du résultat que la moyenne à chaque fois, et faire un graphe par la suite.

      Manar
      0
  2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bon, alors deux possibilités :

    1- tu veux comme résultat : "Moyenne = 0ms"
    Function Extrait_Moyenne(Rng As Range) As String
       Application.Volatile
       Extrait_Moyenne = "Moyenne" & Split(Rng, "Moyenne")(1)
    End Function


    2- tu veux comme résultat : 0
    Function Extrait_Valeur_Moyenne(Rng As Range) As Double
    Dim Debut As Integer, Longueur As Integer, strTexte As String
       Application.Volatile
       strTexte = Split(Rng, "Moyenne")(1)
       Debut = InStr(strTexte, "=") + 2
       Longueur = InStr(strTexte, "ms") - Debut
       Extrait_Valeur_Moyenne = CDbl(Mid(strTexte, Debut, Longueur))
    End Function


    Tu peux utiliser ces deux fonctions, soit via VBA en utilisant une variable pour en stocker le résultat, soit directement dans la feuille en utilisant, par exemple, la syntaxe :
    =Extrait_Valeur_Moyenne(A1)
    0
    1. Manar
       
      Bonjour Franck,
      Merci pour ton aide, en revanche j'ai pas réussi à le faire marcher (désolé je suis encore débutante en vba :/ )
      J'ai mis la fonction au dessus du code et je me suis servie de la syntaxe: =Extrait_Moyenne(A1) pour le faire marcher mais ça me donne: " #NOM? "

      Je te montre mon code au cas où ça peut aider à comprendre:

      Sub Ping()
      ToursPrevus = ActiveSheet.Cells(3, 2)
      Toursfaits = 0

      While (Toursfaits < ToursPrevus)

      Adresse = ActiveSheet.Cells(2, 2)
      Dim PingExe As String
      PingExe = "C:\Windows\System32\PING.exe -l 1024 " + Adresse

      Set Sh = CreateObject("WScript.Shell")
      Set ShellExe = Sh.Exec(PingExe)

      lecture = ShellExe.StdOut.ReadAll
      Toursfaits = Toursfaits + 1
      CelluleResult = 6 + Toursfaits
      ActiveSheet.Cells(CelluleResult, 2) = lecture

      Wend

      End Sub


      Est ce que tu penses qu'il y a moyen d'avoir: "Moyenne = '(valeur de la moyenne)ms" comme résultat au fur et à mesure que le ping s'execute?

      Manar
      0
      1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > Manar
         
        Bonjour,

        Si tu fait tout par macro, n'insère pas de formule dans ta feuille.
        Essaye ce code :

        Sub Ping()
        ToursPrevus = ActiveSheet.Cells(3, 2)
        Toursfaits = 0
        While (Toursfaits < ToursPrevus)
           Adresse = ActiveSheet.Cells(2, 2)
           Dim PingExe As String
           PingExe = "C:\Windows\System32\PING.exe -l 1024 " + Adresse
           Set Sh = CreateObject("WScript.Shell")
           Set ShellExe = Sh.Exec(PingExe)
           lecture = ShellExe.StdOut.ReadAll
           Toursfaits = Toursfaits + 1
           CelluleResult = 6 + Toursfaits
           ActiveSheet.Cells(CelluleResult, 2) = lecture
        'AFFICHE LA MOYENNE EN COLONNE C
           ActiveSheet.Cells(CelluleResult, 3) = Extrait_Moyenne(Range("B" & CelluleResult)
        Wend
        End Sub
        Function Extrait_Moyenne(Rng As Range) As String
           Extrait_Moyenne = "Moyenne = " & Split(Rng, "Moyenne")(1)
        End Function


        De plus, tu utilisais, dans ta formule, le Range A1 (=Extrait_Moyenne(A1)) alors que tes résultats sont en colonne B...........
        0
    2. Manar
       
      Super ça fonctionne!
      Merci beaucoup c'est très gentil :)
      0
      1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > Manar
         
        de rien.
        A++
        0
  3. Manar
     
    Bonjour,
    Je reviens sur ce sujet parce que j'ai une question à propos de ce script.
    J'ai besoin de le faire executer chaque 20 secondes par exemple, je me suis servie donc de cette commande juste après la boucle While:

    Application.OnTime Now + TimeValue("00:00:20"), "Ping"

    ça marche bien mais quand le nouveau ping s'execute il remplace l'ancien dans la même case, et moi j'ai besoin de tout garder.
    Comment est ce que je peux faire pour faire apparaitre les ping les uns au dessous des autres ?

    Merci d'avance
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Bonjour,

      Remplacer la ligne de code :
      CelluleResult = 6 + Toursfaits

      par :
      CelluleResult = Range("B" & Rows.Count).End(xlUp).Row + 1
      0
    2. Manar
       
      C'est parfait!
      Merci beaucoup encore une fois :)
      0