Statistique - Nombre d'occurence d'un mot dans un texte Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
H
HatSchoom
Nouveau venu
Nouveau venu
Messages : 8
Inscrit le : 11 mai 2015
Version d'Excel : 2010

Message par HatSchoom » 11 mai 2015, 16:48

Bonjour à tous,

J'aurais besoin de réaliser une démarche me permettant de compter le nombre d'occurrence de tous les mots d'un texte. Le but est de savoir sur un échantillon d'articles les mots les plus utilisés.

J'ai déjà quelques bases de code mais j'avoue que sous Excel, je suis un peu perdu.

Voici la démarche que je comptais réaliser et pour laquelle je n'arrive pas à trouver le code :

1. Récupérer le texte sous Excel

Je fais un copier-coller de l'article que je souhaite analyser et je le colle dans Excel. Je me retrouve avec les cellules de la première colonne du tableur remplie par un texte correspondant à chaque ligne de mon texte source.
A partir de cela, de manière à avoir un mot par cellule, j'ai réalisé une conversion de donnée avec le séparateur Espace.
Je me retrouve avec un mot (ou caractère dans le cas de la ponctuation) par cellule d'un tableau de dimension indéfinie.

2. Macro : Stocker l'ensemble des mots dans une colonne

A ce stade, je souhaiterais coder une macro me permettant de stocker ces mots non plus dans un tableau mais dans une seule colonne pour faciliter le traitement des données (étapes 3 et 4). La macro ressemble à cela (en français) :

Variables :

Start : numéro de la ligne de la première colonne à partir de laquelle on copiera les valeurs stockées dans les autres colonnes
Lastline : numéro de la dernière ligne d'une colonne donnée (cette valeur évoluera dans les boucles)
Lastcolumn : numéro de la dernière colonne contenant des valeurs
Numline
Numcol

Fonction :

Start = Dernière ligne de la première colonne +1

Pour Numcol allant de 2 à Lastcolumn
Lastline = dernière ligne de la colonne Numcol

Pour Numline allant de 1 à Lastline
Cellule(Start,1) = Cellule(numline,numcol)
Start = Start + 1
Fin
Fin

Normalement à ce niveau-là, j’ai toutes mes valeurs stockées dans la première colonne. Mon principal problème en VBA est d’atteindre la dernière ligne d’une colonne ou la dernière colonne d’une ligne sachant que je vais forcément avoir des blancs dans la plage de données.

3. Extraction sans doublon dans la colonne ainsi formée
J’extrais sans doublon dans une autre feuille ou une autre plage de ma feuille.

4. Comptage des mots
J’utilise la fonction NB.SI pour compter les occurrences pour chacun des mots présents dans mon extraction sans doublon

Voilà pour la démarche. Pouvez-vous me guider sur la manière de coder en langage VBA le bout de code que j’ai détaillé dans l’étape 2 (et 3 et 4 si vous voyez comment intégrer cela à la macro). Sinon si vous avez d'autres idées qui soient plus simples et qui aboutissent au même résultat, je suis preneur.

Si je n’ai pas été assez précis, n’hésitez pas à me demander des précisions.

Un grand merci par avance à ceux qui se creuseront la tête sur ce problème !
Avatar du membre
LouReeD
Contributeur
Contributeur
Messages : 6'679
Appréciations reçues : 324
Inscrit le : 14 octobre 2014
Version d'Excel : 2013 FR, 2016 FR
Contact :
Téléchargements : Mes applications

Message par LouReeD » 11 mai 2015, 22:45

Bonsoir,

Utilisez la fonction Split.
'Extraire les données séparées par un espace dans une chaine de caractères
Sub extractionMots()
    Dim Tableau() As String
    Dim i As long    
    'découpe la chaine en fonction des espaces " "
    'le résultat de la fonction Split est stocké dans un tableau
    Tableau = Split(Sheets(1).Cells(1,1).Value, " ")
    ' en admettant que le texte collé est dans la cellule A1 de la première feuille du classeur actif

    'boucle sur le tableau pour vérifier tous les mots
    For i = 0 To UBound(Tableau)
'
    Next i
End Sub
Une fois tous les mots en mémoire, il suffirait de croiser des boucles pour compter les valeurs identiques dans ce tableau.

à réfléchir, non ?

@ bientôt

LouReeD
Quelques règles à lire ICI ;;)
______________________________________________________Vous pouvez allez faire un tour sur : Index de "Mes applications" ;;)
H
HatSchoom
Nouveau venu
Nouveau venu
Messages : 8
Inscrit le : 11 mai 2015
Version d'Excel : 2010

Message par HatSchoom » 12 mai 2015, 14:41

Bonjour LouReed et merci pour ta réponse,

D'après ce que j'ai compris, tu as stocké le résultat de l'extraction des mots du texte dans un tableau dynamique.

Plusieurs questions :

- Comment afficher le résultat de la fonction split ?

j'ai essayé d'ajouter aux lignes de codes que tu m'as fournies les lignes suivantes :

For i = 0 To UBound(Tableau)
Cells(i,2) = Tableau(i) OU Cells(i,2) = Tableau(i, 1)
Next i

Ce code ne se compile pas. Je ne trouve donc pas le moyen d'atteindre le contenu de ce tableau. Et par ailleurs, je n'ai pour l'instant aucun moyen de voir ce que la fonction split a fait.

- La boucle vide à la fin de ton code est bien là pour symboliser les étapes qui vont suivre et n'a pour l'instant aucune utilité dans le code ?

- En admettant que la fonction split ait marché pour séparer le texte par les espaces, comment ce code pourra effectuer la gestion de la ponctuation et des retours à la ligne ?

Merci
H
HatSchoom
Nouveau venu
Nouveau venu
Messages : 8
Inscrit le : 11 mai 2015
Version d'Excel : 2010

Message par HatSchoom » 12 mai 2015, 15:03

Bon le problème était en fait tout simple, c'est simplement que la fonction Cells part de 1 alors que le tableau part de 0.

Résultat en pièce jointe. A partir de cela, il reste à se creuser les méninges pour gérer la ponctuation et les retours à la ligne.

Est-ce que la fonction split peut prendre en compte plusieurs séparateurs. Par exemple :

Split(Sheets(1).Cells(1,1).Value, " " OR "," OR ".") et est-ce possible de la faire marcher pour les retours à la ligne?
test1.xlsm
(19.72 Kio) Téléchargé 38 fois
Avatar du membre
LouReeD
Contributeur
Contributeur
Messages : 6'679
Appréciations reçues : 324
Inscrit le : 14 octobre 2014
Version d'Excel : 2013 FR, 2016 FR
Contact :
Téléchargements : Mes applications

Message par LouReeD » 12 mai 2015, 16:11

Bonjour,

il y a certainement mieux (de la part des "pros")
mais sur le fichier joint, la fonction Replace afin de mettre le texte en forme : suppression de la ponctuation, des retours à la ligne, des doubles espaces etc...
Ensuite utilisation d'un "dictionnaire" sous VBA : particularité les dicos ne supporte pas les doublons et sont très rapides !

Petit bémol : la Sub ne gère pas les mots au pluriel => valeur et valeurs sont deux mots différents !

Voilà

Enfin, s'il fallait plus de ligne pour découper le texte et afficher les mots sans doublons, il faudra "glisser" la formule en colonne E vers le bas pour ajuster à vos besoins.

@ bientôt

LouReeD

Edit : correction de petites erreurs, ajout la suppression des guillemets, et mis en place d'un texte sur les hypertextes !
ATTENTION ! les mots composés avec apostrophe sont découpés en deux, comme aujourd'hui du fait du remplacement de l'apostrophe par un espace => aujourd hui, puis remplacement de l'espace par | => aujourd|hui, puis découpage des mots par split avec le caractère | => aujourd et hui... :mrgreen: Mais bon dans l'ensemble ça marche....
test2.xlsm
(34.12 Kio) Téléchargé 106 fois
Quelques règles à lire ICI ;;)
______________________________________________________Vous pouvez allez faire un tour sur : Index de "Mes applications" ;;)
H
HatSchoom
Nouveau venu
Nouveau venu
Messages : 8
Inscrit le : 11 mai 2015
Version d'Excel : 2010

Message par HatSchoom » 13 mai 2015, 10:53

Pour les mots composés, je pense que ce n'est pas un énorme problème. Un grand merci à toi pour ton aide, c'est du très beau boulot ! Le résultat est mieux que ce que j'espérais.

à bientôt
Avatar du membre
LouReeD
Contributeur
Contributeur
Messages : 6'679
Appréciations reçues : 324
Inscrit le : 14 octobre 2014
Version d'Excel : 2013 FR, 2016 FR
Contact :
Téléchargements : Mes applications

Message par LouReeD » 13 mai 2015, 11:09

De rien ;-)
@ bientôt

Loureed

:btres:
Quelques règles à lire ICI ;;)
______________________________________________________Vous pouvez allez faire un tour sur : Index de "Mes applications" ;;)
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message