'******************************************************
' FONCTION GetNumOnText
'auteur:Patricktoulon sur ExcelDownloads
'Date:19/09/2021
'la fonction retourne une matrice ou un item(NUMERIQUE!!!) du split d'une chaine Alphanumerique
'la matrice retourné peut etre un array ou un tableau 2 dim (vertical ou horizontal) ou une valeur de la matrice
'Attention a l'heure actuelle la matrice est en base 0 !!!!!
'------------------------------------------
'argument:
'argument(T) attend un string
'argument(Index) attend un chiffre)
'argument(ConvertNum) attend un boolean ou 0/1 en formule
'cet argument active la conversion numerique si virgule ou point en separateur decimal dans l'item trouvé
'------------------------------------------
'-----------------------les formules:--------------------------
'--------------------------------------------------------------
'en matricielle horizontal ou vertical est la meme
' =GetNumOnText(SOURCE)| etendu sur x cellule verticalement ou horizontalement et VALIDE PAR CTRL+MAJ+ENTER
'SOURCE etant l'adresse d'une !! cellule
'--------------------------------------------------------------
'en mode unitaire
'=GetNumOnText(SOURCE;index)
'SOURCE étant l'adresse d'une cellule
'index etant un nombre correspondant a l index recherché
'ex: =GetNumOnText(A4:2) --->> la 3 eme valeur numerique dans la chaine qui se trouve en A4
'--------------------------------------------------------------
'test vba en matrice ou la valeur d'un item
Sub test2()
T$ = ",45/6bonj.our0,123"
MsgBox GetNumOnText(T, 1) 'exemple récupération du 3eme nombre(le tableau est en base(0))
MsgBox GetNumOnText(T)(1) 'exemple récupération du 2d item dans le !!!tableau complet !!!! en prenant l'index du 2d (base(0))
End Sub
Function GetNumOnText(ByVal T As String, Optional Index As Long = -1, Optional ConvertNum As Boolean = False)
Dim I&, TbL
If ConvertNum Then T = Replace(T, ",", ".")
I = 1
For I = I To Len(T)
If Mid(T, I, 1) Like "[!0-9|.|,]" Then Mid(T, I, 1) = " "
If Mid(T, I, 1) Like "[.|,]" Then If Mid(T, I - IIf(I > 1, 1, 0), 1) Like "[!0-9|]" Or Mid(T, I, 1) Like "[!0-9,.]" Then Mid(T, I, 1) = " "
Next
With Application
If TypeName(.Caller) = "Range" Then
'si la fonction a été appelée par une formule
If Index = -1 Then 'si pas d'index demandé c'est une matricielle
If .ThisCell.Offset(1).Formula = .ThisCell.Formula Then 'si matricielle verticale
GetNumOnText = .Transpose(Split(Application.Trim(T) & Application.Rept(" ", 1000)))
Else
GetNumOnText = Split(Application.Trim(T) & Application.Rept(" ", 1000), " ") ' si matricielle horizontal
End If
Else
'si index demandé et si le text n'est pas vide return de l'item demandé
If T = "" Then GetNumOnText = "" Else GetNumOnText = Split(Application.Trim(T) & Application.Rept(" ", 1000), " ")(Index)
End If
Else
' si la fonction a été appelée par VBA
If Index = -1 Then
GetNumOnText = Split(Application.Trim(T), " ")
Else
GetNumOnText = Split(Application.Trim(T), " ")(Index)
End If
End If
End With
End Function