Recherche d'une combinaison de mot clef dans un champ texte
Bonjour,
je n'ai pas trouvé ou n'ai pas su adapter les codes proposés.
Je souhaite dans une cellule contenant du texte, identifier si j'ai une combinaison de plusieurs mot clef.
par exemple j'ai la phrase suivante:
je veux manger du pain dans la cuisine
j'ai mes clusters suivants: verbe, pronom, localisation,
ces clusters sont définis par les mots clefs suivants,
verbe --> vouloir, manger, prendre
pronom--> je, tu, il, elle
localisation --> cuisine, salon, jardin
ma règle est la suivante si j'ai un verbe et un pronom et une localisation je retourne 1 dans la cellule sinon 0.
Merci de votre aide,
Bonjour,
Je n'ai pas la possibilité de télécharger des fichiers sur mon ordinateur; serait-il possible d'écrire le code directement dans le champ texte de la réponse?
Cordialement,
bonjour,
voici le code, il s'agit d'une fonction personnalisée
pour que la fonction fonctionne, tu dois créer une feuille nommée clusters avec pour chaque colonne, un entête de colonne qui contiendra le nom du cluster et dans la colonne tous les mots du cluster. le premier cluster doit se trouver en colonne A, il ne peut pas y avoir de colonne vide entre 2 clusters. de même il ne peut pas y avoir de cellule vide entre 2 mots d'une même liste.
(conjugaison, pluriels, féminin sont à prévoir explicitement dans la liste des mots)
Function cp(p, ParamArray cl())
'fonction qui vérifie si une phrase (p) comporte des mots appartenants aux clusters dont le nom est donné en paramètre
'la fonction retourne 1 si au moins un mot par cluster a été trouvé dans la phrase
'appel de la fonction =cp(phrase,"cluster1","cluster2","cluster3", ..,"clustern")
' cluster1 à clustern sont des noms d'entêtes des colonnes de la feuille cluster qui contient les mots appartenant aux clusters
'soit les 3 clusters verbe,pronom,localisation contenant respectivement les mots
' veux,manger,veut
' je tu il
' salon cuisine, jardin
'
' l'appel de la fonction pourrait se faire ainsi
' =cp(A1,"verbe","pronom","localisation")
'
Dim f() ' tableau indiquant si un mot a été trouvé dans chaque cluster
Application.Volatile
ReDim f(LBound(cl) To UBound(cl))
t = Split(p) ' t tableau contenant chaque mot de la phrase
c = 0 ' compteur du nombre de clusters différents dans lesquels un mot a été trouvé
With Sheets("clusters")
'dc dernière colonne non vide sur clusters
dc = .Cells(1, Columns.Count).End(xlToLeft).Column
For i = 1 To dc
dl = .Cells(Rows.Count, 1).End(xlUp).Row
If dl > maxdl Then maxdl = dl 'maxdl dernière ligne non vide sur tous les clusters
Next i
Set pl = Range(.Cells(1, 1), .Cells(maxdl, dc)) 'pl plage de recherche des mots
For i = LBound(t) To UBound(t) 'on prend chaque mot de la phrase
Set re = pl.Find(t(i), lookat:=xlWhole) 'on recherche le mot dans la feuille clusters
If Not re Is Nothing Then 'si mot trouvé
For j = LBound(cl) To UBound(cl) 'on recherche dans quel cluster
If cl(j) = .Cells(1, re.Column) Then 'j N) de colonne du cluster
If f(j) = False Then ' si pas encore de mot trouvé dans ce cluster
c = c + 1 'on ajoute 1 au compteur des clusters différents
f(j) = True 'on a trouvé un mot dans ce cluster
End If
Exit For
End If
Next j
End If
Next i
If c = (UBound(cl) - LBound(cl)) + 1 Then cp = 1 Else cp = 0 'retourne 1 ou 0
End With
End Function