Macro - un mot par ligne? Possible?

magnusyou

XLDnaute Junior
Hello à tous,

Je me permets de vous écrire car j'ai un besoin pour lequel je ne suis pas sûr qu'une macro puisse y répondre.. mais je tente!

En fait j'ai une liste de termes (phrase en fait) que je souhaiterais découper par mot.

Du coup, quand une cellule contient 4 mots, je souhaiterais obtenir sur les 4 lignes chaque mot séparé.

Le but de cela est de savoir quel sont les termes les plus utilisés dans cette liste de phrase.

Avez-vous une idée de comment construire une macro qui puisse répondre à cela?

Je vous mets un exemple en pj pour plus de précision.

Dans l'espoir de trouver une solution,

A bientôt :)
 

Pièces jointes

  • Résultat.xlsx
    12.5 KB · Affichages: 22
  • Résultat.xlsx
    12.5 KB · Affichages: 24
  • Résultat.xlsx
    12.5 KB · Affichages: 26

Efgé

XLDnaute Barbatruc
Re : Macro - un mot par ligne? Possible?

Bonjour magnusyou

Une proposition, qui arrive directement au résultat, sans colonnes intermédiare ni TCD.
Le code est a lancer avec Alt+F8
VB:
Sub test()
Dim i&, J&
Dim D As Object, TData As Variant
Dim Tmp As Variant, TReport As Variant, K As Variant
Set D = CreateObject("scripting.dictionary")
With Sheets("Feuil1")
    TData = .Range("$B$3:$B" & .Cells(.Rows.Count, "B").End(3).Row)
End With
For i = LBound(TData, 1) To UBound(TData, 1)
    Tmp = Split(TData(i, 1), " ")
    For J = LBound(Tmp) To UBound(Tmp)
        D(Tmp(J)) = D(Tmp(J)) + 1
    Next J
Next i
i = 0
ReDim TReport(1 To D.Count, 1 To 2)
For Each K In D.Keys
    i = i + 1
    TReport(i, 1) = K
    TReport(i, 2) = D(K)
Next K
Sheets("Feuil1").Range("$G$2").Resize(D.Count, 2) = TReport
End Sub
 

Pièces jointes

  • Résultat(1).xlsm
    12.9 KB · Affichages: 25

camarchepas

XLDnaute Barbatruc
Re : Macro - un mot par ligne? Possible?

Bonjour magnusyou , Efgé,

Voici une variante :

Code:
Sub Découpe()
Dim Mot As String
Dim FinB As Long, FinC As Long
Dim Tourne As Long, Espace As Long, Trouve As Long
Dim Phrase As String
FinB = Range("B" & Rows.Count).End(xlUp).Row
For Tourne = 3 To FinB
 Phrase = Range("b" & Tourne) & " "
 Espace = 0
 Trouve = 1
 Do
  Trouve = InStr(Trouve, Phrase, " ") + 1
  Mot = Split(Phrase, " ")(Espace)
  Range("C" & Range("C" & Rows.Count).End(xlUp).Row + 1) = Mot
  Espace = Espace + 1
 Loop Until InStr(Trouve, Phrase, " ") = 0
Next Tourne
End Sub
 

Pièces jointes

  • Résultat.xlsm
    19.2 KB · Affichages: 21

magnusyou

XLDnaute Junior
Re : Macro - un mot par ligne? Possible?

Hello à tous!!

Merci beaucoup pour vos réponses, les 2 cas fonctionnent :)

Petite préférence pour la première soluce qui me permet d'avoir le nombre d'occurrence trouvé dans la colonne à côté!

Je remarque aussi que la macro fait une différence entre les mêmes mots selon qu'il y ait présence d'une majuscule ou non.

Pour le mot "vente" et "Vente" l'outil me dit que c'est 2 mots différents. Comment faire pour enlever cette contrainte?

Merciiiiiiiii :)
 

magnusyou

XLDnaute Junior
Re : Macro - un mot par ligne? Possible?

Bonjour Efgé,

Merci beaucoup pour ta réponse! :)

Stp, comment intégrer cette ligne à la macro de "camarchepas"?

Sub test()
Dim i&, J&
Dim D As Object, TData As Variant
Dim Tmp As Variant, TReport As Variant, K As Variant
Set D = CreateObject("scripting.dictionary")
With Sheets("Feuil1")
TData = .Range("$B$3:$B" & .Cells(.Rows.Count, "B").End(3).Row)
End With
For i = LBound(TData, 1) To UBound(TData, 1)
Tmp = Split(TData(i, 1), " ")
For J = LBound(Tmp) To UBound(Tmp)
D(Tmp(J)) = D(Tmp(J)) + 1
Next J
Next i
i = 0
ReDim TReport(1 To D.Count, 1 To 2)
For Each K In D.Keys
i = i + 1
TReport(i, 1) = K
TReport(i, 2) = D(K)
Next K
Sheets("Feuil1").Range("$G$2").Resize(D.Count, 2) = TReport
End Sub

?

Par avance merci de ton aide :)

magnusyou
 

Efgé

XLDnaute Barbatruc
Re : Macro - un mot par ligne? Possible?

Bonjour magnusyou, Bonjour camarchepas
@ magnusyou
Le code que tu présente est le mien, pas celui de camarchepas...
Pour le mien tu remplace
VB:
D(Tmp(J)) = D(Tmp(J)) + 1
Par
VB:
D(LCase(Tmp(J))) = D(LCase(Tmp(J))) + 1

Pour celui de camarchepas, tu ne peux pas: Le code écrit, ligne par ligne chaque mot trouvé tel qu'il est trouvé.

Cordialement
 

camarchepas

XLDnaute Barbatruc
Re : Macro - un mot par ligne? Possible?

Bonjour Magnusyou, Efgé,

Voici mon code modifé afin de remonter le nombre d'occurences ,et de ne pas tenir compte de la case des lettres.

Cordialement

Code:
Sub Découpe()
Dim Mot As String, Phrase As String
Dim FinB As Long, FinC As Long
Dim Tourne As Long, Espace As Long, Trouve As Long
Dim Cherche As Range
FinB = Range("B" & Rows.Count).End(xlUp).Row
For Tourne = 3 To FinB
 Phrase = Range("b" & Tourne) & " "
 Espace = 0
 Trouve = 1
 Do
  Trouve = InStr(Trouve, Phrase, " ") + 1
  Mot = LCase(Split(Phrase, " ")(Espace))
  Set Cherche = Range("C:C").Find(Mot, lookat:=xlWhole)
  If Cherche Is Nothing Then
    Range("C" & Range("C" & Rows.Count).End(xlUp).Row + 1) = LCase(Mot)
    Range("D" & Range("C" & Rows.Count).End(xlUp).Row) = 1
   Else
    Range("C" & Cherche.Row) = LCase(Mot)
    Range("D" & Cherche.Row) = Range("D" & Cherche.Row) + 1
  End If
  Espace = Espace + 1
 Loop Until InStr(Trouve, Phrase, " ") = 0
Next Tourne
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 502
Messages
2 089 049
Membres
104 012
dernier inscrit
baffyt2