XL pour MAC Extraire chaine de caractères dans une cellule si présente dans une plage

s.blancou

XLDnaute Nouveau
Bonjour,

Un petit résumé de ce que je cherche à faire :

En A1:A10, une plage avec des noms prénoms, nommée "interv"
ADROUILLE Yves
APATROLOIN Yves
NULLPART Eva

En C1:C800, des chaines de caractères de type :
C1 = OCHON Paul, DONC Mehdi, NULLPART Eva
C2 = RAUTE Jessica
C3 = ADROUILLE Yves, APATROLOIN Yves

J'aimerais une formule en D1:D800 (idéalement non matricielle) qui m'affiche :
D1 = NULLPART Eva (parce que chaine de caractères trouvée dans la liste interv)
D2 = RAUTE Jessica (parce que pas de chaine de caractères trouvée dans la liste interv)
D3 = ADROUILLE Yves (parce que première chaine de caractères trouvée dans la liste interv)

Grand merci à l'expert qui m'aidera !
 

s.blancou

XLDnaute Nouveau
Bonjour James,
Mon fichier excel est un template qui récupère des données d'un logiciel. Ma 1ère ligne contient des titres de colonne, la seconde des variables pour récupérer ces données. J'ajoute des formules de type =indirect("A"&ligne()... pour que cette formule puisse automatiquement fonctionner sur toutes les lignes qui vont se créer automatiquement avec les données.
Je ne suis pas sure qu'une formule matricielle fonctionne, mais si tu en as une à me donner, je suis preneuse pour faire les tests !
 

dev_co

XLDnaute Occasionnel
Bonjour
Ci joint un fichier illustratif !!!!!! enfin je l'ai fait à la place de Blancou .......
Bon c'est du VBA , mais ce que l'on cherche en final c'est : La méthode utilisée ou le résultat concret ??
 

Pièces jointes

  • chaine.xlsm
    15.1 KB · Affichages: 9

job75

XLDnaute Barbatruc
Bonjour s.blancou, James007, dev_co,

La solution VBA de dev_co ne va pas si le résultat doit comporter plusieurs noms.

Dans le fichier joint voici une solution par formules avec en D2 :
Code:
=REPT(A$2&", ";ESTNUM(CHERCHE(A$2;C2)/NBVAL(A$2)))&REPT(A$3&", ";ESTNUM(CHERCHE(A$3;C2)/NBVAL(A$3)))&REPT(A$4&", ";ESTNUM(CHERCHE(A$4;C2)/NBVAL(A$4)))&REPT(A$5&", ";ESTNUM(CHERCHE(A$5;C2)/NBVAL(A$5)))&REPT(A$6&", ";ESTNUM(CHERCHE(A$6;C2)/NBVAL(A$6)))&REPT(A$7&", ";ESTNUM(CHERCHE(A$7;C2)/NBVAL(A7)))&REPT(A$8&", ";ESTNUM(CHERCHE(A$8;C2)/NBVAL(A$8)))&REPT(A$9&", ";ESTNUM(CHERCHE(A$9;C2)/NBVAL(A$9)))&REPT(A$10&", ";ESTNUM(CHERCHE(A$10;C2)/NBVAL(A$10)))&REPT(A$11&", ";ESTNUM(CHERCHE(A$11;C2)/NBVAL(A$11)))
Et en E2 (facultatif) :
Code:
=SIERREUR(GAUCHE(D2;NBCAR(D2)-2);"")
Cette solution est possible parce que la plage de base A2:A11 comporte peu de cellules (10).

A+
 

Pièces jointes

  • Recherche Formules(1).xlsx
    11.5 KB · Affichages: 3

job75

XLDnaute Barbatruc
Voici maintenant une fonction VBA, indispensable si la plage de base est plus grande :
VB:
Option Compare Text 'la casse est ignorée

Function RechercheVBA$(plage As Range, cellule As Range, sep$)
If plage.Count = 1 Then
    If plage <> "" Then If InStr(cellule, plage) Then RechercheVBA = plage
    Exit Function
End If
Dim tablo, ub%, x$, i&, j%, y$
tablo = plage 'matrice, plus rapide
ub = UBound(tablo, 2)
x = cellule
For i = 1 To UBound(tablo)
    For j = 1 To ub
        y = tablo(i, j)
        If y <> "" Then If InStr(x, y) Then RechercheVBA = RechercheVBA & sep & y
Next j, i
RechercheVBA = Mid(RechercheVBA, Len(sep) + 1)
End Function
Le code doit être placé impérativement dans un module standard.

La fonction est utilisée dans la feuille de calcul avec cette formule en D2 :
Code:
=RechercheVBA(A$2:A$11;C2;", ")
 

Pièces jointes

  • Recherche VBA(1).xlsm
    18.7 KB · Affichages: 2

Discussions similaires

Statistiques des forums

Discussions
312 103
Messages
2 085 312
Membres
102 860
dernier inscrit
fredo67