Microsoft 365 recherche si dans une cellule si une partie d'une autre cellule y est si oui mettre cellule d'à coter.

Antoine_94

XLDnaute Nouveau
Bonjour, je m'appelle Antoine, ravi de faire partie de l'équipage :)

Je suis bloqué sur une formule si on peut m'aider c'est sympa.
J'importe un fichier brut et je voudrais automatiser son traitement en faisant des conditions et recherches.
Mon problème est qu'il y a une cellule ou est écrit par exemple "jklkjFNACmlokm", je veux faire une formule qui dit si cette cellule contient le mot "FNAC" alors "FFNAC".
J'en ai bien trouvé une mais je dois faire cela avec beaucoup de mots. J'ai donc fais une table matière et fais une grosse formule "si" mais c'est trop long comme formule et puis j'arriverais au bout de la formule car j'ai trop de mot à rechercher.
Est ce qu'il y aurait une formule plus simple qui recherche si dans une cellule, il y a une partie d'un mot qui correspond à ma table matière alors cela renvoie le mot d'à coter ?
Je joins mon fichier excel, en colonne A, la formule à faire, en colonne B le libellé brut que j'ai importé, en colonne E le mot à rechercher dans la cellule importée, en colonne F le mot à renvoyer.
Merci d'avance pour votre aide.
Cordialement,
 

Pièces jointes

  • Import à traiter.xlsx
    12.7 KB · Affichages: 18
Solution
Bonjour Sylvanu,
donc j'ai mal compris, on peut le faire sans la colonne A, en C2 :
VB:
=SIERREUR(INDEX(F$3:F$10;EQUIV(VRAI;ESTNUM(CHERCHE(E$3:E$10;B2));0));"")
@ valider par Ctrl+Maj+Entrée (N'est pas obligatoire sous Excel pour Microsoft 365)
@ tirer vers le bas


Cordialement

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Antoine et bienvenu sur XLD,
En PJ un essai avec une fonction perso. Cela a l'avantage que la table des matières peut s'agrandir sans complexifier les formules.
La syntaxe est :
Code:
=Fournisseur(Chaine;Tableau Libellés;Tableau fournisseurs)
avec :
VB:
Function Fournisseur(N As Range, Libellé As Range, Résultat As Range)
Dim T_Libellé, T_Résultat, i%
T_Libellé = Libellé
T_Résultat = Résultat
For i = 1 To UBound(T_Libellé)
    If LCase(N) Like LCase("*" & T_Libellé(i, 1) & "*") Then
        Fournisseur = T_Résultat(i, 1)
        Exit Function
    End If
Next i
End Function
 

Pièces jointes

  • Import à traiter.xlsm
    18.5 KB · Affichages: 11

Antoine_94

XLDnaute Nouveau
Bonjour Antoine et bienvenu sur XLD,
En PJ un essai avec une fonction perso. Cela a l'avantage que la table des matières peut s'agrandir sans complexifier les formules.
La syntaxe est :
Code:
=Fournisseur(Chaine;Tableau Libellés;Tableau fournisseurs)
avec :
VB:
Function Fournisseur(N As Range, Libellé As Range, Résultat As Range)
Dim T_Libellé, T_Résultat, i%
T_Libellé = Libellé
T_Résultat = Résultat
For i = 1 To UBound(T_Libellé)
    If LCase(N) Like LCase("*" & T_Libellé(i, 1) & "*") Then
        Fournisseur = T_Résultat(i, 1)
        Exit Function
    End If
Next i
End Function
elle est magique la formule, je ne connaissais pas. Merci beaucoup cela fonctionne parfaitement.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Ce n'est pas une formule, c'est une formule perso.
Vous écrivez votre propre formule, ce qui est souvent très utile.
 

Antoine_94

XLDnaute Nouveau
Ce n'est pas une formule, c'est une formule perso.
Vous écrivez votre propre formule, ce qui est souvent très utile.
ah oui très fort je vais regarder cela merci !
 

R@chid

XLDnaute Barbatruc
Bonjour Sylvanu,
donc j'ai mal compris, on peut le faire sans la colonne A, en C2 :
VB:
=SIERREUR(INDEX(F$3:F$10;EQUIV(VRAI;ESTNUM(CHERCHE(E$3:E$10;B2));0));"")
@ valider par Ctrl+Maj+Entrée (N'est pas obligatoire sous Excel pour Microsoft 365)
@ tirer vers le bas


Cordialement
 

Discussions similaires