Détecter si des mots présents dans une plage sont présents dans une autre

Bonjour,

J'aimerais savoir s'il est possible de détecter si un ou plusieurs mots présents au sein de textes eux-mêmes présents dans chaque cellule d'une plage sont aussi dans une autre plage dans un autre classeur. Autrement dit, si j'ai une plage de plusieurs cellules contenant du texte dans un classeur, j'aimerais détecter si un de ou des mots de ces textes est aussi présent dans un des textes dans une autre plage dans un autre classeur.

Voici un petit exemple au cas où mon explication n'est pas assez claire :

Admettons que mon 'Classeur1.xlsm' contient ceci :

1

Et que mon 'Classeur2.xlsm' contient ceci :

2

J'aimerais une fonction qui renvoie par exemple en D1 du 'Classeur1.xlsm' que 'Classeur1.xlsm'!A1:C1 contient des mots présents dans 'Classeur2.xlsm'!A1:A7, puis en D2 que 'Classeur1.xlsm'!A2:C2 ne contient pas de mot présent dans 'Classeur2.xlsm'!A1:A7, et ainsi de suite.

J'ai évidemment déjà recherché et essayé plusieurs fonctions mais aucune n'a été complétement satisfaisante, ou alors je n'ai pas su l'utiliser correctement. Par exemple, j'ai d'abord essayé avec RECHERCHE (LOOKUP) et RECHERCHEV (VLOOKUP), cependant ces fonctions ne permettent pas de "regarder" les données au sein même d'une cellule car elles prennent tout ce qui est contenu dans cette cellule comme un tout (d'après ce que j'ai compris). J'ai ensuite essayé avec CHERCHE (SEARCH) qui semble mieux fonctionner, cependant lorsque le mot n'est pas en première position dans la cellule cela ne le trouve pas non plus.

Si vous avez des idées que ce soit avec d'autres fonctions ou celles-ci utilisées différemment, ou en utilisant VBA, je suis preneur. Pour information j'utilise Excel 2016.

Je vous remercie par avance pour votre aide.

Bonjour à tous,

Bonjour,

J'ai ensuite essayé avec CHERCHE (SEARCH) qui semble mieux fonctionner, cependant lorsque le mot n'est pas en première position dans la cellule cela ne le trouve pas non plus.

Tu as un autre problème, car cherche() te renvoie la position du mot cherché dans la cellule ou tu cherches.

Un fichier EXCEL (test ou non), complété par des explications exhaustives et des exemples remplis à la main, mis sur le forum, permettrait aux intervenants de répondre plus précisément à ta question.
Crdmt

Bonsoir,

En effet, cependant je peux transformer par la suite ce numéro de position en FAUX si c'est 0 et en VRAI si différent de 0, ce qui en soit me conviendrait pour un début car je veux tout d'abord savoir si un mot est présent dans les deux plages.

Mon problème est plus pour trouver un moyen ou fonction qui puisse "regarder" tous les mots dans plusieurs cellules pour ensuite les comparer et non simplement le premier mot ou l'entièreté des données de la cellule comme un seul tout.

Je transmettrai en effet un fichier test demain matin afin que cela facilite peut-être les choses de votre côté.

Bonne soirée

Bonjour à tous,

Il faudrait utiliser la fonction NB.SI :

=NB.SI(Plageàsonder;"*"&MotCherché&"*")

Sur votre classeur 2, il faudrait saisir cette formule en colonne B :

=NB.SI(Plageàsonder;"*"&$A1&"*")

à propager tant qu'il y a des valeurs en A.

Plageàsonder est à remplacer par la plage ciblée sur le classeur 1 bien évidemment.

Et pour avoir un résultat booléen, il suffit de rajouter >0 en fin de formule mais il me semble plus intéressant d'avoir le nombre d'occurrences...

Cdlt,

Bonjour,

Je vous remercie pour votre réponse, j'ai pu avancer grâce à cette fonction pour avoir un résultat plus satisfaisant. Néanmoins j'aurais besoin de quelques précisions supplémentaires, est-il possible par exemple d'étendre ce que vous appelez "MotCherché" à une plage de plusieurs cellules contenant du texte ?

Voilà ce que j'ai fait pour l'instant (qui marche) :

=NB.SI(A1:C1;"*"&'[Classeur2.xlsx]Feuil1'!A1&"*")+NB.SI(A1:C1;"*"&'[Classeur2.xlsx]Feuil1'!A2&"*")+ etc.

J'aimerais avoir un résultat plus de ce type (qui ne marche pas, cela "regarde" seulement A1 du classeur 2) :

=NB.SI(A1:C1;"*"&'[Classeur2.xlsx]Feuil1'!$A$1:$A$7&"*")

Aussi, j'ai remarqué que, sous certaines conditions, des mots présents dans la plage "à chercher" de mon classeur 2 ne sont pas trouvés dans ma plage "à sonder"' de mon classeur 1, voici un exemple :

plage a sonder plage a chercher

Dans ce cas, "Ballon rouge" sera bien trouvé correctement, cependant "Ballon bleu" ne sera trouvé qu'une seule fois alors qu'il est présent 2 fois, et le mot "Fleur" de "Fleur jaune" ne sera pas trouvé alors que qu'il est bien présent dans les mots à sonder mais sans le "jaune" après. En clair j'aimerais un moyen de détecter tous les mots et groupes de mots présents dans le classeur 2 dans la plage "mots à chercher" qui sont présent dans le classeur 1 dans la plage "mots à sonder".

Merci pour votre aide.

Bonjour,

Cela m'étonne que Ballon bleu ne soit pas trouvé 2 fois. Il faut bien saisir les formules et figer correctement les références qui doivent l'être. Pour Fleur jaune, ça ne m'étonne pas puisqu'on cherche "Fleur jaune" dans "Fleur". Je pense qu'il faut bien réfléchir à la façon d'organiser le test d'existence et ça, vous êtes seul à pouvoir le faire.

Pour utiliser la fonction en matriciel, il faut remplacer MotCherché par une plage de mot cherché et utiliser un sommeprod ou la fonction somme en validant avec Ctrl+shift+entrée simultanément (validation matricielle) :

=SOMMEPROD(NB.SI(Plagesondée;"*"&PlageMotsCherchés&"*"))

ou

=SOMME(NB.SI(Plagesondée;"*"&PlageMotsCherchés&"*")) 'en matriciel, doit apparaitre ainsi : {=SOMME(NB.SI(Plagesondée;"*"&PlageMotsCherchés&"*"))}

J'espère que ça répond à vos questions.

Pour ma part, j'éviterais tant que possible de faire ce genre de formules avec des liaisons, dont je ne suis pas un grand adepte en général. Si c'était possible, ce serait quand même plus simple avec tout sur le même classeur.

Cdlt,

Bonjour,

Je vous remercie pour votre temps.

Cela m'étonne que Ballon bleu ne soit pas trouvé 2 fois.

J'ai dû faire une erreur dans la formule car après revérification cela marche bel et bien. Il y a tout de même certain résultats qui me paraissent aberrant même avec la formule correct, par exemple si je supprime le contenu des cellules de mot cherchés, cela renvoie un résultat comme 10 correspondances, alors que j'imagine que cela devrait être 0.

Pour Fleur jaune, ça ne m'étonne pas puisqu'on cherche "Fleur jaune" dans "Fleur". Je pense qu'il faut bien réfléchir à la façon d'organiser le test d'existence et ça, vous êtes seul à pouvoir le faire.

J'aimerais en fait simplement pouvoir trouver s'il y a des mots en commun entre les deux plages, indépendamment de s'ils sont au sein d'une phrase (et si possible sans regarder la casse). J'aimerais que du moment qu'il y ait un "Fleur" dans une cellule dans la plage de mots cherchés, qu'il n'y ait que "Fleur" dans la cellule ou qu'il y ait "Champ, Vert [Fleur] Jaune", que cela compare chaque mot avec le contenu des cellules dans la plage de mots sondés.

Donc si d'un côté j'ai "Champ, Vert [Fleur] Jaune", et de l'autre "Plaine-Vert Fleur; Bleu", j'aimerais simplement que cela renvoie qu'il y a des mots en commun, même si je n'ai que cette seule information sans savoir combien ni même lesquels, du moment que je n'en rate pas. (Je me rend compte tout de même que dès lors que je ne veux pas en rater, savoir combien et lesquels sont pris en compte est utile pour une vérification)

Pour ma part, j'éviterais tant que possible de faire ce genre de formules avec des liaisons, dont je ne suis pas un grand adepte en général. Si c'était possible, ce serait quand même plus simple avec tout sur le même classeur.

Je suis d'accord avec vous, cependant je n'ai pas le choix, à terme il faudrait d'ailleurs que j'interagisse le moins possible avec ce second classeur et que seul le premier classeur fasse le travail pour trouver les mots en communs dans le second sans y toucher.

Bonne journée

Re Al,

A priori, c'est le comportement normal. Lorsqu'une cellule de PlageMots est vide (ce qui n'est pas l'objectif de la formule en l'occurrence), il y a correspondance tout le temps. Donc en principe, le résultat vaut 1 x le nombre de cellules de PlageSondée + les autres résultats.

Lorsque n cellules de PlageMots sont vides, le résultat vaut n x le nombre de cellules de PlageSondée + les autres résultats.

La formule crée une matrice de N éléments (N étant le nombre de valeurs de PlageMots) puis fait la somme de ces N élements, chacun contenant le résultat du nombre d'occurrences pour un mot.

Par ailleurs, la fonction renverra de "faux résultats" si jamais un mot en contient un autre (ex : once, fonce). Les "once" de chaque mot contenant "fonce" seront forcément comptabilisés.

Si ça s'avère complexe, il faudra peut-être songer à faire une macro, d'autant qu'il s'agit de 2 classeurs distincts... Ou alors, repartir sur une formule classique, non matricielle, ce qui permet de visualiser plus facilement les mots présents et d'éviter toute confusion.

Sinon, de mémoire, les fonctions en .SI ne respectent pas la casse.

Je vous remercie pour ces précisions.

Comme je n'arrivais pas à faire fonctionner de façon satisfaisante ma formule, et qu'il va falloir que je complexifie la recherche dans le futur, je suis en train de procéder autrement. Plutôt que de comparer tous les mots au sein d'une plage de cellules avec ceux d'une autre plage de cellules, je suis en train de créer une fonction qui isole tous les mots de ces plages afin que chaque mot possède sa propre cellule. Je n'aurais qu'à comparer les cellules entre-elles par la suite, et ainsi éviter les problèmes que je n'arrive pas à résoudre avec la précédente méthode.

Bien que ce ne soit pas une méthode très "élégante", pour l'instant ça marche. Il faudrait désormais que je fasse une boucle grâce à VBA de sorte à ce que mes formules, qui isolent et lissent la mise en forme des mots, se fassent automatiquement et affichent le résultat. Car pour l'instant je suis obligé de modifier les plages concernées directement dans la formule de la cellule afin que cela s'affiche.

Rechercher des sujets similaires à "detecter mots presents plage"