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

Extraire des caractères d'une cellule

Tranbi29

XLDnaute Nouveau
Bonjour à tous,

Je ne sais pas trop comment expliquer ce que je veux faire, ce qui rend la recherche de solution compliquée, alors je me permets de vous demander votre aide.

J'ai un tableau avec une liste de personne.
J'ai un second tableau avec une liste de phrases dans lesquelles les noms de ces personnes apparaissent mais jamais à la même place.
Je cherche la formule qui me permet d'extraire le nom de la personne dans la phrase.

Je pense que la solution est simple, mais là, je bloque complètement.

Merci d'avance pour vos réponses.
 

Dugenou

XLDnaute Barbatruc
Bonjour,
peut-on avoir un exemple en fichier avec 3 lignes d'exemple
y a t il plusieurs noms dans la même phrase ?
Cordialement

principe : avec lenom = la cellule du nom et laphrase = la cellule de la phrase :
si(estnum(cherche(lenom;laphrase));lenom;"pas trouvé")
 

Tranbi29

XLDnaute Nouveau
Bonjour Jocelyn,

Alors, le fichier en lui-même fonctionne très bien (j'ai rajouté des lignes et ça colle). Par contre, j'ai voulu déplacer la formule dans mon fichier de travail, et là, forcément ça ne va plus... J'ai bien validé la formule matricielle (Ctrl+Maj+Entrée) mais les données que j'obtiens ne correspondent pas. Je me suis dit qu'il fallait peut-être trier les données, mais là non plus ça ne fonctionne pas. Bizarrement, sans le tri j'ai des cellule qui donne le résultat #VALEUR et si je fais le tri, toutes les cellule ont un résultat valide mais qui ne correspond toujours pas à ce qui est dans la cellule.
Est-ce que cela pourrait venir du "-2" de la formule LIGNE ?
Est-ce que ça serait trop demandé d'expliquer brièvement le raisonnement de la formule ?

En tout cas, merci de l'attention que vous portez à mon problème

Je joins mon fichier de travail (partiel) avec la formule que j'ai collée.

Cdlt
 

Pièces jointes

  • Fichier travail.xlsx
    12.9 KB · Affichages: 11

JHA

XLDnaute Barbatruc
bonjour à tous,

Tu as une plage LIGNE(Données!$A$1:$A$7) donc tu ne dois rien ôter
Code:
=INDEX(Données!$A$1:$A$7;MIN(SI(ESTNUM(CHERCHE(Données!$A$1:$A$7;G2));LIGNE(Données!$A$1:$A$7))))
Valider en matricielle

JHA
 

laurent950

XLDnaute Barbatruc
Bonsoir

VB:
Option Base 1
Function ExtractNom(Plage As Range, Phrase As String) As String

TabRch = Range(Plage.Address)

'*** ------------------------------------------------------------------------------
' Tableau d'objet
Dim Tabreg() As Object
ReDim Tabreg(LBound(TabRch, 1) To UBound(TabRch, 1), 1 To 2)
Dim TabMatches() As Object
ReDim TabMatches(LBound(TabRch, 1) To UBound(TabRch, 1), 1 To 2)
'*** ------------------------------------------------------------------------------
For i = LBound(Tabreg, 1) To UBound(Tabreg, 1)
    Set Tabreg(i, 1) = CreateObject("vbscript.regexp")
        ' ici laissé pour l'ordre !
        'Phrase= "Phrase"
        'Le Pattern est le motif que l'on recherche
        Tabreg(i, 1).Pattern = TabRch(i, 1)
        ' Active ou non la recherche sur plusieurs lignes à la fois / La propriété est mise sur False par défaut.
        Tabreg(i, 1).MultiLine = False
        ' Précise si la recherche est sensible ou non à la casse (majuscules/minuscules) / La propriété est mise sur False par défaut.
        Tabreg(i, 1).IgnoreCase = True
        ' Précise si la recherche porte sur la première occurence ou sur toutes / La propriété est mise sur False par défaut.
        Tabreg(i, 1).Global = True
        'le test renvoie un Boolean (parfait pour notre fonction Booléenne!!!)
        'MsgBox Tabreg(i, 1).test(Phrase)
        ' Cette méthode permet d'explorer les occurences qui vérifient le Pattern.
        Set TabMatches(i, 1) = Tabreg(i, 1).Execute(TabRch(i, 1))
'*** ------------------------------------------------------------------------------
            ' Resultat
            If Tabreg(i, 1).test(Phrase) = True Then
                ExtractNom = Tabreg(i, 1).Pattern
                Exit For
            End If
            Next i
End Function

une fonction personalisé
 

Pièces jointes

  • Prénom.xlsm
    54.3 KB · Affichages: 14

laurent950

XLDnaute Barbatruc
Bonsoir JHA,
Il faut substitué cette ligne par cette ligne :
qui fonctionne en local sur la feuille active.
' TabRch = Range(Plage.Address)
' par celle ci qui garde en mémoire la feuille cible = Nom de la feuille Worksheets(Plage.Worksheet.Name)
TabRch = Worksheets(Plage.Worksheet.Name).Range(Plage.Address)

C'est Normalement bon

Laurent
 

Pièces jointes

  • Prénom (2).xlsm
    93.1 KB · Affichages: 11

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…