Formule de recherche de plusieurs mots dans une série de caractères

Bonjour à tous,

Je suis sur ce problème que j'essaye de résoudre depuis 2 jours; je m'explique :

- J'ai un fichier Excel (pour le boulot) dans lequel des données sont importées depuis un logiciel annexe, ce qui me donne une liste à traiter avec des noms de produits fabriqués au sein de ma société. Le format de ces noms de produits est une suite de mots, dans laquelle figure le nom du produit.

Ma question : Comment puis-je faire pour extraire uniquement le nom du produit parmi la suite de caractère, tout en sachant que je voudrais faire une formule générique (Le besoin serait de faire ressortir uniquement les noms de produits qui peuvent être différents d'une ligne à l'autre).

- Pour être plus clair, je joins un fichier d'exemple :

Les noms de produits peuvent être IO1, F22, R82, R83

Une cellule peut recueillir l'un des 4 noms (Il n'y a jamais 2 noms de produits ensemble dans une seule et unique cellule).

Je souhaiterais par le biais d'une formule que peut importe le nom du produit dans la chaine de caractère, il ressorte sur la colonne "Produit" juste à droite.

J'ai déjà essayé la formule : =si(cherche("IO1";D5);"IO1";si(cherche("R83";D5);"R83";si(cherche("R82";D5);"R82";si(cherche("F22";D5);"F22";"Autres produits").

J'arrive à faire fonctionner la formule pour ressortir 1 produit, mais pas à analyser quel produit est présent dans la chaine de caractère et le faire ressortir.

En espérant avoir été clair dans mes explications, je vous remercie d'avance pour l'aide que vous m'apporterez.

Bonne journée Excel à tous !

Bonjour,

C'est du bidouillage, mais voici le résultat :

=SIERREUR(SI(CHERCHE("IO1";D5);"IO1";"");SIERREUR(SI(CHERCHE("R83";D5);"R83";"");SIERREUR(SI(CHERCHE("R82";D5);"R82";"");SIERREUR(SI(CHERCHE("F22";D5);"F22";"");"Autres produits"))))

Cdt

Bonjour Gabich, bonjour le forum,

Par formule je ne sais pas faire. En pièce jointe ton fichier modifié avec une proposition VBA.

Le code :

Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim PL As Range 'déclare la variable PL (PLage)
Dim PR As Variant 'déclare la variable PR (Produit à Rechercher)

Set O = Worksheets("week") 'définit l'onglet O
DL = O.Cells(Application.Rows.Count, "B").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne B de l'onglet O
O.Range("E5:E" & DL).ClearContents 'efface d'éventuelles anciennes données
Set PL = O.Range("A4:E" & DL) 'définit la plage PL
PR = Array("IO1", "F22", "R82", "R83") 'définit le tableau PR des produits à rechercher
For I = 2 To DL 'boucle 1 : sur toutes les lignes I de 2 à DL
    For J = 0 To UBound(PR) 'boucle 2 : sur tous les produits à rechercher du tableau PR
        'condition : si le produit à recherche est contenu dans la cellule de la boucle
        If InStr(1, O.Cells(I, "D").Value, PR(J), vbTextCompare) > 0 Then
            O.Cells(I, "E").Value = PR(J): Exit For 'renvoie le nom du produit dans la cellule en colonne E, sort de la boucle 2
        End If 'fin de la condition
    Next J 'prochain produit de la boucle 2
Next I 'prochaine ligne de la boucle 1
End Sub

Le fichier :

25gabich-v01.xlsm (29.94 Ko)

Par formule

Merci à vous 3, vous êtes mes héros du jour !!!

J'opte plus pour le modèle avec fonction pour l'utilisation, mais ton modèle en VBA m'intéresse énormément aussi !

Je remercie ce forum qui me satisfait déjà dès ma première requête, merci à tous !

J'arrive toujours trop tard moi xDDD

=SI(CHERCHE(STXT($D5;EQUIV(0;(ESTERR(STXT($D5;LIGNE(INDIRECT("1:"&NBCAR($D5)));2)*1)*1);0);3)*1;D5)<=3;GAUCHE(D5;3);SI(NBCAR(D5)=3;D5;SI(OU(NBCAR(D5)=CHERCHE(STXT($D5;EQUIV(0;(ESTERR(STXT($D5;LIGNE(INDIRECT("1:"&NBCAR($D5)));2)*1)*1);0);3)*1;D5);NBCAR(D5)=CHERCHE(STXT($D5;EQUIV(0;(ESTERR(STXT($D5;LIGNE(INDIRECT("1:"&NBCAR($D5)));2)*1)*1);0);3)*1;D5)+1);STXT(D5;TROUVE(STXT($D5;EQUIV(0;(ESTERR(STXT($D5;LIGNE(INDIRECT("1:"&NBCAR($D5)));2)*1)*1);0);3)*1;D5)-2;NBCAR(D5));SI(NBCAR(STXT(D5;TROUVE(1;D5)-3;NBCAR(D5)))=3;STXT(D5;TROUVE(1;D5)-3;NBCAR(D5));STXT(D5;TROUVE(STXT($D5;EQUIV(0;(ESTERR(STXT($D5;LIGNE(INDIRECT("1:"&NBCAR($D5)));2)*1)*1);0);3)*1;D5)-1;NBCAR(D5)-CHERCHE(STXT($D5;EQUIV(0;(ESTERR(STXT($D5;LIGNE(INDIRECT("1:"&NBCAR($D5)));2)*1)*1);0);3)*1;D5))))))

C'est une formule matricielle qui a l'avantage de ne pas s'arrêter au exemple que tu nous à présenter dans ton fichier :3

En gros dès que la formule détecte un chiffre dans la description de l'article, elle chercher sa position et renvoie le produit en fonction !

Si jamais sa peux servir à quelqu'un !

21pour-gabich.xlsx (16.51 Ko)
Rechercher des sujets similaires à "formule recherche mots serie caracteres"