Bonjour,
Je suis un novice en VBA et j'ai essayé avec mes maigres connaissances de catégoriser une chaîne de caractères. Le fichier est en pièce jointe, et comprend deux colonnes :
La liste des catégories doit être stockée dans le code VBA. J'ai 40 catégories différentes et environ 5 mots-clés par catégorie.
J'ai pour l'instant réussi avec deux macros différentes utilisant instr : (exemples avec deux catégories, 3 mots par catégorie) :
Macro 1 : les mots-clés servant à catégoriser sont séparés par "or" :
Macro 2 : les mots-clés servant à catégoriser sont "stockés" dans une variable (en utilisant Array) :
L'utilisation de Array me simplifie un peu la tâche car j'ai beaucoup de mots-clés, cependant je dois créer une boucle par catégorie + une variable différente à chaque fois (okay1, okay2).
Pouvez-vous svp m'aider à simplifier ce code (en utilisant par exemple une matrice ?) ? Je n'ai pas (encore ) les connaissances nécessaires pour le faire, mais serait ravi d'apprendre.
Merci beaucoup pour votre aide,
Nico
Je suis un novice en VBA et j'ai essayé avec mes maigres connaissances de catégoriser une chaîne de caractères. Le fichier est en pièce jointe, et comprend deux colonnes :
- colonne A : chaine de caractères comprenant le mot à identifier
- colonne C : à remplir avec la catégorie
La liste des catégories doit être stockée dans le code VBA. J'ai 40 catégories différentes et environ 5 mots-clés par catégorie.
J'ai pour l'instant réussi avec deux macros différentes utilisant instr : (exemples avec deux catégories, 3 mots par catégorie) :
Macro 1 : les mots-clés servant à catégoriser sont séparés par "or" :
Code:
Sub macro1()
Range("A1").Select
Do While ActiveCell.Value <> ""
If InStr(1, ActiveCell, "tomate", 1) Or InStr(1, ActiveCell, "fruit", 1) Or InStr(1, ActiveCell, "poire", 1) Then
ActiveCell.Offset(0, 2).Value = "Fruits"
ElseIf InStr(1, ActiveCell, "camion", 1) Or InStr(1, ActiveCell, "moto", 1) Or InStr(1, ActiveCell, "voiture", 1) Then
ActiveCell.Offset(0, 2).Value = "Véhicule"
End If
ActiveCell.Offset(1, 0).Select
Loop
End Sub
Macro 2 : les mots-clés servant à catégoriser sont "stockés" dans une variable (en utilisant Array) :
Code:
Sub macro2()
Range("A1").Select
Fruits = Array("tomate", "poire", "fruit")
véhicule = Array("moto", "voiture", "camion")
Do While ActiveCell.Value <> ""
okay1 = 0
For i = LBound(Fruits) To UBound(Fruits)
If InStr(1, ActiveCell, Fruits(i), 1) >= 1 Then
okay1 = 1
End If
Next
If okay1 = 1 Then ActiveCell.Offset(0, 2).Value = "Fruits"
ActiveCell.Offset(1, 0).Select
Loop
Range("A1").Select
Do While ActiveCell.Value <> ""
okay2 = 0
For i = LBound(véhicule) To UBound(véhicule)
If InStr(1, ActiveCell, véhicule(i), 1) >= 1 Then
okay2 = 1
End If
Next
If okay2 = 1 Then ActiveCell.Offset(0, 2).Value = "Véhicule"
ActiveCell.Offset(1, 0).Select
Loop
End Sub
L'utilisation de Array me simplifie un peu la tâche car j'ai beaucoup de mots-clés, cependant je dois créer une boucle par catégorie + une variable différente à chaque fois (okay1, okay2).
Pouvez-vous svp m'aider à simplifier ce code (en utilisant par exemple une matrice ?) ? Je n'ai pas (encore ) les connaissances nécessaires pour le faire, mais serait ravi d'apprendre.
Merci beaucoup pour votre aide,
Nico