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

Fermé
helplease895 Messages postés 10 Date d'inscription lundi 18 mai 2020 Statut Membre Dernière intervention 23 août 2020 - 25 juil. 2020 à 15:16
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 - 26 juil. 2020 à 11:55
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 samedi 2 février 2019 Statut Membre Dernière intervention 7 mars 2022 167
25 juil. 2020 à 21:04
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 58802 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 10 janvier 2025 17 264
25 juil. 2020 à 21:07
... 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 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 779 > Raymond PENTIER Messages postés 58802 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 10 janvier 2025
Modifié le 25 juil. 2020 à 22:30
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 lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 338
Modifié le 26 juil. 2020 à 07:55
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 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 779
26 juil. 2020 à 11:55
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