Extraire une phrase et la mettre dans une autre case

Résolu/Fermé
Manar - 28 mai 2015 à 11:12
 Manar - 4 juin 2015 à 10:40
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 :)
A voir également:

3 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 746
28 mai 2015 à 12:12
Bonjour,

Manque de précision...
Tout ce texte se trouve dans la même cellule ou sur plusieurs lignes?
0
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 746
28 mai 2015 à 12:36
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
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 746 > Manar
Modifié par pijaku le 29/05/2015 à 10:08
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
Super ça fonctionne!
Merci beaucoup c'est très gentil :)
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 746 > Manar
29 mai 2015 à 11:07
de rien.
A++
0
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 746
4 juin 2015 à 10:33
Bonjour,

Remplacer la ligne de code :
CelluleResult = 6 + Toursfaits

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