VBA - Categoriser par mots cles

titymax

XLDnaute Occasionnel
Bonjour à tous,

Je reviens vers vous dans l'espoir que vous puissiez m'aider à résoudre la problématique suivante par VBA (macro).

Comme vous pourrez le voir dans l'exemple joint, je dois catégoriser des données à partir de mots clés contenus dans une base.

Un onglet "CATEGORIES" contient la liste des catégories en fonction de mots clés (base).
L'onglet "DONNEES " contient les données qui sont à répertoriées par catégories.

Ce que je souhaite, c'est pouvoir via une macro, aller écrire dans la colonne A, la catégorie à laquelle appartiennent les données correspondantes listées dans la colonne B en fonction des mots clés quelles contiennent.

EX : Ligne 2 colonne B nous avons " Les tendrons sont frais et épicés", cette donnée contient le mot clé "tendrons", la macro doit donc afficher en A2 la catégorie "CHARCUTERIE".

Merci d'avance pour votre aide précieuse.
 

Pièces jointes

  • Categoriser.xls
    25.5 KB · Affichages: 67
Dernière édition:

david84

XLDnaute Barbatruc
Re : Categoriser par mots cles

Bonjour,
un essai via une fonction personnalisée :
Code:
Function Categorie(chaine As String, plage As Range) As String
Dim c As Range
For Each c In plage
  If LCase(chaine) Like "*" & LCase(c.Text) & "*" Then Categorie = c.Offset(0, 1).Text: Exit Function
Next c
End Function
et en A2 de l'ongler Données :
Code:
=Categorie(B2;CATEGORIES!$C$2:$C$8)
A+
 

titymax

XLDnaute Occasionnel
Re : Categoriser par mots cles

Bonjour David,

Pour des raisons propres à mon application, je ne souhaite pas écrire de formules dans les cellules, je préfèrerais une solution purement macro qui une fois exécutée donne le même résultat.

Merci de m'avoir consacré du temps.
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : VBA - Categoriser par mots cles

Bonjour le fil, bonjour le forum,

Peut-être comme ça :
Code:
Sub Macro1()
Dim D As Object 'déclare la variable D (DONNEES)
Dim C As Object 'déclare la variable C (CATEGORIES)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim PL As Range 'déclare la variable PL (PLage)
Dim CEL As Range 'déclare la variable CEL (CELlule)
Dim R As Range 'déclare la variable R (Recherche)
Dim PA As String 'déclare la variable PA (Première Adresse)

Set D = Sheets("DONNEES") 'définit l'onglet D
Set C = Sheets("CATEGORIES") 'définit l'onglet C
DL = C.Cells(Application.Rows.Count, 3).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne 3 (=C) de l'onglet C
Set PL = C.Range("C2:C" & DL) 'définit la palge PL
For Each CEL In PL 'boucle sur toutes les cellules CEL de la plage PL
    Set R = D.Columns(2).Find(CEL.Value, , xlValues, xlPart) 'définit la recherche R (Recherche le mot clé dans la colonne 2 (=B) de l'onglet D)
    If Not R Is Nothing Then 'condition : si il existe au moins une occurrence trouvée
        PA = R.Address 'définit l'adresse de la première occurrence trouvée
        Do 'exécute
            R.Offset(0, -1).Value = CEL.Offset(0, 1).Value 'récupère la catégorie
            Set R = D.Columns(2).FindNext(R) 'redéfinit la recherche R (occurrence suivante)
        Loop While Not R Is Nothing And R.Address <> PA 'boucle tant qu'il existe de nouvelles occurrences ailleurs qu'en PA
    End If 'fin de la condition
Next CEL 'prochaine cellule de la boucle
End Sub
 

titymax

XLDnaute Occasionnel
Re : VBA - Categoriser par mots cles

Bonjour Robert,

Merci bcp pour ce code, je m'en servirais peut être si jamais je rencontre des problèmes par la suite dans mon application.

En effet, avec la solution proposée par David, je suis arrivé à l'utiliser comme une macro en insérant dans le code de mon application un "Formula.Local" qui va bien et pour le moment ça fonctionne.

Bref, merci à vous deux et plus généralement à tous ceux qui ont pris le temps de s'intéressé de prés ou de loin à mon problème.

Bonne continuation à tous les forumeurs !!!

A+
 

Discussions similaires

Réponses
16
Affichages
1 K
Réponses
3
Affichages
231

Statistiques des forums

Discussions
312 429
Messages
2 088 351
Membres
103 823
dernier inscrit
ben talha redouane