Recherche d'un ou plusieurs text

Résolu
Bonjour,

Comment faire une formule de recherche pour un ou plusieurs texte dans une cellule,

j'ai une base des composants, et je voulais les distinguer par famille

exp: si A1 contient "vis" ou "rondelle" => revoie "visserie"
si A1 contient "connecteur" ou "contact" => revoie "composant électrique"

4 réponses

  1. Contributeur
    Bonjour
    voyez si vous pouvez adapter ce modèle et revenez si difficultés ou besoin de complément
    https://www.cjoint.com/c/EDjoZG3sTN7
    crdlmnt
    2
    1. Bonjour Vaucluse

      Toujours au top ! ta solution est meilleure que la mienne !
      Bien Cdlmnt
      Via
      0
    2. Contributeur
      Merci Via.. mais j'aurais bien pour ma part, du mal à proposer quoique ce soit en VBA.
      Et là, c'est moi qui te tire le chapeau
      Bien amicalement
      0
    3. Merci Vaucluse, c'est exactement ce que je cherche, ça marche très bien :))))
      merci via, djidji, frenchie, merci pour vous tous..
      0
  2. Bonjour Karim, et bienvenue,

    Quand on joint un fichier-test avec tous les cas, ou le fichier, c'est plus commode pour les intervenants.

    1) Tu vas dans https://www.cjoint.com/
    2) Tu cliques sur [Parcourir] pour sélectionner ton fichier
    3) Tu descends en bas de la page pour cliquer sur [Créer le lien Cjoint]
    4) Au bout de quelques secondes la deuxième page s'affiche, avec le lien en bleu souligné ; tu le sélectionnes et tu fais "Copier"
    5) Tu reviens dans ta discussion sur CCM, et dans ton message de réponse tu fais "Coller".

    Cordialement.
    0
    1. Bonjour
      Exemple avec la cellule à tester en A1
      =SI(SIERREUR(CHERCHE("vis";A1;1);0)+SIERREUR(CHERCHE("rondelle";A1;1);0)>0;"visserie";SI(SIERREUR(CHERCHE("contact";A1;1);0)+SIERREUR(CHERCHE("connecteur";A1;1);0)>0;"composant électrique"))
      Cdlt
      0
      1. Bonjour Karim

        Par formule :
        =SI(OU(NB.SI(A1;"*vis*");NB.SI(A1;"*rondelle*"));"visserie";SI(OU(NB.SI(A1;"*contact*");NB.SI(A1;"*connecteur*"));"composant électrique";""))

        Par contre si tu as une longue liste par famille et plusieurs familles la formule deviendra vite une usine à gaz. Dans ce cas il vaut mieux passer par une fonction personnalisée
        Exemple :
        Function famille(plage As Range)
        chaine = plage.Value
            Dim Tableau() As String
            Dim i As Integer
            'découpe la chaine en fonction des/
            'le résultat de la fonction Split est stocké dans un tableau
            Tableau = Split("vis/écrou/rondelle", "/")
            'boucle sur le tableau pour voir si le mot existe dans la chaine
            For i = 0 To UBound(Tableau)
            ' s'il existe result prend le nom de la famille
            If InStr(chaine, Tableau(i)) > 0 Then result = "visserie"
            Next
            Tableau = Split("connecteur/contact/fusible", "/")
            For i = 0 To UBound(Tableau)
             If InStr(chaine, Tableau(i)) > 0 Then result = "composant électrique"
            Next
            Tableau = Split("tournevis/pince/marteau/clé", "/")
            For i = 0 To UBound(Tableau)
             If InStr(chaine, Tableau(i)) > 0 Then result = "outillage"
            Next
            famille = result
        End Function


        Le code de la fonction se met dans un module dans l'éditeur VBA (ALT F11 pour ouvrir Editeur puis Insertion Module Copier et coller la macro)
        Dans les lignes Tableau de la macro tu établis tes listes de mots par maille séparés par des /
        Dans la boucle qui suit tu indiques à la fin du If le nom de la famille
        Tu peux rajouter autant de lignes que necessaires pour de nouvelels familles

        Ensuite la fonction s'utilise dans la plage Excel comme toute fonction Excel ex =famille(A1) renverra visserie s'il y a rondelle quelque part dans la chaine de caractères en A1 (rondelles xx, lot de rondelles etc)

        Cdlmnt
        Via

        0