Recherche de terme dans une colonne à partir d'une matrice

Bonjour,

Mon logiciel métier me sort en export XLS un fichier.

La colonne A correspond soit à l'utilisation d'un thésaurus +/- du texte libre après, soit à du texte libre.

La colonne D correspond au thésaurus.

J'aimerai savoir si les utilisateurs du logiciel métier utilise le thésaurus.

Pour cela, j'aimerai qu'une requête vérifie si les termes de la colonne A correspond à ceux du thésaurus.

Ma problématique est que :

1/ les minuscules et majuscules soient comparées.

2/ soit compté comme utilisation du thésaurus dans la colonne A, si jamais le terme exact d'une ligne du thésaurus (colonne D) existe même s'il y a du texte libre après le terme du thésaurus dans la colonne A.

3/si le thésaurus est utilisé que la requete dise 1 dans la colonne B

En PJ, j'ai mis un exemple avec ce que j'aurai aimé avoir en résultat.

15exemple.xlsx (9.75 Ko)

Merci beaucoup pour vos pistes de solutions.

Bonjour,

Pour ton exemple, la formule suivante fonctionne :

=SIERREUR(CHERCHE($D$1;A1);0)+SIERREUR(CHERCHE($D$2;A1);0)

Elle donne la position du 1er caractère d'une chaîne, y compris si d'autres caractères sont présents à la suite et sans tenir compte de la casse (minuscules/majuscules). Néanmoins, je n'ai pas trouvé d'astuce pour ne pas dupliquer la fonction pour chaque chaîne de caractères recherchée en colonne D. En clair, tu en avais 2 dans ton exemple donc j'ai 2 fois une formule similaire. Pour 5 il faudra en faire 5...

Je serais plus à l'aise en VBA, mais peut-être que cette solution te convient ?

Merci pour la piste.

Cependant cette solution ne pourra pas être appliqué à ma recherche.

J'ai simplifié l exemple.

Mon thesaurus (colonne D) comporte plus de 20000 lignes.

Ma colonne A comporte plusieurs centaines de milliers de lignes pour l instant.

Je cherche un moyen de ne pas faire 20000 formules. Merci

Merci pour la piste.

Cependant cette solution ne pourra pas être appliqué à ma recherche.

J'ai simplifié l exemple.

Mon thesaurus (colonne D) comporte plus de 20000 lignes.

Ma colonne A comporte plusieurs centaines de milliers de lignes pour l instant.

Je cherche un moyen de ne pas faire 20000 formules. Merci

Si tu te décourages au moindre effort aussi !

Je te propose plutôt quelque chose sous forme de macro, vu la dimension de tes données.

Voilà ce que je propose :

Sub Comparaison()

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

Dim LmaxA As Long, LmaxD As Long, i1 As Long, i2 As Long, TabSource() As String, TabCible() As String

With Sheets("Feuil1")

    'Identification de la dernière ligne des colonnes A et D
    LmaxA = .Cells(Rows.Count, 1).End(xlUp).Row
    LmaxD = .Cells(Rows.Count, 4).End(xlUp).Row

    'Chargement des données dans des variables tableau
    ReDim TabSource(LmaxD)
    ReDim TabCible(LmaxA)
    For i1 = 1 To LmaxA
        TabCible(i1) = .Cells(i1, 1)
    Next i1
    For i2 = 1 To LmaxD
        TabSource(i2) = .Cells(i2, 4)
    Next i2

    'Boucles pour parcourir chaque table
    For i1 = 1 To LmaxA
        For i2 = 1 To LmaxD
            If InStr(1, TabCible(i1), TabSource(i2), 1) > 0 Then
                .Cells(i1, 2) = 1
                Exit For
            End If
            If i2 = LmaxD Then .Cells(i1, 2) = 0
        Next i2
    Next i1

End With

Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic

End Sub

C'est presque parfait. Rien qu'avec cela je vais pouvoir avancer mon mémoire.

Apres je chipote, mais

1/ penses tu que cela est possible de faire une recherche des termes en respectant les majuscules et minuscules?

Par exemple, colonne D Hypertension , j'aimerai les résultats suivants

A1 hypertension B1 0

A2 Hyperension B2 1

2/ est ce possible d'effectuer la requête simplement pour le début du texte de la cellule ?

Par exemple, colonne D Hypertension

A1 Hypertension B1 1 (le terme existe bien dans le thésaurus)

A2 blablaHypertension B2 0 (le terme existe bien dans le thésaurus, mais n'est pas au début de la cellule)

A3 Hypertension blabla B3 1 (le terme existe bien dans le thésaurus, même s'il y a du texte derrière)

A4 HTA B4 0 (le terme n'existe pas)

J'aimerai limiter le biais de compter comme utilisation du thésaurus, un terme noté manuellement par l'utilisateur au milieu de la cellule.

Le terme du thésaurus (colonne D) si il est présent dans la cellule est forcement au début. S'il n'y a pas de terme de thésaurus noté au début, c'est qu'il n'y a pas eu utilisation du thésaurus (hasard de la saisie du texte libre qui correspond à une des 20000 termes du thésaurus).

Si ce n'est pas possible, je suis déjà très content de ton aide.

PS: désolé de la lenteur de ma réponse, mais je ne suis pas doué en informatique et j'ai du lire les cours VBA pour appliquer la macro.

Oui, c'est possible :

--> Sensible à la casse (MAJ/min) :

InStr(1, TabCible(i1), TabSource(i2), 1)
'Devient alors :
InStr(1, TabCible(i1), TabSource(i2), 0)

--> Affecte "1" seulement si le texte commence au début :

InStr(1, TabCible(i1), TabSource(i2), 1)>0
'Devient alors :
InStr(1, TabCible(i1), TabSource(i2), 1)=1

Pour mieux comprendre, la fonction InStr() recherche la position du 1er caractère d'une chaîne de caractère au sein d'une autre chaîne. Si la chaîne n'est pas retrouvée, la position renvoyée est 0.

Je pense qu'on pourrait aussi procéder en utilisant :

If TabCible(i1) Like TabSource(i2) & "*" Then

Je crois que cette écriture ne fonctionne que si le début des deux chaines de caractères est identique, mais ne tient pas compte de la casse.

Merci Beaucoup !!

Je te remercie de ta gentillesse et de tes compétences.

Je vais pouvoir faire chauffer mon ordinateur.

Merci Beaucoup !!

Je te remercie de ta gentillesse et de tes compétences.

Je vais pouvoir faire chauffer mon ordinateur.

Qu'est ce qu'il faut pas entendre (ou plutôt lire...) !

Rechercher des sujets similaires à "recherche terme colonne partir matrice"