Excel - formule de texte complexe

Résolu
Bonjour,

je souhaiterai créer une fonction personnalisée qui compare le nombre de mots identiques entre deux cellules en excluant les mots de moins de XX lettres

Ex :
En A1, j'ai : "Salut je suis une brèle en formule excel"
en A2, j'ai : "T'inkiète, je vais te donner une super formule excel"

En option, je dis de ne comparer que les mots de plus de 3 lettres
Résultat de la formule : 2 (formule et excel), soit 2 mots

En bonus, ce serait super de dire que le mot est présent si dans un cas je l'ai au singulier et dans l'autre au pluriel (Ex : Si j'avais mis un "s" à la fin de excel dans une seule des des celluless, la formule m'aurait tout de même renvoyeé "2"

Merci par avance !!!
A+++

5 réponses

  1. Modérateur
    Bonjour,

    En fait, tu as créées 3 sujets, je pense que des trois la finalité c'est celui-ci. Non?

    Si non, dis nous tout de suite et exactement ou tu veux en venir, ça sera plus simple...

    Si oui, saches qu'il faudra absolument passer par du VBA. Tu maîtrises?
    0
    1. Oui effectivement c'est la finalité du problème.
      Désolé mais je suis un peu nouveau dans les forums et je ne pensait pas qu'il y avait autant de personnes qui soit prêtes à se pencher sur mon problème précis alors j'ai voulu pour ne pas être bloqué dans un premier abord décortiquer mon problème en plusieurs....

      Mais effectivement tout est résumé dans ce post.
      Sinon pour vba je maitrise pas mais je vais me faire un petit tuto sur le net si il faut....
      A+
      0
  2. Modérateur
    Alors, je te conseille de partir de la formule personnalisée que t'a donné michel_m ICI.
    Je reviendrai en début de semaine voir les avancées de ce sujet.
    0
    1. Contributeur
      Bonjour tout le monde,

      une proposition :
      Function nbMots4(phrase1 As String, phrase2 As String) As Long
          Dim phr1, phr2, i As Long, j As Long
          phr1 = Split(phrase1, " ")
          phr2 = Split(phrase2, " ")
          For i = 0 To UBound(phr1)
              If Len(phr1(i)) < 4 Then phr1(i) = ""
              If Right(phr1(i), 1) = "s" Then phr1(i) = Left(phr1(i), Len(phr1(i)) - 1)
          Next i
          For i = 0 To UBound(phr2)
              If Len(phr2(i)) < 4 Then phr2(i) = ""
              If Right(phr2(i), 1) = "s" Then phr2(i) = Left(phr2(i), Len(phr2(i)) - 1)
          Next i
          For i = 0 To UBound(phr1)
              For j = 0 To UBound(phr2)
                  If phr1(i) <> "" And phr1(i) = phr2(j) Then nbMots4 = nbMots4 + 1
              Next j
          Next i
      End Function

      https://www.cjoint.com/?BFwtpLMDQxa

      eric
      0
      1. super ça marche nickel !!!
        Merci encore
        0
        1. Rebonjour eriiic,

          je viens de bien utiliser ta formule et j'aurai une petite demande d'amélioration stp :
          En fait, je voudrais que le test ne soit pas sensible à la casse (majuscule et minuscules) et aux accents
          Je souhaiterai également que l'auxiliaire d'un mot (ex : le l' devant un mot, exemple : l'avatar) ne soit pas pris en compte dans la recherche de mot.

          Exemple :
          Si en A1 j'ai : L'état
          Et en A2 j'ai : Etat

          je souhaiterai que la formule renvoie "1" et non pas "0" comme c'est le cas actuellement...

          Merci encore
          Cordialement
          0