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

- - Dernière réponse : eriiic
Messages postés
22853
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
24 août 2019
- 12 août 2019 à 01:05
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
Afficher la suite 

2 réponses

Meilleure réponse
Messages postés
22853
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
24 août 2019
5599
2
Merci
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

Dire « Merci » 2

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 59102 internautes nous ont dit merci ce mois-ci

eriiic
Messages postés
22853
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
24 août 2019
5599 -
merci ;-)
Petite modif du fichier, j'avais oublié de mettre les chaines en minuscule avant comparaison :
https://www.cjoint.com/c/IHlkFyUjJdz
eric
> eriiic
Messages postés
22853
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
24 août 2019
-
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 :)
via55
Messages postés
10981
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
24 août 2019
1375 -
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
eriiic
Messages postés
22853
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
24 août 2019
5599 -
oh oui, tu as raison.
C'était pour voir s'il y en avait un qui suivait... :-s
Je cours faire ma sieste ;-)
eric
eriiic
Messages postés
22853
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
24 août 2019
5599 -
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
Commenter la réponse de eriiic
Messages postés
15906
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
24 août 2019
2781
1
Merci
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 :)
Commenter la réponse de michel_m