Extraction d'une chaine de caractères depuis une cellule

Résolu
CBRiste31 Messages postés 84 Statut Membre -  
brucine Messages postés 23594 Date d'inscription   Statut Membre Dernière intervention   -

Bonjour,

Je cherche en vain, la formule qui me permettra d'extraire une chaine de caractère précise contenus dans une même cellule.

Dans l'exemple ci-dessous, je souhaite extraire la valeur 20 016.                            C'est à dire le 1er chiffre après le 1er espace et le dernier chiffre avant le 3ème espace. 

AAA110 20 016 3KLB. 3KA 1PP 

la composition des cellules se fera toujours de la même manière, avec les espaces aux mêmes endroits !

Merci d'avance pour votre aide et vos suggestions !

Cdlt,                                                                                                                            Gexelpas
Windows / Chrome 109.0.0.0

A voir également:

8 réponses

Résumé de la discussion

Le problème consiste à extraire une chaîne précise ("20 016") contenue dans une cellule dont la composition est fixe, située entre le premier et le troisième espace.
La solution la plus efficace sous Excel 2024/365 est =TEXTE.APRES(TEXTE.AVANT(A1;" ";3);" "), qui retourne directement le segment après le premier espace et avant le troisième espace.
En l’absence de ces versions, des variantes existent utilisant STXT avec CHERCHE ou TROUVE pour cibler le même segment, avec des ajustements pour gérer des espaces insécables.
D’autres propositions prévoient des approches équivalentes après substitution des espaces spéciaux (par exemple NBSP) afin de normaliser le texte avant l’extraction.

Généré automatiquement par IA
sur la base des meilleures réponses
cousinhub29 Messages postés 1130 Date d'inscription   Statut Membre Dernière intervention   364
 

Bonjour,

Si version Excel 2024 ou 365 :

=TEXTE.APRES(TEXTE.AVANT(A1;" ";3);" ")

Bonne journée


1
brucine Messages postés 23594 Date d'inscription   Statut Membre Dernière intervention   3 752
 

Bonjour,

Une solution tordue et forcément moins simple si on n'a pas 365 ou 2024

=STXT(A1;TROUVE(CAR(32);A1);TROUVE(" "; A1;TROUVE(" ";A1;TROUVE(" "; A1) +1) +1)-TROUVE(" ";A1))
 

0
brucine Messages postés 23594 Date d'inscription   Statut Membre Dernière intervention   3 752 > brucine Messages postés 23594 Date d'inscription   Statut Membre Dernière intervention  
 

Pardon, je ne sais pas compter, j'ai embarqué un espace de trop avant 20:

=STXT(A1;TROUVE(CAR(32);A1)+1;TROUVE(" "; A1;TROUVE(" ";A1;TROUVE(" "; A1) +1) +1)-TROUVE(" ";A1)-1)

0
CBRiste31 Messages postés 84 Statut Membre 3
 

Bonjour,

J'ai mis un peu de teps à vous répondre, désolé !

J'ai effectivement 365 et la formule fonctionne très bien !

Merci beaucoup !!

0
yclik Messages postés 3994 Date d'inscription   Statut Membre Dernière intervention   1 583
 

Bonjour

la composition des cellules se fera toujours de la même manière, avec les espaces aux mêmes endroits

Si 20 016 a toujours le même nombre de chiffre

=STXT(A2;8;6)
1
brucine Messages postés 23594 Date d'inscription   Statut Membre Dernière intervention   3 752
 

Bonjour,

Bien sûr.

Je suis parti du principe que la chaîne en question n'avait pas une longueur fixe, et on ne sait pas non plus si c'est le cas de la précédente.

0
danielc0 Messages postés 2053 Date d'inscription   Statut Membre Dernière intervention   248
 

Il faut ajouter un SUBSTITUE :

=TEXTE.APRES(TEXTE.AVANT(SUBSTITUE(A1;CAR(160);" ");" ";3);" ")

=STXT(A1;TROUVE(CAR(32);SUBSTITUE(A1;CAR(160);" "))+1;TROUVE(" "; SUBSTITUE(A1;CAR(160);" ");TROUVE(" ";SUBSTITUE(A1;CAR(160);" ");TROUVE(" "; SUBSTITUE(A1;CAR(160);" ")) +1) +1)-TROUVE(" ";SUBSTITUE(A1;CAR(160);" "))-1)

Daniel


1
CBRiste31 Messages postés 84 Statut Membre 3
 

Bonjour,

J'ai pu la tester et surtout m'en inspirer pour d'autres chaines de caractères...

Merci bcp !

0
danielc0 Messages postés 2053 Date d'inscription   Statut Membre Dernière intervention   248
 

Aussi :

=TEXTE.APRES(TEXTE.AVANT(A1;{" ";" "};3);" ")

(L'un des deux " " est un espace insécable).

Daniel


1
vaanbasch Messages postés 1161 Statut Membre 664
 

Salut,

Ta formule ne fonctionnera pas correctement dans ce cas. La fonction TEXTE.AVANT avec { " "; " " } ne gère pas bien la structure du texte. Une approche avec TROUVE et STXT sera plus fiable pour extraire le bon nombre.

0

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

Posez votre question
vaanbasch Messages postés 1161 Statut Membre 664
 

Bonjour, 

si la structure des cellules est toujours la même, tu peut utiliser une combinaison de fonctions pour extraire le nombre voulu.

=STXT(A1;CHERCHE(" ";A1)+1;CHERCHE(" ";A1;CHERCHE(" ";A1)+1)-CHERCHE(" ";A1)-1)

Ça doit surement être la meilleur façon de faire.

Ou : 

=STXT(A1;TROUVE(" ";A1)+1;TROUVE(" ";A1;TROUVE(" ";A1)+1)-TROUVE(" ";A1)-1)

Cdlt.


1
bigoudiii Messages postés 276 Date d'inscription   Statut Membre Dernière intervention   91
 

Hello,

@vaanbasch : ta formule n'extrait que le 20 et pas le 20 016 (sauf erreur de ma part).

Pour M365 on peut tenter (si contexte constant) :

=REGEX.EXTRAIRE(A1;"\d{2}\s\d{3}")
0
CBRiste31 Messages postés 84 Statut Membre 3
 

J'ai testé la 1ère formule sur une autre chaine de caractères avec une logique différente. J'ai fait les adaptations nécessaires et c'est au top !

Merci bcp !

0
tontong Messages postés 2586 Date d'inscription   Statut Membre Dernière intervention   1 062
 

Bonjour à tous,

Si le troisième espace est le premier CAR(160) de la chaine on peut essayer:

=STXT(GAUCHE(A1;CHERCHE(CAR(160);A1)-1);CHERCHE(" ";A1)+1;99)

1
danielc0 Messages postés 2053 Date d'inscription   Statut Membre Dernière intervention   248
 

Bonjour,

Je suis le seul à trouver un espace insécable (ASCII 0160) après le 6 ?

Daniel


0
DjiDji59430 Messages postés 4343 Date d'inscription   Statut Membre Dernière intervention   705
 

non, et a part Yclik, les autres solutions donnes des résultats erronés (chez moi !)


Crdlmt

0
brucine Messages postés 23594 Date d'inscription   Statut Membre Dernière intervention   3 752
 

Bonjour,

Non, je me suis fait planter par un certain nombre de formules qui ne rendent que 20 probablement de ce fait.

Je ne me souviens plus si j'ai repris la chaîne de caractères en mettant des espaces entre chaque partie, auquel cas la formule que j'ai illustrée fonctionne; sinon il faut probablement remplacer par une conditionnelle cherchant 32 ou 160.

0
DjiDji59430 Messages postés 4343 Date d'inscription   Statut Membre Dernière intervention   705
 

Tant qu'on y est, un petit PQ :

let
    Source = Excel.CurrentWorkbook(){[Name="Tableau1"]}[Content],
    #"Colonne Extraite" = Table.TransformColumns(Source,{"ref", each Text.BetweenDelimiters(_," ", "#(00A0)")})
    in
    #"Colonne Extraite"

Plus on est de..........


Crdlmt

0
CBRiste31 Messages postés 84 Statut Membre 3
 

Bonjour,

Bon là, je dois avouer, vous m'avez perdu... ;-)

Mais merci !

0
brucine Messages postés 23594 Date d'inscription   Statut Membre Dernière intervention   3 752 > CBRiste31 Messages postés 84 Statut Membre
 

Bonjour,

Ta question a donné lieu à des réponses plus ou moins "savantes" selon qu'on a Excel 365 ou non et sûrement aussi pour le plaisir de discuter.

Si la chaîne avant celle à chercher et celle à chercher ont toujours le même nombre de caractères, on fait comme en <4> et on ferme le ban.

Sinon, le problème arrive de temps à autre à partir de l'extraction d'une base de données ou de la sortie de certaines commandes Dos, ce qu'on voit comme un espace est en fait un espace insécable.

Si on sait d'avance où il peut se trouver, pas de problème non plus, sinon les formules se compliquent parce qu'il faut à travers toute la chaîne rechercher l'hypothèse de l'un ou de l'autre.

Selon la longueur du fichier à traiter, on peut tricher par des alternatives en reprenant manuellement dans la cellule source la chaîne en supprimant tout ce qui ressemble à des espaces et en saisissant un espace à la place (c'est probablement ce que j'ai fait en <3> et qui alors fonctionne) ou bien appliquer à ce fichier un rechercher-remplacer préalable de tous les espaces insécables par des espaces classiques.

0