Excel fonction retourner un texte en fonction d'une chaine de texte

Bonjour,

Dans une extraction que nous faisons tous les mois, j'ai une colonne appelée "référence" (A), une colonne appelée "section" (B) avec des Références en chaine de caractères. Pour pouvoir l'exploiter, une colonne "service" (C) est ajoutée où nous saisissons manuellement le service correspondant à la section. Le service se déduit en trouvant l'enchainement des 3 lettres du service dans la chaine de caractère de la section. J'ai 12 services et 30 types de sections. Il y a un cas particulier où dans la section il y a 2 chaines de caractères qui correspondent à 2 services, il faut toujours prendre EMB. J'ai mis le cas dans l'exemple ci-dessous et aussi dans le fichier qui est en pièce jointe.

Exemple :

Colonne "Section" (B) = AZERTABAYUI j'ai besoin d'avoir dans la colonne "Service" (C) = ABA

Colonne "Section" (B) = QSDFABAGHJK j'ai besoin d'avoir dans la colonne "Service" (C) = ABA

Colonne "Section" (B) = WXCDECVBN j'ai besoin d'avoir dans la colonne "Service" (C) = DEC

Colonne "Section" (B) = MLKJHDECGF j'ai besoin d'avoir dans la colonne "Service" (C) = DEC

Colonne "Section" (B) = POINETUYTRE j'ai besoin d'avoir dans la colonne "Service (C) = NET

Colonne "Section" (B) = NBVCNETXWN j'ai besoin d'avoir dans la colonne "Service (C) = NET

Colonne "Section" (B) = MLKJHDECEMBGF j'ai besoin d'avoir dans la colonne "Service" (C) =EMB

L'objectif est de ne plus saisir manuellement les services correspondants aux sections mais qu'une formule puisse déterminer de quel service il s’agit et de le renseigner dans la colonne "Service" (C) et que toute la colonne puisse se saisir automatiquement sans avoir à ressaisir une formule à chaque ligne.

Je joins un fichier exemple avec des fausses données mais qui reflètent la situation.

Pourriez-vous aider s'il vous plait ?

Je vous remercie d'avance.

14exemples.xlsx (11.10 Ko)

Bonjour,

Ceci devrait aller : =STXT(B2;CHERCHE(C2;B2);3)

ou =SIERREUR(STXT(B2;CHERCHE(C2;B2);3);"") si pas trouvé

P.

Bonjour à tous,

Une proposition :

11exemples.xlsx (17.04 Ko)

Merci Patrick1957 pour votre réponse.

L' objectif est de ne pas me servir de la colonne "Service" C parce que nous sommes obligées de la saisir manuellement et c'est justement cette action de la saisir manuellement que nous souhaitons éliminer en utilisant une fonction.

Merci Djidji59430 pour votre proposition.

Pouvez-vous m'expliquer, s'il vous plait, pourquoi il y a les colonnes D, F et N ? J'ai compris la K.

Je vous remercie d'avance.

J'avais pensé utiliser la fonction "CHERCHE" avec la fonction SI.CONDITIONS pour pouvoir faire plusieurs type de recherche de texte mais cela ne me ressort que #VALEUR!. Je met mon essai en pièce jointe de cette réponse. J'ai mis la formule d'essai dans la colonne D

Salut,

voici une solution avec une fonction personnalisée. Pour pouvoir l'utiliser il faut enregistrer le classeur en xlsm pour pouvoir mettre des macros dedans. Dans l'éditeur Visual Basic insérer un module et mettre ce code dedans :

Function RechService(cell) As String
    Dim StrServ As Variant
    Dim Services As Variant
    Dim i As Long
    StrServ = Array("EMB", "DEC", "ABA", "NET", "EXP", "QUA", "MAI", "ADM", "RH", "SEC")
    Services = Array("EMB", "DEC", "ABA", "NET", "EXP", "QUA", "MAI", "ADM", "RH", "GAR")
    For i = LBound(StrServ) To UBound(StrServ)
        If InStr(1, cell, StrServ(i), vbTextCompare) > 0 Then
            RechService = Services(i)
            Exit Function
        End If
    Next i
    ' Si aucune correspondance trouvée
    RechService = ""
End Function

et voilà on peut utiliser cette fonction dans la feuille du classeur :

rechserv

EDIT : Je viens de m'apercevoir qu'à la ligne 55 ce n'est pas bon , on devait avoir RH et on a ADM : c'est une question d'ordre dans les tableaux de service ,quand il y a plusieurs services dans la chaine, celle qui est choisie est celle la première trouvée dans la liste , si on met RH avant ADM cela devrait marcher :

    StrServ = Array("EMB", "DEC", "ABA", "NET", "EXP", "QUA", "MAI", "RH", "ADM", "SEC")
    Services = Array("EMB", "DEC", "ABA", "NET", "EXP", "QUA", "MAI", "RH", "ADM", "GAR")

Ami calmant, J.P

Merci Patrick1957 pour votre réponse.

L' objectif est de ne pas me servir de la colonne "Service" C parce que nous sommes obligées de la saisir manuellement et c'est justement cette action de la saisir manuellement que nous souhaitons éliminer en utilisant une fonction.

Oups.. Sorry je n'ai donc pas compris [ encore une fois :) ]

Bonjour,

Ci-joint un équivalent de la proposition de Jurassic Pork via formules (INDEX+EQUIV). Quelle version d'Excel utilisez-vous ? 2017 n'existe pas.

=INDEX(Table1[Services];EQUIV(VRAI;ESTNUM(CHERCHE(Table1[Services];$B2));0))

NB : j'ai laissé l'erreur sur "GAR" car vous n'avez précisé nulle part qu'il était équivalent à "SEC". Si c'est le cas on peut modifier la formule en ajoutant une 2e colonne au tableau de référence, la première sert pour le EQUIV (donc contient SEC) et la 2e pour le INDEX (contient GAR).

Cela donne alors

=INDEX(Table1[NouvelleColonne];EQUIV(VRAI;ESTNUM(CHERCHE(Table1[Services];$B2));0))

Bonjour à tous,

D, F et N sont les memes resultats avec differentes façon d'y parvenir.

Et comme je n'ai pas compris ta version d'excel V 2017 ? (qui pour moi n'existe pas), j'ai mis aussi des formules qui fonctionnent en 365 .

en sachant que

" Il y a un cas particulier où dans la section il y a 2 chaines de caractères qui correspondent à 2 services, il faut toujours prendre EMB."

pour moi cela veut dire que si on trouve 2 services N'IMPORTE LESQUELS, ont sort EMB

Crdlmt

Merci Jurassic Pork pour votre proposition.

Elle fonctionne très bien. En effet, en mettant "RH" avant "ADM" pour "StrSev" et "Services" l'erreur aux lignes 55 et 40 sont rectifiées.

Voici la fonction rectifiée :

Function RechService(cell) As String
    Dim StrServ As Variant
    Dim Services As Variant
    Dim i As Long
    StrServ = Array("RH", "EMB", "DEC", "ABA", "NET", "EXP", "QUA", "MAI", "ADM", "SEC")
    Services = Array("RH", "EMB", "DEC", "ABA", "NET", "EXP", "QUA", "MAI", "ADM", "GAR")
    For i = LBound(StrServ) To UBound(StrServ)
        If InStr(1, cell, StrServ(i), vbTextCompare) > 0 Then
            RechService = Services(i)
            Exit Function
        End If
    Next i
    ' Si aucune correspondance trouvée
    RechService = ""
End Function

Voulant éviter de tirer la formule sur 1000 lignes environ, j'ai lié cette fonction a un bouton et cela fonctionne.

Voici le code entier :

Function RechService(cell) As String
    Dim StrServ As Variant
    Dim Services As Variant
    Dim i As Long
    StrServ = Array("RH", "EMB", "DEC", "ABA", "NET", "EXP", "QUA", "MAI", "ADM", "SEC")
    Services = Array("RH", "EMB", "DEC", "ABA", "NET", "EXP", "QUA", "MAI", "ADM", "GAR")
    For i = LBound(StrServ) To UBound(StrServ)
        If InStr(1, cell, StrServ(i), vbTextCompare) > 0 Then
            RechService = Services(i)
            Exit Function
        End If
    Next i
    ' Si aucune correspondance trouvée
    RechService = ""
End Function

Sub AppliquerRechercheService()

  'Déclarer la constante de la notion de dernière ligne
  Dim DerniereLigne As String
  'Déclarer la constante de la fonction qui recherche le service à indiquer
  Dim FormuleRechercheService As String

    'Déterminer la dernière ligne avec des données dans la colonne C
    DerniereLigne = ThisWorkbook.Worksheets("BDD SERVICES").Range("A" & Rows.Count).End(xlUp).Row
    'Définir la formule qui utilise la fonction qui recherche quel service renseigner à appliquer
    FormuleRechercheService = "=RechService(H2)"

    'Appliquer la fonction qui recherche le service à indiquer
    ThisWorkbook.Worksheets("BDD SERVICES").Range("J2:J" & DerniereLigne).Formula = FormuleRechercheService

End Sub

Merci Saboh12617 pour l'équivalent de la proposition de Jurassic Pork via formules (INDEX+EQUIV).

Merci Djidji59430 pour vos propositions.

Je pensais avoir trouver l'information concernant la version de mon excel mais visiblement ce n'est pas la bonne information. Pourriez vous m'indiquer où je peux trouver se renseignement que je puisse le modifier dans mon profile ?

J'ai ces informations dans le compte de du fichier excel :

capture d ecran 2025 11 19 155920 capture d ecran 2025 11 19 155942

Est-ce qu'il faut que j'indique V 365 Apps for enterprise ou V 2510 ou autre chose ?

365 FR c'est concis et bien suffisant,

Crdlmt

Merci.

Je viens de mettre à jour la Version de l'excel que j'utilise.

Merci.

Je viens de mettre à jour la Version de l'excel que j'utilise.

dans ce cas, toutes mes formules fonctionnent

Crdlmt

Rechercher des sujets similaires à "fonction retourner texte chaine"