Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Evaluer la présence de sous-chaînes d'une liste dans une cellule

ED31

XLDnaute Junior
Bonjour

Je cherche à tester la présence dans une chaîne de texte d'une ou plusieurs sous-chaîne de texte :
Ex : Ensemble de chaînes à tester : ".com", ".fr", ".br", ".de", "www"

Si une de ces valeurs est présente (une ou plusieurs), la fonction visée doit renvoyer "vrai" ou un tag quelconque. Sinon, zéro. (ce tag me permettra de faire du ménage !).

J'imagine une formule matricielle qui évaluerait pour chaque valeur avec Trouve la présence de la sous-chaîne.... mais je ne vois pas comment l'écrire.
Exemple de chaîne à analyser par une fonction :
The Telegraph - Telegraph online, Daily Telegraph, Sunday Telegraph - Telegraph US_SOC US_CUL The Simpsons humour joke weird
blog.ific-coaching.com ENTREPRISE COACH VEILLE SENIORS INTELLIGENCE COLLECTIVE performance collective
fr.ubergizmo.com outils web clavier Microsoft
agfax.com US_JAP TTP




Sinon, une fonction VBA personnalisée (UDF) serait bien sûr plus aisée à réaliser.
Mais les fonctions matricielles, c'est le fun !
Merci pour vos tuyaux.
 

Staple1600

XLDnaute Barbatruc
Re : Evaluer la présence de sous-chaînes d'une liste dans une cellule

Re


Afin d'illustration exécute cette macro sur une feuille vierge
puis décortiques les formules en B1 et en colonne C.
Pour les explications détaillées, n'hésites pas à suivre le conseil dispensé par le dernier MsgBox affiché
Code:
Sub testED31()
Dim tVals
tVals = Array("abcd ED32 efgh 12345", "abdc pseudo 1245", "abcd contient 124356", "abcd EF contien ED 1235")
With [A1]
.value = "Le pseudo ED31 contient un D"
.Offset(, 1) = "=FIND(""ED31"",RC[-1])"
MsgBox "la formule en B1 :" & CStr([B1].FormulaLocal) & vbCrLf & "renvoie " & _
[B1].Text & vbCrLf & "car on trouve ED31 en " & [B1].Text & "ième position dans la cellule.", vbInformation
.Offset(, 4).Resize(3) = Application.Transpose(Array("ED31", "contient", "pseudo"))
.Offset(1).Resize(4) = Application.Transpose(tVals)
.Offset(, 2).Resize(5) = "=ISNUMBER(LOOKUP(9^9,FIND(R1C5:R3C5,RC[-2])))"
MsgBox "Pour les explications sur l'utilisation de RECHERCHE" & vbCrLf & "voir l'aide en ligne d'Excel - touche F1"
End With
End Sub
 

ED31

XLDnaute Junior
Re : Evaluer la présence de sous-chaînes d'une liste dans une cellule

Merci Staple pour la macro démonstrative,

1. J'ai étudié la fonction recherche que je ne connaissais pas (utile) mais il est précisé dans l'aide que le vecteur dans lequel on cherche doit être trié. Cela ne semble pas gêner ici.
2. J'ai toujours du mal à m'imaginer ce que renvoie la fonction Trouve dans la fonction Recherche RECHERCHE(9^9;TROUVE(L1C5:L3C5;LC(-2) : un ensemble de nombres ou erreurs. On trouve ainsi VRAI si on cherche le grand nombre dans cet "array" ? Et une valeur d'erreur présente dans le résultat de Trouve fait renvoyer FAUX.
3, J'ai testé la fonction =TROUVE(L1C5:L3C5;L1C1) sous forme matricielle dans plusieurs cellules : elles renvoient bien la position du premier caractère de chaque mot recherché dans la chaine. Et #VALEUR! si le mot de la liste n'est pas présent.
Intéressant tout çà. Très instructif. Merci encore
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…