Créer une fonction de tri basée sur le texte d'une cellule

Bonjour

J’ai actuellement besoin de créer une fonction perso LIBELLE(celluleX) afin de trier des infos textes.

Les cellules sont issues de relevés bancaires, tels :

"COM INTERVENTION…", "CHEQUE 000…", "PRLV SEPA URSAFF…", "FRAIS…"

Après m’être intéressé à une formule dans une cellule, je me rend compte (sauf erreur) que ce n’est pas assez poussé pour parvenir à un tri efficace.
Exemple :

=IF(EXACT( REGEX(D3;"(.+)?(ESSO|PEAGE|STATION)(.+)";"dep";1); "dep"); "Deplacements" ; "-" )

Je voudrais donc créer une fonction comme ceci, que j’intègrerais dans la cellule de mon choix : =LIBELLE(D3)

Function libelle(C)
	if C.test (VIR|CHEQUE) retourne "paiement client"
	else if C.test (PEAGE|STATION) retourne "déplacement"
	else if C.test (FRAIS|ARRETE) retourne "frais bancaires"
	else C.test (URSAFF) retourne "impots"
End Function

Seulement, je n’ai pas trouvé le moyen de travailler avec des Regex sur le contenu de la cellule. Je découvre juste le Basic, et suis bien plus à l’aise avec du Javascript.
Je n’ai que des “BASIC runtime error. Object variable not set”. Exemple :

Function libelle(C)
	R = C.createSearchDescriptor
	R.SearchRegularExpression = True
  	R.SearchString = "(VIR|CHEQUE)"
	found = C.FindFirst(R)
	libelleType = found.String
End Function

Bref, votre aide sera la bienvenue.
Merci d’avance

Xavier.

Finalement j’ai trouvé une solution via deux macros.
La première crée une expression régulière et la deuxième renseigne les informations à traiter et à retourner.
Ainsi, dans ma cellule, j’applique la formule :

LType(D4) 

Ainsi en fonction du libellé, j’obtiens

LType("ARRETE DE CPTE 4 EME TRIMESTRE… ") => "banque"
LType("RESTAURANT LIBRE OFFICE…") => "réception"

Etc.

’ Traitement des Regex

Function LTypeFind(Str,Reg,Typ)	
	Dim T As String
	oSearch 		= CreateUnoService("com.sun.star.util.TextSearch")
	o 				= CreateUnoStruct("com.sun.star.util.SearchOptions")
	o.algorithmType	= com.sun.star.util.SearchAlgorithms.REGEXP
	o.searchString 	= Reg
	oSearch.setOptions(o)
	oFound 			= oSearch.searchForward( Str, 0, Len(Str) )
	If oFound.subRegExpressions=0 then
		LTypeFind	= 0
		Exit Function
	
	Else 
		T = Typ
		If Typ="single" then
			nStart 	= oFound.startOffset()
			nEnd 	= oFound.endOffset()
			T		= Mid(Str, nStart(0) + 1, nEnd(0) - nStart(0) )
		End If
	End If
	LTypeFind = T
End Function

Et la Formule à appeler dans une cellule.
Suffisamment explicite pour être modifiée à souhait et pratique, car un changement s’applique dorénavant à toutes les cellules.

Function LType(cell)

	'Fast
	If IsEmpty(cell) then
		LType = "-"
		Exit Function
	End If

	Dim T As String
	
	'CLIENT
	T = LTypeFind( Cell, "(EVI|REM)", "entrée")
	If T<>0 then
		LType = T
		Exit Function
	End If

	'DEPLACEMENT
	T = LTypeFind( Cell, "(ESSO|GARAGE|PEAGE|SNCF|STATION)", "déplacement")
	If T<>0 then
		LType = T
		Exit Function
	End If
	
	'RECEPTION
	T = LTypeFind( Cell, "(EPICERIE|MAR(CHE|KET)|RESTAU|SUPERET)", "réception")
	If T<>0 then
		LType = T
		Exit Function
	End If
	
	'PRESSE
	T = LTypeFind( Cell, "(CULTURA|PHOTO|PRESSE)", "presse")
	If T<>0 then
		LType = T
		Exit Function
	End If
	
	'BANQUE
	T = LTypeFind( Cell, "(ARRETE|COM INTERVENTION|FRAIS)", "banque")
	If T<>0 then
		LType = T
		Exit Function
	End If
	
	'MATERIAUX
	T = LTypeFind( Cell, "(BRICO|DEPOT)", "matériel")
	If T<>0 then
		LType = T
		Exit Function
	End If
	
	'IMPOTS
	T = LTypeFind( Cell, "(DIRECTION GENE|URSSAF)", "impôts")
	If T<>0 then
		LType = T
		Exit Function
	End If
	
	
	'AUTRES DEPENSES (single)
	T = LTypeFind( Cell, "(CHEQUE|ENGIE|GROUPAMA|LOCAUX|O2SWITCH|PHIE|RET|VIR)", "single")
	If T<>0 then
		LType = Switch( T="CHEQUE","chèque",T="ENGIE","électricité",T="GROUPAMA","assurance",T="LOCAUX","loyer",T="O2SWITCH","web",T="PHIE","sante",T="RET","retrait",T="VIR","virement" )
		Exit Function
	End If
	
	'DEFAULT
	LType = "-"
End Function