Les mots qui ressortent le plus de fois sur plusieurs phrases [Résolu/Fermé]

Signaler
-
Messages postés
23420
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
8 août 2020
-
Bonjour,

J'ai 4 colonnes comportant dans chaque cellule des phrases différentes.
J'ai plusieurs centaines phrases dans chaque colonne.
Je souhaiterais savoir pour chaque ligne les valeurs qui ressortent le plus de fois et le nombre de fois qu'elles ressortent.

Exemple, voici 4 phrases :
- j'ai un chat noir à trois pattes
- j'ai un chien noir à quatre pattes
- j'ai un chien blanc à six pattes
-j'ai un chat blanc à quatre pattes

le mot chat ressort 2 fois
le mot chien ressort 2 fois
le mot noir ressort 2 fois
le mot blanc ressort 2 fois
le mot patte ressort 4 fois

Ce sujet est déjà ressorti mais j'ai l'impression que mon cas n'est pas tout à fait pareil car je ne connais pas au préalable les mots. Donc la formule doit deviner le mot qui ressort le plus de fois et calculer le nombre de fois qu'elle ressort. Sachant que dans chaque cellule il y a des phrases différentes plus ou moins longue.

Je me suis peut être mal exprimé mais au moins j'ai essayé :)

Bon casse-tête !




Configuration: Windows / Chrome 76.0.3809.100

2 réponses

Messages postés
23420
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
8 août 2020
6 283
Bonjour à tous,

avec une fonction personnalisée.
Perso je liste tous les mots de la longueur maxi.
Dans l'absolu il faudrait éliminer les pluriels. Mais vue la complexité il faudrait 1 semaine de boulot, plus une liste de toutes les exceptions. Donc non... ;-)
A moins de se contenter de supprimer le s final, seulement "mais" et "mai" seront comptés comme un même mot.
https://www.cjoint.com/c/IHlhgCrIYMz
Syntaxe :
=nbMax(plage, mini)
mini étant la longueur mini des mots à prendre en compte. Pour ne pas prendre à, un, etc
eric

En essayant continuellement, on finit par réussir. 
Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
2
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 56980 internautes nous ont dit merci ce mois-ci

Messages postés
23420
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
8 août 2020
6 283
merci ;-)
Petite modif du fichier, j'avais oublié de mettre les chaines en minuscule avant comparaison :
https://www.cjoint.com/c/IHlkFyUjJdz
eric
>
Messages postés
23420
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
8 août 2020

Merci Eric pour ta réponse. C'est une partie de ce que je voulais.
Je souhaitais connaitre le nombre de fois ou les mots clés apparaissent mais pour chaque mot.

Je vais regarder la réponse de via qui m'a l'air plutît complète.

Je ne sais pas du tout comment les macro marche mais je vais essayer de la faire marcher comme je peux :)

en tout cas merci de l'aide il existe encore des gens qui aide gratuitement, je suis agréablement surpris.
Belle journée :)
Messages postés
12479
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
9 août 2020
1 961
Re,

La chaleur doit me ramollir le cerveau, je m'aperçois seulement maintenant que ta fonction ne répond pas exactement à la demande, elle liste les mots les plus longs mais pas les mots les plus fréquents
Je propose donc d'adapter ta macro ainsi :
Function nbMax(plage As Range, mini As Long)
    Dim c As Range, tmp, i As Long, dict, maxi As Long, l As Long
    Set dict = CreateObject("Scripting.Dictionary")
    For Each c In plage
        tmp = Replace(Replace(Replace(Replace(LCase(c), "'", " "), Chr(160), " "), ",", " "), ".", " ")
        tmp = Split(tmp, " ")
        For i = 0 To UBound(tmp)
        l = Len(tmp(i))
            If l >= mini Then
                If dict.exists(tmp(i)) Then
                    dict(tmp(i)) = dict(tmp(i)) + 1
                Else
                    dict(tmp(i)) = 1
                End If
                If dict(tmp(i)) > maxi Then maxi = dict(tmp(i))
            End If
        Next i
    Next c
    nbMax = maxi & " occurences :,"
    
    For i = 0 To UBound(tmp)
    If dict(tmp(i)) = maxi Then nbMax = nbMax & ", " & tmp(i)
    Next
 
    nbMax = Replace(nbMax, ",,", "")
    Set dict = Nothing
End Function


Amicalement
Messages postés
23420
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
8 août 2020
6 283
oh oui, tu as raison.
C'était pour voir s'il y en avait un qui suivait... :-s
Je cours faire ma sieste ;-)
eric
Messages postés
23420
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
8 août 2020
6 283
Oui, il y a une erreur d'inattention dans mon fichier.
Fais Alt+F11 pour ouvrir VBE.
Double-clique sur Module1 (à gauche) et corrige la ligne vers le bas dans la boucle en :
If dict(tmp(i)) = maxi Then nbMax = nbMax & ", " & tmp(i)

(juste maxi à la place de je ne sais plus quoi)
eric
Messages postés
16174
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
6 août 2020
3 000
Bonjour

Dans ta présentation tu as 2 égalités: "pattes" et "à" .... que fait on ?
cela pourrait être 3 égalités.... etc


Bonjour Michel et merci de ta réponse .

Oui même le « à » est cités 4 fois c’était plus pour montrer ce que je voulais . L’idée est de lister les mots qui ressorte le plus de fois .cest dans un but marketing pour degager désolé tendance . C’est vrai que si je pouvais dégagera le »à «  ça m’arrangerai :)