Microsoft 365 Extraire une valeur d'une phrase

Wyrox51

XLDnaute Nouveau
Bonjour,
Les exemples seront en gras pour faciliter la lecture

Pour commencer, voici un exemple : Je suis footballeur et j'ai joué 20 matchs et marqué 54 buts.

Cette phrase se trouve dans une cellule, et ce que j'aimerai faire, c'est extraire le 54 pour le mettre dans une autre cellule. Le problème sur lequel je tombe c'est que parfois il pourrait y avoir des phrases avec aucun espace comme par exemple 54buts ou encore marqué54 buts. Les 2 programmes que j'ai fait ont leur limite, l'un récupère tous les nombres de la phrase mais je n'arrive pas à faire en sorte que ce soit que 54 et l'autre récupère l'avant dernière valeur mais parfois s'il manque un espace, l'avant dernière valeur n'est pas la valeur chiffré que je recherche.

Je sais pas si j'ai été assez clair pour vous, alors n'hésitez pas à me poser des questions pour vous éclaircir.

PS : je veux que cela se fasse en VBA sous excel évidemment.

Merci à ceux qui prendront de leur temps pour me lire et me répondre !
 

patricktoulon

XLDnaute Barbatruc
plus precisément
VB:
Function GetNumericByIndex(str$)
Dim z&, t()
ReDim Preserve t(1000)
For i = 1 To Len(str)
If Val(Mid(str, i)) > 0 Then t(z) = Val(Mid(str, i)): i = i + Len(CStr(Val(Mid(str, i)))) + 1: z = z + 1
Next
ReDim Preserve t(z)
GetNumericByIndex = t
End Function

Sub test2()' le dernier nombre de la chaine
t = GetNumericByIndex("je suis footballeur et j'ai joué 20 matchs et marqué 5.54 buts.")
MsgBox t(UBound(t) - 1)
End Sub

Sub test3()' le premier nombre de la chaine
t = GetNumericByIndex("je suis footballeur et j'ai joué 20 matchs et marqué 5.54 buts.")
MsgBox t(0)
End Sub
 

Modeste geedee

XLDnaute Barbatruc
Bonsour®
"donnant donnant", ?????
sur un site de bénévolat ... drôle de conception

à perfectionner

exemple d'utilisation en formule a etendre
=SI(A2<>"";GetNumericBeforExpression(A2;"match");"")
=SI(A2<>"";GetNumericBeforExpression(A2;"but");"")
oui à perfectionner

la demande étant implicitement des nombres ;)

VB:
Function GetNumericBeforExpression(str$, exp$)
Application.Volatile  ' c'est toujours utile pour desfonction personnalisées
x = Mid(str, 1, InStrRev(str, exp) - 1)
For i = Len(x) To 1 Step -1: t = IIf(IsNumeric(Trim(Mid(x, i))), Trim(Mid(x, i)), t): Next
' =================pour des nombres
GetNumericBeforExpression = CSng(t)
'=================pour des textes :
'GetNumericBeforExpression = t & " " & exp$
End Function
attention à la spécification du terme Exp$

1589977814717.png
 

jmfmarques

XLDnaute Accro
Bonsour®
"donnant donnant", ?????
sur un site de bénévolat ... drôle de conception
Qu'est-ce qui t'émeut, Modeste geedee, dans ce "donnant donnant" où mon aide est subordonnée à un effort de précision ? Tu m'intéresses grandement, là !
Tu devrais, je crois, commencer à t'intéresser au sens du mot "bénévolat". Il implique la bonne volonté et non autre chose. ;)
 
Dernière édition:

jmfmarques

XLDnaute Accro
A Wyrox51
Te voilà maintenant conscient de ce à quoi on aboutit si l'on ne précise pas.
Il est clair que si cette nouvelle précision avait été donnée, mon code eût été encore différent.
Tu voudras bien comprendre que je n'ai maintenant pas l'intention de tout reprendre sur la base de cette nouvelle indication et vais me contenter d'une "rustine" (qui n'est en outre pas à mon gôut) :
VB:
ch = "Je suis footballeur et j'ai joué 20 matchs et blabla54.45patatipatata."
For k = Len(ch) To 2 Step -1
cc = Mid(ch, k)
  If Not Left(cc, 1) Like "#" And Left(cc, 1) <> "." And Mid(cc, 2, 1) Like "#" Then
     cc = Val(Mid(cc, 2)): Exit For
  End If
Next
MsgBox cc
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,

Avec des nombres non entiers:
VB:
Function Quantite(ByVal x As String, deQuoi As String)
Dim n&, i&, s$, v, res
   x = Application.Trim(x)
   n = InStr(1, x, deQuoi, vbTextCompare)
   If n = 0 Then Exit Function
   x = Trim(Left(x, n - 1))
   On Error Resume Next
   For i = 1 To Len(x)
      v = Empty
      s = Replace(Right(x, i), ".", ","): v = CDbl(0 & s)
      If Not IsEmpty(v) Then res = v Else Exit For
   Next i
   Quantite = res
End Function
 

Pièces jointes

  • Wyrox51- quantité- v1.xlsm
    19.5 KB · Affichages: 13
Dernière édition:

jmfmarques

XLDnaute Accro
Je ne m'y connais pas beaucoup en foot, mais 0,54 but ? Le ballon était à moitié dégonflé ?
Bon, je sors. :D
Il y a peut-être des décotes :
- 60 % si contre son camp
- 20 % si par ricochet non calculé, etc ...
Pour rester sérieux : en relisant les "rajouts" de précision, il pourrait aussi bien s'agir de "buts" que de "décalcomanies", de "mesures", ou n'importe quoi d'autre
 

Wyrox51

XLDnaute Nouveau
Bonjour à tous,

J'espère que ce long weekend a été bon pour tout le monde ! Grâce à toutes vos réponses j'ai réussi ce que je voulais faire ! Je vais désormais mettre ce poste en résolu, et vraiment merci à tous sans exception.

Bonne continuation à tout le monde !

Juste je ne vois pas où je dois aller pour mettre cette rubrique en "résolu" !
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 084
Messages
2 085 192
Membres
102 809
dernier inscrit
Sandrine83