Extraire une chaine de caracteres

Résolu
hmcirta Messages postés 233 Date d'inscription dimanche 12 mars 2006 Statut Membre Dernière intervention 11 octobre 2024 - 9 oct. 2024 à 16:35
hmcirta Messages postés 233 Date d'inscription dimanche 12 mars 2006 Statut Membre Dernière intervention 11 octobre 2024 - 10 oct. 2024 à 18:33

Bonjour,

Comment extraire la suite de caracteres qui se trouve entre 2 espaces et qui contient "-" (sans guillemets).

Merci de votre aide habituelle

NB: j'ai excel 2010

A voir également:

11 réponses

tontong Messages postés 2563 Date d'inscription mercredi 3 février 2010 Statut Membre Dernière intervention 17 octobre 2024 1 058
9 oct. 2024 à 20:05

Bonjour à tous,

À condition de bien avoir un espace avant et après le mot composé:

On cherche la position du premier espace après "-" = CHERCHE(" ";A17;CHERCHE("-";A17))
On prend le texte à gauche B18=GAUCHE(A17;CHERCHE(" ";A17;CHERCHE("-";A17))-1)
on compte le nombre d'espaces =NBCAR(B18)-NBCAR(SUBSTITUE(B18;" ";""))
puis on cherche la position du dernier espace =CHERCHE("§";SUBSTITUE(B18;" ";"§";2))
On isole le texte à partir de cette position en regroupant tout dans une seule formule:
=STXT(GAUCHE(A17;CHERCHE(" ";A17;CHERCHE("-";A17))-1);CHERCHE("§";SUBSTITUE(GAUCHE(A17;CHERCHE(" ";A17;CHERCHE("-";A17))-1);" ";"§";2));99)

1
PHILOU10120 Messages postés 6393 Date d'inscription lundi 16 avril 2012 Statut Contributeur Dernière intervention 9 octobre 2024 810
9 oct. 2024 à 17:10

Bonjour

En A1 le texte avec le -

En B1 cette formule

 =GAUCHE(A1;CHERCHE("-";A1)-2)&DROITE(A1;NBCAR(A1)-CHERCHE("-";A1)-1)


0
brucine Messages postés 17319 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 23 octobre 2024 2 487
9 oct. 2024 à 17:23

Bonjour,

L'un de nous deux a mal compris.

Supposons que j'écrive en A1:

Un porte-manteau noir (je ne mets pas j'ai devant pour ne pas aggraver le cas).

Ne devrais-je pas retourner:

porte-manteau?

0
PHILOU10120 Messages postés 6393 Date d'inscription lundi 16 avril 2012 Statut Contributeur Dernière intervention 9 octobre 2024 810
9 oct. 2024 à 18:12

Bonjour Brucine

En A1 le texte avec les espaces et le  " - "

En B1 cette formule

=SIERREUR(GAUCHE(A1;CHERCHE(" - ";A1)-1)&DROITE(A1;NBCAR(A1)-CHERCHE(" - ";A1)-1);A1)

Il y aura certainement des ratés du aux espaces


0
brucine Messages postés 17319 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 23 octobre 2024 2 487
9 oct. 2024 à 18:23

Toujours pas chez moi, ça ramène à l'identique "un porte manteau-noir"

ça, ça ramène le résultat (manteau-noir) à condition qu'il n'y ait pas un autre espace avant (j'ai un porte-manteau noir), c'est capillotracté et sûrement beaucoup plus simple dans Excel 365.

=DROITE(GAUCHE(A1;CHERCHE("-";A1)-1);NBCAR(GAUCHE(A1;CHERCHE("-";A1)-1))-CHERCHE(" ";GAUCHE(A1;CHERCHE("-";A1)-1)))&"-"&GAUCHE(DROITE(A1;NBCAR(A1)-NBCAR(GAUCHE(A1;CHERCHE("-";A1))));CHERCHE(" ";DROITE(A1;NBCAR(A1)-NBCAR(GAUCHE(A1;CHERCHE("-";A1))))))
 

0
danielc0 Messages postés 1221 Date d'inscription mardi 5 juin 2018 Statut Membre Dernière intervention 24 octobre 2024 139 > brucine Messages postés 17319 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 23 octobre 2024
Modifié le 9 oct. 2024 à 19:01

Re,

"sûrement beaucoup plus simple dans Excel 365."

Oui:

=LET(tbl;FRACTIONNER.TEXTE(A1;" ");INDEX(tbl;EQUIVX("*-*";tbl;2)))

Mais je n'aurais jamais trouvé ta formule !

Daniel

0
PHILOU10120 Messages postés 6393 Date d'inscription lundi 16 avril 2012 Statut Contributeur Dernière intervention 9 octobre 2024 810
9 oct. 2024 à 18:51

Bonjour Brucine

Si A1 contient "j'ai un porte-manteau - noir" la formule fonctionne

On supprime le " - " entre manteau et noir, comme si cela était une erreur de saisie

j'ai un porte-manteau noir

Pour le reste je n'ai pas 365 et on a pas assez d'informations pour être sûr de bien répondre à la question


0
brucine Messages postés 17319 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 23 octobre 2024 2 487
9 oct. 2024 à 19:09

Rien n'est parfait en ce bas monde: si je mets le tiret entre manteau et noir, je me fais jeter dans tous les cas si je ne mets pas un espace après noir, et si je mets j'ai devant, il faut que je coupe non pas au premier espace mais au second, mais là, on n'en finit pas, je peux aussi écrire "ce soir j'ai un porte-jarretelles noir".

La solution discriminante, en supposant là aussi qu'un seul "mot" ait ces caractéristiques serait d'extraire tout ce qui est avant tiret et après espace et de le coller à l'extraction après tiret espace.

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
danielc0 Messages postés 1221 Date d'inscription mardi 5 juin 2018 Statut Membre Dernière intervention 24 octobre 2024 139
9 oct. 2024 à 18:54

Bonjour à tous,

Une fonction VBA :

Function Extr(C)
  Application.Volatile
  For Each Item In Split(C, " ")
    If IsNumeric(Application.Search("-", Item)) Then
      Extr = Item
      Exit For
    End If
  Next Item
End Function

Utilisation (exemple) :

=EXTR(A1)

Si tu as des problèmes pour installer la fonction, n'hésite pas à demander.

Daniel


0
hmcirta Messages postés 233 Date d'inscription dimanche 12 mars 2006 Statut Membre Dernière intervention 11 octobre 2024 21
Modifié le 9 oct. 2024 à 22:30

Re bonjour

Merci a tous de vos reponses.

Alors voila ce que j'obtiens avec mon cas :

En A1 j'ai le texte suivant: 
* Reception de tomate du client WHD-5 : 100kg mure, taille moyenne.
Le but c'est extraire WHD-5.


La reponse 1 donne ce resultat :"* Reception de tomate du client WH : 100 lkg mure, taille moyenne.
La reponse 2 donne ce resultat :"* Reception de tomate du client WHD-5 : 100 lkg mure, taille moyenne."
La reponse 3 donne ce resultat :"Reception de tomate du client WHD-5 "
La reponse 5 donne ce resultat :" de tomate du client WHD-5"
 

Pour l'installation de la fonction je veux bien de l'aide

0
Raymond PENTIER Messages postés 58705 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 23 octobre 2024 17 218
Modifié le 10 oct. 2024 à 01:52

Bonjour.

"extraire la suite de caractères qui se trouve entre 2 espaces et qui contient -"


Cette suite peut contenir combien de caractères au maximum ? Ton exemple donne 5 ; est-ce la règle ?


Est-ce que le mot recherché est toujours précédé du mot "client" ?


0
danielc0 Messages postés 1221 Date d'inscription mardi 5 juin 2018 Statut Membre Dernière intervention 24 octobre 2024 139
10 oct. 2024 à 09:37

Bonjour à tous,

Pour installer la fonction :

Ouvre ton classeur. Appuie sur les touches Alt et F11 pour ouvrir la fenêtre de l'éditeur VB :

Repère dans la partie gauche le VBAProject qui a le même nom que ton classeur. Fais un clic droit dessus, clique sur Insertion et sur Module :

Dans la partie droite de la fenêtre, colle le code de la fonction :

Ferme la fenêtre de l'éditeur VB. Enregstre le classeur au format "Classeur Excel (prenant en charge les macros)(*.xlsm).

C'est tout. Tu peux maintenant te servir de la fonction (uniquement dans ce classeur).

Daniel


0
hmcirta Messages postés 233 Date d'inscription dimanche 12 mars 2006 Statut Membre Dernière intervention 11 octobre 2024 21
10 oct. 2024 à 12:49

Bonjour,

Pour Raymond PENTIER : la suite de caracteres peut contenir jusqu'a 10 caracteres et pas toujours precedee du mot client.

Pour danielc0 : Merci pour le tuto et ca marche tres bien.

je suis toujours preuneur si une formule peut le faire aussi.

Merci tous pour votre aide...

0
tontong Messages postés 2563 Date d'inscription mercredi 3 février 2010 Statut Membre Dernière intervention 17 octobre 2024 1 058
10 oct. 2024 à 15:01

Bonjour,

En regroupant j'ai oublié de remplacer un nombre par son expression! Oups!

position du dernier espace =CHERCHE("§";SUBSTITUE(B18;" ";"§";2))

Il faut:

position du dernier espace =CHERCHE("§";SUBSTITUE(B18;" ";"§";NBCAR(B18)-NBCAR(SUBSTITUE(B18;" ";""))))

Ce qui donne pour la formule globale:

=STXT(GAUCHE(A17;CHERCHE(" ";A17;CHERCHE("-";A17))-1);CHERCHE("§";SUBSTITUE(GAUCHE(A17;CHERCHE(" ";A17;CHERCHE("-";A17))-1);" ";"§";NBCAR(B18)-NBCAR(SUBSTITUE(B18;" ";""))));99)

je vous laisse remplacer A17 par A1.

0
hmcirta Messages postés 233 Date d'inscription dimanche 12 mars 2006 Statut Membre Dernière intervention 11 octobre 2024 21
Modifié le 10 oct. 2024 à 16:24

Bonjour,

A17 est remplacé par A1, mais reste B18 que je ne sais pas a quelle valeur elle correspond .

Si ca peut etre util, le resultat affiche #VALEUR! meme en remplacant B18 pas A1

0
tontong Messages postés 2563 Date d'inscription mercredi 3 février 2010 Statut Membre Dernière intervention 17 octobre 2024 1 058 > hmcirta Messages postés 233 Date d'inscription dimanche 12 mars 2006 Statut Membre Dernière intervention 11 octobre 2024
10 oct. 2024 à 16:34

B18 est un intermédiaire qui ne sert que pour établir la formule finale.

Il faut se référer au post "9" en le corrigeant.

Il faut aussi décaler de 1 le départ du Stxt(  ) pour enlever l'espace au début du résultat :

=STXT(GAUCHE(A17;CHERCHE(" ";A17;CHERCHE("-";A17))-1);CHERCHE("§";SUBSTITUE(GAUCHE(A17;CHERCHE(" ";A17;CHERCHE("-";A17))-1);" ";"§";NBCAR(GAUCHE(A17;CHERCHE(" ";A17;CHERCHE("-";A17))-1))-NBCAR(SUBSTITUE(GAUCHE(A17;CHERCHE(" ";A17;CHERCHE("-";A17))-1);" ";""))))+1;99)

0
tontong Messages postés 2563 Date d'inscription mercredi 3 février 2010 Statut Membre Dernière intervention 17 octobre 2024 1 058 > tontong Messages postés 2563 Date d'inscription mercredi 3 février 2010 Statut Membre Dernière intervention 17 octobre 2024
10 oct. 2024 à 17:07

on peut simplifier un peu (à vérifier)

=STXT(GAUCHE(A17;CHERCHE(" ";A17;CHERCHE("-";A17))-1);CHERCHE("§";SUBSTITUE(A17;" ";"§";NBCAR(GAUCHE(A17;CHERCHE(" ";A17;CHERCHE("-";A17))-1))-NBCAR(SUBSTITUE(GAUCHE(A17;CHERCHE(" ";A17;CHERCHE("-";A17))-1);" ";""))))+1;99)

0
hmcirta Messages postés 233 Date d'inscription dimanche 12 mars 2006 Statut Membre Dernière intervention 11 octobre 2024 21
10 oct. 2024 à 18:33

Bonjour,

Les 2 formules marche impecablement !

En tout cas moi je prends les 2 solutions.

Merci a tous pour votre aide

je mets resolu

0