Générer une liste de mots avec leur occurrence (plusieurs cellules)
Nehelya
Messages postés
1
Date d'inscription
Statut
Membre
Dernière intervention
-
Lena75 -
Lena75 -
Bonjour à tous,
J'ai navigué dans plusieurs forum mais n'ai malheureusement pas trouvé réponse à ma problématique.
Je dispose d'un fichier excel avec plusieurs lignes et plusieurs colonnes remplis de texte et non pas de mot unique.
Je souhaiterais générer une liste avec tout les mots présents dans ces cellules y compris ceux présents dans les cellules contenant du texte avec leur nombre d'apparition dans tout le fichier excel.
Et si possible, créer une liste de mot à exclure (tel que les "le", "la", "et", etc.).
Avez-vous des solutions à me proposer ?
J'ai trouvé des bouts de VBA ne répondant que partiellement à ma problématique (prend en compte 1 seul cellule) mais je vous avoues ne pas bien maitriser la création de macro.
Merci d'avance pour votre retour.
J'ai navigué dans plusieurs forum mais n'ai malheureusement pas trouvé réponse à ma problématique.
Je dispose d'un fichier excel avec plusieurs lignes et plusieurs colonnes remplis de texte et non pas de mot unique.
Je souhaiterais générer une liste avec tout les mots présents dans ces cellules y compris ceux présents dans les cellules contenant du texte avec leur nombre d'apparition dans tout le fichier excel.
Et si possible, créer une liste de mot à exclure (tel que les "le", "la", "et", etc.).
Avez-vous des solutions à me proposer ?
J'ai trouvé des bouts de VBA ne répondant que partiellement à ma problématique (prend en compte 1 seul cellule) mais je vous avoues ne pas bien maitriser la création de macro.
Merci d'avance pour votre retour.
A voir également:
- Générer une liste de mots avec leur occurrence (plusieurs cellules)
- Liste déroulante excel - Guide
- Formule excel pour additionner plusieurs cellules - Guide
- Generer mot de passe - Télécharger - Sécurité
- Liste déroulante en cascade - Guide
- Trousseau mot de passe iphone - Guide
2 réponses
Bonjour,
Un (gros) début de piste :
Bon courage!
Un (gros) début de piste :
Option Explicit Sub Vazy() Dim Plage As Range, C As Range, arr, Dict As Object, strTexteComplet As String, temp As String Set Plage = Sheets("Feuil1").Range("A1:H23") 'A ADAPTER LA PLAGE CONTENANT LES DONNEES For Each C In Plage.Cells strTexteComplet = strTexteComplet & C.Text Next temp = RemovePunctuation(strTexteComplet) temp = UCase$(temp) arr = Split(temp, " ") Set Dict = CreateObject("Scripting.Dictionary") FillDictionary Dict, arr Erase arr SortDictByFreq Dict, arr DisplayTheTopMostUsedWords arr, 10 Debug.Print "Mots différents dans la plage : " & Dict.Count Debug.Print "-------------------------" Debug.Print "" Debug.Print "Optionally : " Debug.Print "Fréquence du mot : ""contenu"" : " & DisplayFrequencyOf(UCase("contenu"), Dict) Debug.Print "Fréquence du mot : ""représente"" : " & DisplayFrequencyOf(UCase("représente"), Dict) Debug.Print "Fréquence du mot : ""tititototata"" : " & DisplayFrequencyOf(UCase("tititototata"), Dict) Debug.Print "-------------------------" End Sub Public Function RemovePunctuation(strBook As String) As String Dim T, i As Integer, temp As String Const PUNCT As String = """,;:!?." T = Split(StrConv(PUNCT, vbUnicode), Chr(0)) temp = strBook For i = LBound(T) To UBound(T) - 1 temp = Replace(temp, T(i), " ") Next temp = Replace(temp, "--", " ") temp = Replace(temp, "...", " ") temp = Replace(temp, vbCrLf, " ") RemovePunctuation = Replace(temp, " ", " ") End Function Public Sub FillDictionary(D As Object, a As Variant) Dim l As Long For l = LBound(a) To UBound(a) If a(l) <> "" Then D(a(l)) = D(a(l)) + 1 Next End Sub Public Sub SortDictByFreq(D As Object, MyArr As Variant) Dim k Dim l As Long ReDim MyArr(1 To D.Count, 1 To 2) For Each k In D.Keys l = l + 1 MyArr(l, 1) = k MyArr(l, 2) = CLng(D(k)) Next SortArray MyArr, LBound(MyArr), UBound(MyArr), 2 End Sub Public Sub SortArray(a, le As Long, Ri As Long, Col As Long) Dim ref As Long, l As Long, r As Long, temp As Variant ref = a((le + Ri) \ 2, Col) l = le r = Ri Do Do While a(l, Col) < ref l = l + 1 Loop Do While ref < a(r, Col) r = r - 1 Loop If l <= r Then temp = a(l, 1) a(l, 1) = a(r, 1) a(r, 1) = temp temp = a(l, 2) a(l, 2) = a(r, 2) a(r, 2) = temp l = l + 1 r = r - 1 End If Loop While l <= r If l < Ri Then SortArray a, l, Ri, Col If le < r Then SortArray a, le, r, Col End Sub Public Sub DisplayTheTopMostUsedWords(arr As Variant, Nb As Long) Dim l As Long, i As Integer i = 1 Debug.Print "Rang Mot Frequence" Debug.Print "==== ======= =========" For l = UBound(arr) To UBound(arr) - Nb + 1 Step -1 Debug.Print Left$(CStr(i) & " ", 5) & Left$(arr(l, 1) & " ", 8) & " " & arr(l, 2) i = i + 1 Next End Sub Public Function DisplayFrequencyOf(Word As String, D As Object) As Long If D.Exists(Word) Then DisplayFrequencyOf = D(Word) End Function
Bon courage!
Bonjour,
Je cherchais à faire la même chose que toi et j'ai fini par me bricoler un code très archaïque (nécessite plusieurs feuillles...) comparé à ce qu'a proposé pijaku (que je remercie pour l'aide qu'il apporte depuis tout ce temps) mais qui fait le travail; est-ce que ça pourrait t'intéresser?
Cdlt
Je cherchais à faire la même chose que toi et j'ai fini par me bricoler un code très archaïque (nécessite plusieurs feuillles...) comparé à ce qu'a proposé pijaku (que je remercie pour l'aide qu'il apporte depuis tout ce temps) mais qui fait le travail; est-ce que ça pourrait t'intéresser?
Cdlt