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

Résolu
CBRiste31 Messages postés 63 Date d'inscription vendredi 8 août 2008 Statut Membre Dernière intervention 15 février 2025 - 11 févr. 2025 à 07:00
brucine Messages postés 19627 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 27 mars 2025 - 15 févr. 2025 à 08:57

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

cousinhub29 Messages postés 1033 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 26 mars 2025 357
11 févr. 2025 à 07:53

Bonjour,

Si version Excel 2024 ou 365 :

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

Bonne journée


1
brucine Messages postés 19627 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 27 mars 2025 3 039
11 févr. 2025 à 08:51

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 19627 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 27 mars 2025 3 039 > brucine Messages postés 19627 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 27 mars 2025
11 févr. 2025 à 09:07

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 63 Date d'inscription vendredi 8 août 2008 Statut Membre Dernière intervention 15 février 2025 2
15 févr. 2025 à 08:11

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 3799 Date d'inscription vendredi 25 juillet 2014 Statut Membre Dernière intervention 24 mars 2025 1 543
11 févr. 2025 à 09:27

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 19627 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 27 mars 2025 3 039
11 févr. 2025 à 09:31

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 1696 Date d'inscription mardi 5 juin 2018 Statut Membre Dernière intervention 25 mars 2025 199
12 févr. 2025 à 12:18

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 63 Date d'inscription vendredi 8 août 2008 Statut Membre Dernière intervention 15 février 2025 2
15 févr. 2025 à 08:13

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 1696 Date d'inscription mardi 5 juin 2018 Statut Membre Dernière intervention 25 mars 2025 199
12 févr. 2025 à 12:34

Aussi :

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

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

Daniel


1
vaanbasch Messages postés 757 Date d'inscription lundi 28 juillet 2008 Statut Membre Dernière intervention 24 mars 2025 662
12 févr. 2025 à 15:04

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 757 Date d'inscription lundi 28 juillet 2008 Statut Membre Dernière intervention 24 mars 2025 662
Modifié le 12 févr. 2025 à 15:01

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 264 Date d'inscription lundi 19 décembre 2022 Statut Membre Dernière intervention 6 mars 2025 85
Modifié le 12 févr. 2025 à 16:03

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 63 Date d'inscription vendredi 8 août 2008 Statut Membre Dernière intervention 15 février 2025 2
15 févr. 2025 à 08:14

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 2572 Date d'inscription mercredi 3 février 2010 Statut Membre Dernière intervention 14 mars 2025 1 061
12 févr. 2025 à 17:58

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 1696 Date d'inscription mardi 5 juin 2018 Statut Membre Dernière intervention 25 mars 2025 199
12 févr. 2025 à 10:34

Bonjour,

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

Daniel


0
DjiDji59430 Messages postés 4221 Date d'inscription samedi 19 avril 2008 Statut Membre Dernière intervention 26 mars 2025 693
12 févr. 2025 à 11:16

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


Crdlmt

0
brucine Messages postés 19627 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 27 mars 2025 3 039
12 févr. 2025 à 11:16

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 4221 Date d'inscription samedi 19 avril 2008 Statut Membre Dernière intervention 26 mars 2025 693
12 févr. 2025 à 23:10

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 63 Date d'inscription vendredi 8 août 2008 Statut Membre Dernière intervention 15 février 2025 2
15 févr. 2025 à 08:15

Bonjour,

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

Mais merci !

0
brucine Messages postés 19627 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 27 mars 2025 3 039 > CBRiste31 Messages postés 63 Date d'inscription vendredi 8 août 2008 Statut Membre Dernière intervention 15 février 2025
15 févr. 2025 à 08:57

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