Rechercher plusieurs mots dans une ligne : RecherchV/Vlookup/SI ?

helplease895 Messages postés 10 Date d'inscription   Statut Membre Dernière intervention   -  
Patrice33740 Messages postés 8561 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous,

J'ai un fichier excel dans lequel je cherche plusieurs informations par ligne.

j'ai essayé rechercheV et nb si mais à chaque fois le message "un trop nombre d'argument apparaît, j'ai une 50 aine de mots clés à trouver ^^

Exemple :
Dans ligne A2 : Nous produisons des fours à pain, des fours électrique pour les petits et les grands.Si vous cherchez des bouilloires nous en avons aussi.

Je voudrais simplement extraire :
-Fours à pain,Fours électrique, Bouilloires

Il y a t'il un fonction qui permette de rechercher un nombre infini d'arguments pour simplement "coller" l'ensemble des argument présent dans la ligne/cellule/colonne souhaitée ?

Merci d'avance,
A voir également:

3 réponses

Yoyo01000 Messages postés 1639 Date d'inscription   Statut Membre Dernière intervention   168
 
Bonsoir,
quand vous parlez de ligne, c'est une ligne de texte dans une cellule ou alors plusieurs cellules sur une ligne de la feuille (par exemple la ligne 2) ?

Vous avez déjà les mots clefs dans d'autres cellule à trouver dans la/les phrase(s) ?

Il y aurait la possibilité d'utiliser la fonction CONCATENER en intégrant une recherche des mots clefs préalablement rentrés dans d'autres cellules mais au final ce serait inutile !

Perso, je ne vois pas comment solutionner précisément votre problème !


0
Raymond PENTIER Messages postés 58990 Date d'inscription   Statut Contributeur Dernière intervention   17 355
 
... Mais ce qui est certain, c'est que ce n'est pas la fonction RECHERCHEV qui permettra de le résoudre !
0
Patrice33740 Messages postés 8561 Date d'inscription   Statut Membre Dernière intervention   1 780 > Raymond PENTIER Messages postés 58990 Date d'inscription   Statut Contributeur Dernière intervention  
 
Et « un nombre infini d'arguments » me paraît exagéré, c'est tellement plus que les 60 000 mots du Petit Robert ....
Surtout quand il n'en faut qu'« une 50 aine »
0
Frenchie83 Messages postés 2240 Date d'inscription   Statut Membre Dernière intervention   338
 
Bonjour,

Créer une fonction personnaliser avec une grande quantité d'arguments n'est peut-être pas le plus judicieux.

Je vous propose une macro qui fait cela appliqué à plusieurs phrases dans la colonne A

il faut auparavant créer une liste des chaînes de texte à extraire en colonne G
https://mon-partage.fr/f/2kYdjaDk/

reste à cliquer sur le bouton


le code utilisé:
Sub Extract()
    Dim DerLig_Liste As Long, DerLig_Chaine As Long, i As Long, j As Long, NbCar As Long
    Dim Res As Variant, Texte As Variant
    Application.ScreenUpdating = False
    DerLig_Liste = Range("G" & Rows.Count).End(xlUp).Row
    DerLig_Chaine = Range("A" & Rows.Count).End(xlUp).Row
    For i = 2 To DerLig_Chaine
        Res = ""
        Texte = ""
        Chaine = Cells(i, "A")
        For j = 2 To DerLig_Liste
            NbCar = Len(Cells(j, "G"))
            On Error Resume Next
            Texte = Mid(Chaine, InStr(1, Chaine, Cells(j, "G"), 1), NbCar)
            If Err.Number = 0 Then
                Res = Res & ", " & Texte
            End If
            On Error GoTo 0
        Next j
        Cells(i, "B") = Mid(Res, 3, Len(Res) - 2)
    Next i
End Sub


Cdlt
0
Patrice33740 Messages postés 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
Bonjour,

On peut aussi utiliser une fonction personnalisée :
Option Explicit
Function ExtraireTextesPhrase(textes As Range, phrase As Range) As Variant
Dim t, p$, i&, r$
  If phrase.Count <> 1 Then ExtraireTextesPhrase = CVErr(XlCVError.xlErrRef): Exit Function  '#REF!
  ReDim t(1 To 1, 1 To 1)   'Pour le cas où "textes" ne représente qu'une seule cellule
  If textes.Count = 1 Then t(1, 1) = textes.Value Else t = textes.Value
  For i = 1 To UBound(t)
    If TypeName(t(i, 1)) = "String" Then
      If t(i, 1) <> "" And InStr(1, LCase(phrase), LCase(t(i, 1))) > 0 Then
        r = r & ", " & t(i, 1)
      End If
    End If
  Next i
  ExtraireTextesPhrase = Mid(r, 3)
End Function


Note : l'utilisation d'un tableau VBA (t) est beaucoup plus rapide que la lecture une par une des cellules de la plage "textes".

Exemple : https://mon-partage.fr/f/0Ki6KIh0/

--
Cordialement
Patrice

Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.
0