bonjour a tous,
je cherche une fonction simple qui me permettra de chercher differents mots contenus dans une colonne excel d'un onglet 2 dans une sequence de texte contenue dans une colonne d'un onglet 1 Mais de faire apparaitre en resultat le texte rechercher dans l'onglet2
j'ai trouver emis la formule suivante mais c'est super fastidieux et la liste des mots de recherche risque de s'allonger dans le temps
P.S : Si le texte dans la cellule Jx contient plusieurs mots de la plage Feuil1!A1:A17, ces formules ne ramènent que le premier.
P.S : Ces formules raméneront peut-être parfois installation alors que le texte contient réinstallation. Si c'est le cas, il faudrait faire en plus avec des " "&. A peaufiner donc.
J'ai un peu remanié la feuille. J'ai recopié (avec transposition) le tableau des mots-clé en L1:AB1
dans les lignes en-dessous, j'ai mis la formule(étirable) :
VB:
=NON(ESTERREUR(CHERCHE(L$1;$J2)))
qui renvoie VRAI si le mot-clé a été trouvé en colonne J.
En K2, j'ai mis la formule (étirable aussi):
qui renvoie le libellé du premier mot-clé trouvé.
On n'a plus besoin de la feuille Feuil1.
Les colonnes L à AB peuvent être masquées pour améliorer la lisibilité du tableau.
Un point important => Votre fichier n'est pas anonymisé. Il comporte des données personnelles comme des noms et prénoms de personnes. Ceci est contraire à la charte du forum et au RGPD.
Il vaut mieux supprimer votre fichier et le remplacer par un fichier où ne figurera aucune donnée personnelle.
Bonjour,
Au démarrage, je prends la liste et la range dans un array. Donc pas de limitation.
Mais plus elle sera grande plus ça sera lent !
Je viens de tester avec une liste de 200 mots, cela ne pose pas de problème.
A l'ouverture du fichier ou par appui sur le bouton de mise à jour, on fait :
Code:
Public ListeTravaux() ' Déclare un array en Public pour être disponible en permanence
Sub ConstruitListe()
' Calcule le nombre d'éléments dans la liste
Taille = ThisWorkbook.Sheets("Listes").Range("A:A").End(xlDown).Row
' Redimensionne l'array en fonction du nombre d'éléments trouvés
ReDim ListeTravaux(Taille)
' La taille est mis dans Array(0) pour accélérer les calculs ( inutile de recalculer à chaque fonction )
ListeTravaux(0) = Taille ' La taille de la liste est en 0, les mot cherchés en 1...x
' Remplit l'array avec tous les mots trouvés.
For i = 1 To Taille
ListeTravaux(i) = [Liste].Cells(i, 1)
Next i
End Sub
Ensuite la fonction CherchePmad(A) fait :
Code:
Function CherchePmad(A)
' On positionne le retour à Absent, ce qui évite ensuite le Else, donc plus rapide.
CherchePmad = "Absent"
' Pour chaque mot de la liste
For i = 1 To ListeTravaux(0)
' On regarde si le mot est présent dans la phrase "A" passé en paramètre de la fonction.
If A Like "*" & ListeTravaux(i) & "*" = True Then
' Si elle est présente, on renvoie le mot de la liste
CherchePmad = ListeTravaux(i)
' Et on sort car c'est fini. Inutile de perdre du temps à aller jusqu'au bout.
Exit For
End If
' Tout ça jusqu'au dernier mot de la liste.
Next i
End Function
est il possible d'implementer la liste des mots recherchés?
Vous voulez dire implémenter dans le VBA ?
Oui bien sur on peut le faire, mais ça vous oblige à aller modifier le VBA lorsque vous voulez agrandir la liste.
Il suffit de remplir l'array "à la main" plutôt que d'aller le lire.
On gagne une feuille, mais c'est plus complexe à updater. Question de choix.
A l'ouverture du fichier ou par appui sur le bouton de mise à jour, on fait :
Code:
Public ListeTravaux() ' Déclare un array en Public pour être disponible en permanence
Sub ConstruitListe()
' Calcule le nombre d'éléments dans la liste
Taille = ThisWorkbook.Sheets("Listes").Range("A:A").End(xlDown).Row
' Redimensionne l'array en fonction du nombre d'éléments trouvés
ReDim ListeTravaux(Taille)
' La taille est mis dans Array(0) pour accélérer les calculs ( inutile de recalculer à chaque fonction )
ListeTravaux(0) = Taille ' La taille de la liste est en 0, les mot cherchés en 1...x
' Remplit l'array avec tous les mots trouvés.
For i = 1 To Taille
ListeTravaux(i) = [Liste].Cells(i, 1)
Next i
End Sub
Ensuite la fonction CherchePmad(A) fait :
Code:
Function CherchePmad(A)
' On positionne le retour à Absent, ce qui évite ensuite le Else, donc plus rapide.
CherchePmad = "Absent"
' Pour chaque mot de la liste
For i = 1 To ListeTravaux(0)
' On regarde si le mot est présent dans la phrase "A" passé en paramètre de la fonction.
If A Like "*" & ListeTravaux(i) & "*" = True Then
' Si elle est présente, on renvoie le mot de la liste
CherchePmad = ListeTravaux(i)
' Et on sort car c'est fini. Inutile de perdre du temps à aller jusqu'au bout.
Exit For
End If
' Tout ça jusqu'au dernier mot de la liste.
Next i
End Function
Vous voulez dire implémenter dans le VBA ?
Oui bien sur on peut le faire, mais ça vous oblige à aller modifier le VBA lorsque vous voulez agrandir la liste.
Il suffit de remplir l'array "à la main" plutôt que d'aller le lire.
On gagne une feuille, mais c'est plus complexe à updater. Question de choix.