Associé une categorie en fonction d'un tableau de mots clé

Bonjour,

Je cherche a ajouter une info de « catégorie » dans un fichier qui liste différentes causes d’alarmes

Je vous met ci-joint un exemple du fichier (j’ai simplifié le nombre de lignes et colonne pour faciliter la discussion)

 Tableau a compléter en sheet 2

 Résultat de l’index en colone E

Ma problématique

  • Au final il y aura + de 300000 lignes de texte a catégoriser
  • La catégorie a donner dépend non seulement d’un mot clé mais aussi de l’atelier émetteur de l’alarme
  • Il y aura de nombreuses chaine de caractères possible a vérifier … surement + de 100
  • Il ne faudra pas être sensible a la case
  • Il peut y avoir un espace dans la chaine de caractère clé

Je pensais utiliser la fonction index pour trouver la correspondance dans un tableau de référence entre l’atelier et le mot clé

Pour trouver le numéro de la colonne : pas de soucis un simple Vlookup suffit  colonne D

Par contre pour la colonne C (numéro de ligne de l’index) je bute …. Je me dis qu’une simple formule ne suffira pas vu le nombre de chaines de caractère a tester et qu’il faudrait mieux faire une macro qui balaye pour chaque alarme toutes les chaines clé et désigne la bonne « ligne » du tableau …

Malheureusement mes connaissances en macro sont trop sommaires pour y arriver

J’imagine qu’il faut

  • déjà trouver la taille du tableau a analyser (équivalent de faire un CTRL+A)
  • trouver aussi la taille du tableau de référence des chaines clé
  • Aller lire la première alarme
  • Aller sur le tableau de référence
  • Vérifier si la chaine clé n°1 est adapté (j’ai lu qu’une fonction « like » existe en VBA mais je ne comprends pas trop comment s’en servir)
o Si oui on renseigne le numéro de ligne et on passe a l’alarme suivante

o Si non on descend sur la chaine clé suivante

- Etc ….

En écrivant avec des mots cela parait simple

Mais en VBA ca ressemble a quoi ? lol

Je vous remercie par avance si qq’un accepte de m’aider a écrire cette macro …. Sauf si bien sur vous penser qu’une simple formule fonctionnerait …. Ça serait encore plus simple

bonsoir,

en vba cela pourrait ressembler à ceci

Sub aargh()
    Set ws1 = Sheets("sheet1") 'feuille des catégories
    Set ws2 = Sheets("sheet2") 'feuille des textes à catégoriser
    dl2 = ws2.Cells(Rows.Count, 1).End(xlUp).Row
    dl1 = ws1.Cells(Rows.Count, 5).End(xlUp).Row
    For i = 2 To dl2
        Set atelier = ws1.Rows(1).Find(ws2.Cells(i, "A"), lookat:=xlWhole)
        If Not atelier Is Nothing Then
            a = UCase(ws2.Cells(i, "B"))
            ws2.Cells(i, 4) = atelier.Column
            For j = 2 To dl1
                b = ws1.Cells(j, "E")
                If b <> "" And InStr(a, b) > 0 Then
                    ws2.Cells(i, 3) = ws1.Cells(j, "D")
                    ws2.Cells(i, 5) = ws1.Cells(j, atelier.Column)
                    Exit For
                End If
            Next j
        End If
    Next i
End Sub

merci je teste ca des lundi matin

Super ca marche merci

je me suis un peu casser le crane mais j'ai compris la logique de la macro et je l'ai adapté a mon "vrai fichier" de suivi ...ecncore merci

Petites demandes supp :

  • comment ajouter un petit bloc au depart avec une pop up pour qu'il ne commence pas toujours a la ligne i=2 ... vu la taille du tableau il n'y a pas besoin de refaire a chaque fois tout le tableau
  • y'a-t-il un moyen simple pour que si il ne trouve aucune correspondance il me marque une categorie "OTHER" ou "UNKNOWN" ?

bonjour,

voici

Sub aargh()
    Set ws1 = Sheets("sheet1")    'feuille des catégories
    Set ws2 = Sheets("sheet2")    'feuille des textes à catégoriser
    ii = Val(InputBox("à quelle ligne commencer ?"))
    dl2 = ws2.Cells(Rows.Count, 1).End(xlUp).Row
    dl1 = ws1.Cells(Rows.Count, 5).End(xlUp).Row
    For i = ii To dl2
        Set atelier = ws1.Rows(1).Find(ws2.Cells(i, "A"), lookat:=xlWhole)
        If Not atelier Is Nothing Then
            a = UCase(ws2.Cells(i, "B"))
            ws2.Cells(i, 4) = atelier.Column
            For j = 2 To dl1
                b = ws1.Cells(j, "E")
                If b <> "" And InStr(a, b) > 0 Then
                    ws2.Cells(i, 3) = ws1.Cells(j, "D")
                    ws2.Cells(i, 5) = ws1.Cells(j, atelier.Column)
                    Exit For
                End If
            Next j
            If j > dl1 Then ws2.Cells(i, 5) = "UNKNOWN"
        End If
    Next i
End Sub

c'est parfait

encore merci


ah ben en fiat il y a un petit bug on dirait

quand je la lance ca me dit "complie error next without for" et ca surligne en jaune la ligne next i a la fin

pourtant il y a bien un For i = .... au debut

bonjour,

ah ben en fiat il y a un petit bug on dirait

quand je la lance ca me dit "complie error next without for" et ca surligne en jaune la ligne next i a la fin

pourtant il y a bien un For i = .... au debut

pas avec le code que je t'ai fourni. regarde tes modifications.

c'est bon j'ai trouvé

il manquait un END IF

Rechercher des sujets similaires à "associe categorie fonction tableau mots cle"