Comparaison de mots clés

bonjour, je suis absolument débutant en macro mais je souhaite comparer les mots contenu dans deux colonnes (sur plusieurs lignes bien sur) et avec prise en compte des mots communs seulement a partir d'un certain nombre de caractères (exemple 4 caractères)

exemple j'ai une ligne avec "sos macro" et "excel sos macro" sur la 3 ème colonne je dois avoir OK (sos n'est pas pris en compte car trop court, excel est ignoré, le fait qu'il y ait macro dans les 2 colonnes suffit pour le OK)

la ligne en dessous "sos word" et "sos excel" = 3ème colonne KO (sos non pris en compte) etc...

je vous remercie de votre aide

Bonjour et bienvenue,

L'idéal serait que tu joignes un extrait de ton fichier avec 20 ou 30 lignes et en y indiquant manuellement le résultat attendu.

Ca nous permettrait de bien cerner ton souhait et de voir quel traitement peut être apporté à ton problème

A te (re)lire avec ton fichier

@+

bonjour

avec la fonction CHERCHE cela doit pouvoir te convenir

58sos.zip (4.44 Ko)

vois si cela t'aide a+

Bonjour,

Formule à mettre en C1 :

=SI(ESTERREUR(SI(ET(TROUVE("macro";A1)>0;TROUVE("macro";B1)>0);"ok";""));"";SI(ET(TROUVE("macro";A1)>0;TROUVE("macro";B1)>0);"ok";""))

NB :

La fonction "CHERCHE" permet de chercher un caractère

La fonction "TROUVE" permet de chercher un mot ou de façon plus générale, une chaîne de caractères

Si A1= "sos voiture macro" et B1= "maison macro"

  • La série de formules de tulipe_3 ne permet pas de mettre "ok"
  • celle que je te propose, amène "ok"

Si A1="trimacrophore gris" et B1="gros macrophage"

  • La série de formules de tulipe_3 ne permet pas de mettre "ok"
  • celle que je te propose, amène "ok" bien que la chaîne de caractères "macro" ne soit pas encadrée d'espace

Bonjour,

Regarde le fichier joint, j'utilise une fonction personnalisée, visible dans le module 1 (Alt + F11 pour y accéder)

La fonction :

Function compar(Plg1 As Range, Plg2 As Range) As String
Dim Prem, Deux
Dim I As Byte, J As Byte
Prem = Split(Plg1, " ")
Deux = Split(Plg2, " ")
For I = LBound(Prem) To UBound(Prem)
    If Len(Prem(I)) > 3 Then
        For J = LBound(Deux) To UBound(Deux)
            If Deux(J) = Prem(I) Then
                compar = "OK"
                Exit Function
            Else
                compar = "Non OK"
            End If
        Next J
    End If
Next I
End Function

Le fichier :

50elijea-v1.zip (7.40 Ko)

Bon Dimanche

merci a tous pour vos réponses, il va me falloir un peu de temps pour exploiter tout, ça, je vous tien au courant

merci

Bonjour,

Ci-joint un fichier Excel comparatif entre les 3 méthodes.

Bonsoir

Tulipe et Marmotte, vos solutions sont justes uniquement si la recherche porte sur le mot MACRO.

S'il faut comparer n'importe quel mot de plus de 3 lettres (comme demandé), il faut prendre la macro de cousinhub.

Amicalement

Nad

Bonjour,

Nad, il n'est quand même pas très compliqué de mettre une cellule indépendante (exemple : J1) dans laquelle on mettrait le mot à rechercher :

A la place de :

=SI(ESTERREUR(SI(ET(TROUVE("macro";A1)>0;TROUVE("macro";B1)>0);"ok";""));"";SI(ET(TROUVE("macro";A1)>0;TROUVE("macro";B1)>0);"ok";""))

il faudrait mettre :

=SI(ESTERREUR(SI(ET(TROUVE($J$1;A1)>0;TROUVE($J$1;B1)>0);"ok";""));"";SI(ET(TROUVE($J$1;A1)>0;TROUVE($J$1;B1)>0);"ok";""))

Par ailleurs, j'ai l'impression que tu n'as pas regardé avec suffisamment d'attention chacune des 3 méthodes pour voir qu'il existe des différences fondamentales de résultat. Il n'y a pas 2 solutions parfaitement identiques. Toutes les 3 ont des défauts, même celle que tu recommandes ou alors il y a quelque chose qui m'échappe !

Pourquoi A1="excel" B1="excel" déclenche "OK" dans la solution de cousinhub si on recherche le mot "macro" ?

Bonjour

Marmotte18 a écrit :

il n'est quand même pas très compliqué de mettre une cellule indépendante (exemple : J1) dans laquelle on mettrait le mot à rechercher

Si ce n'est que d'après la demande, ce n'est pas un mot précis que l'on recherche mais m'importe quel mot qui serait présent en A1 et en B1

Marmotte18 a écrit :

Par ailleurs, j'ai l'impression que tu n'as pas regardé avec suffisamment d'attention chacune des 3 méthodes

Si, si, j'ai bien regardé ...

Marmotte18 a écrit :

Pourquoi A1="excel" B1="excel" déclenche "OK" dans la solution de cousinhub si on recherche le mot "macro"

Tout simplement pour la raison que j'ai invoquée plus haut : on ne recherche mas le mot MACRO mais m'importe quel mot qui serait présent en A1 et en B1

Nad

Bonjour,

Si je comprends bien, on ne cherche pas un mot précis mais n'importe quel mot dont on connaît pas à l'avance l'orthographe et qui serait à la fois dans les cellules à comparer. C'est curieux !

Pourquoi alors A1="sos mammouth" et B1="sos" ne déclenche pas le "ok" dans la solution de cousinhub ?

Bonjour

on ne cherche pas un mot précis mais n'importe quel mot dont on connaît pas à l'avance le nom et qui serait à la fois dans les cellules à comparer. C'est curieux !

Non, c'était l'énoncé de départ et la lecture "transversale" induit souvent des erreurs, comme pour ta dernière question:

On cherche dans l'exemple des mots de 4 Lettres!!

Cordialement

Re

elijea a écrit :

sos n'est pas pris en compte car trop court,

If Len(Prem(I)) > 3 Then

La macro ne s'exécute que s'il y a plus de trois lettres dans le mot

Nad

Dans l'énoncé, on dit :

avec prise en compte des mots communs seulement a partir d'un certain nombre de caractères (exemple 4 caractères)

4 caractères n'est qu'un exemple. Il faudrait paramétrer cette donnée. Par ailleurs, s'agit-il du mot recherché qui doit avoir au moins 4 caractères (dans l'exemple) ou comparer les 2 cellules qu'à partir du 4ème caractère et dans ce cas mettre "ok" si on trouve 2 mots identiques quel que soit leur emplacement et leur taille ?

Re

Marmotte, tu ne sais pas reconnaitre quand tu as tort.

Je te redonne la demande :

elijea a écrit :

sos n'est pas pris en compte car trop court,

Il n'est nullement question de sa place dans la cellule, juste de son nombre de lettres

Nad

Bonjour tout le monde....

Si je puis me permettre....

@ Marmotte, je remets l'intitulé de la question :

je souhaite comparer les mots contenu dans deux colonnes (sur plusieurs lignes bien sur) et avec prise en compte des mots communs seulement a partir d'un certain nombre de caractères (exemple 4 caractères)

Il est évident que "macro" n'était qu'un exemple de mots....

et je pense que la condition qu'à soulignée Nad :

If Len(Prem(I)) > 3 Then 

est bien plus aisée à modifier, que de mettre tous les "mots communs" du dictionnaire comportant plus de 3 lettres dans une colonne....(je pense qu'Excel 2003 serait un peu juste au niveau des lignes.....)

A titre d'information, le nombre de mots communs commençant par la lettre "A", compris entre 4 et 20 lettres est de 18 970 mots...(uniquement la lettre "A"....)

Si on veut des mots supérieurs à 5 lettres, n'importe qui pourrait modifier le code...

Maintenant, comme tu l'affirmes :

Par ailleurs, j'ai l'impression que tu n'as pas regardé avec suffisamment d'attention chacune des 3 méthodes pour voir qu'il existe des différences fondamentales de résultat

Effectivement, les méthodes n'ont strictement rien à voir....

Bonne soirée

Bonjour,

Maintenant que tout le monde c'est abondamment exprimé, je pense que c'est elijea qui en définitive dira ce qui lui convient le mieux, voire quelles modifications il faut apporter à l'une ou l'autre des solutions. Attendons d'avoir son avis !

A la lumière des discussions, j'ai effectivement l'impression que c'est cousinhub qui approche du but.

N'en déplaise à Nad, je sais très bien reconnaître si j'ai tort. Par contre, il est indispensable que j'en sois convaincu et tant que ce n'est pas le cas, je ne vois pourquoi et au nom de quel principe, je dois m'avouer vaincu à la première critique.

Bonjour

voire quelles modifications il faut apporter à l'une ou l'autre des solutions

et

Par contre, il est indispensable que j'en sois convaincu et tant que ce n'est pas le cas, je ne vois pourquoi et au nom de quel principe, je dois m'avouer vaincu à la première critique.

Marmotte,

1) Au vu de l'énoncè, je ne vois quant à moi aucune modification à apporter aux solutions proposéees.

  • Une des solution est correcte et donne le résultat
  • Les deux autres sont fausses parce qu'inadaptées au sujet et ne donnent pas le résultat demandé.

2) Est-il si difficile de reconnaitre que l'on s'est trompé? Nous le faisons pour beaucoup d'entre nous régulièrement et même si notre égo peut en souffrir, il reste à notre profit l'apport des connaissances de celui qui a solutionné le problème.

Il n'est pas question de s'avouer vaincu. Simplement de s'effacer ou de reconnaître son erreur lorsqu'on s'est trompé, ou parfois, admettre que la solution donnée par quelqu'un d'autre est plus facile à mettre en oeuvre et éviter ainsi d'en arriver à polluer un fil inutilement.

Cordialement

Rechercher des sujets similaires à "comparaison mots cles"