patricktoulon
XLDnaute Barbatruc
Bonjour à tous
comme la fonction SPLITEXTNUM que nous avons développé @Yeahou et moi
Aujourd’hui je vous présente sa petite sœur
j'invite bien entendu @Yeahou et tout autres membres à apporter des modifs ou des idées qui apporteraient un plus
c'est la fonction GetNumOnText
parti encore une fois d'une idée de @job75 (très inspirant ce @job75 )qui est de récupérer une chaîne numérique dans une chaîne alphanumérique
j'ai développé cette petite fonction de la même manière que sa petite sœur
a savoir elle retourne une matrice ou valeur
elle est utilisable en VBA ou en formule non matricielle et/ou matricielle
quelque chose me dis que @Yeahou va avoir envie d'y jeter un coup d' œil
j'ai fait un petit fichier exemple pour toute les méthodes en pièces jointes
Enjoy
comme la fonction SPLITEXTNUM que nous avons développé @Yeahou et moi
Aujourd’hui je vous présente sa petite sœur
j'invite bien entendu @Yeahou et tout autres membres à apporter des modifs ou des idées qui apporteraient un plus
c'est la fonction GetNumOnText
parti encore une fois d'une idée de @job75 (très inspirant ce @job75 )qui est de récupérer une chaîne numérique dans une chaîne alphanumérique
j'ai développé cette petite fonction de la même manière que sa petite sœur
a savoir elle retourne une matrice ou valeur
elle est utilisable en VBA ou en formule non matricielle et/ou matricielle
quelque chose me dis que @Yeahou va avoir envie d'y jeter un coup d' œil
VB:
'******************************************************
' 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
Enjoy
Pièces jointes
Dernière édition: