Trouver les termes communs dans les cellules d'une colonne

Fermé
leouf - 20 mars 2015 à 22:09
 leouf - 21 mars 2015 à 13:13
Bonjour à tous,

ça va faire une journée que je cherche sur le net sans trouver de solution.

Je veux trouver tous les mots qui se répètent dans les cellules d'une colonne. sachant que chaque cellule, de cette colonne, contient une phrase.

Exemple :

!! les sens des phrases dans l'exemple ne veut rien dire :) !!

Cellule 1 : Toto est sorti jouer
Cellule 2 : Koko et toto sont amis
Cellule 3 : les kokos sont plus bénéfiques que les dodos
Cellule 4 : Toto et lesdodo (lesdods : attaché exprès)

Dans l'exemple, la solution donnerait : toto, koko, dodo

j'ai une liste de plusieurs centaines de lignes à traiter.

je suis ouvert à toutes les solutions.
Merci d'avance pour vos efforts.

A voir également:

1 réponse

via55 Messages postés 14474 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 19 septembre 2024 2 728
21 mars 2015 à 00:23
Bonsoir

Une possibilité par macro (à adapter à ton fichier)
En supposant la liste des phrases en colonne A sur cent lignes, on retourne la liste des communs en colonne C :
Sub communs()
'boucle sur les lignes 1 à 100
For n = 1 To 100 'A ADAPTER
' decompose la chaine de la cellule A de la ligne
a = Split(Range("A" & n), " ")
' pour chaque mot de la chaine
For Each c In a
' chaine v composé du mot en majuscule entouré d'*
v = "*" & UCase(c) & "*"
'boucle sur les lignes suivant celle en cours
For t = n + 1 To 100 'A ADAPTER
' vérifie si la chaine v existe dans la chaine de la cellule
If UCase(Range("A" & t).Value) Like v Then
' si oui on incrémente la variable de ligne de 1
x = x + 1
' et on inscrit le mot commun en colonne C
Range("C" & x) = c
End If
Next t
Next c
Next n
' une fois la liste des mots communs établi en colonne C :
Dim Ligne As Long
' derniere ligne non vide de la colonne C
Ligne = Columns(3).Find("*", , , , xlByColumns, xlPrevious).Row
' suppression des doublons en colonne C
ActiveSheet.Range("$C$1:$C$" & Ligne).RemoveDuplicates Columns:=1, Header:=xlNo
End Sub


Macro à mettre dans un module (ALT F11 pour ouvrir l'éditeur puis Insertion et Module) et à lancer après depuis la feuille à partir de l'onglet Developpeurs et Macros

Cdlmnt
0
Raymond PENTIER Messages postés 58651 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 19 septembre 2024 17 198
Modifié par Raymond PENTIER le 21/03/2015 à 03:06
En effet, leouf, ce que tu veux faire n'existe pas dans les formules, fonctions et outils classiques d'Excel.
C'est pourquoi notre brillant ami via55 a été obligé de créer une macro spécifique, en utilisant le langage VBA, pour essayer de trouver une solution à ton problème.
Mais si tu ne t'y connais pas en VBA, il te sera impossible d'ajuster, de modifier ou adapter cette macro quand tes besoins viendront à évoluer ...
0
leouf > Raymond PENTIER Messages postés 58651 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 19 septembre 2024
21 mars 2015 à 13:13
Bonjour à tous,

Merci pour l'intérêt que vous avez porté à mon problème.

@Raymond : C'est vrai, il faut avoir une base en VBA, je ne suis pas un pro mais je m'en sors un peu.

@via55 : Merci beaucoup pour ta macro, c'est un bon départ pour ce que je veux faire. ton idée de spliter la phrase est ingénieuse, je m'en suis inspiré pour utiliser la fonction d'excel qui permet de diviser un texte en colonnes, à partir de là je pense pouvoir faire quelque chose.

pour vous donner une idée plus précise sur ma situation :

Il s'agit de trouver la meilleure façon de codifier les noms de fournisseurs (phrase en colonnes), de tel façon à ce qu'il sera facile de les repérer lors d'une saisie, en introduisant dans un champ, un ID de 10 caractère, ce dernier ne doit pas contenir de nom générique (qui se répète souvent dans d'autres noms de fournisseurs, comme : Electrique, Entreprises, acier, transport, services, ....) pour réduire le temps de recherche.

donc je me suis dit qu'en supprimant les noms génériques des phrases, je vais pouvoir garder des noms spécifiques que je pourrais ensuite codifier en 10 caractères facilement en les standardisant.

je vais continuer à travailler dessus sur la base de vos conseils. si toutefois vous avez de meilleures idées je suis toujours preneur.

Merci et bon samedi à vous.
0