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

Résolu
CBRiste31 Messages postés 63 Date d'inscription   Statut Membre Dernière intervention   -  
brucine Messages postés 21682 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

cousinhub29 Messages postés 1074 Date d'inscription   Statut Membre Dernière intervention   361
 

Bonjour,

Si version Excel 2024 ou 365 :

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

Bonne journée


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

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 21682 Date d'inscription   Statut Membre Dernière intervention   3 425 > brucine Messages postés 21682 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 63 Date d'inscription   Statut Membre Dernière intervention   2
 

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 3873 Date d'inscription   Statut Membre Dernière intervention   1 562
 

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 21682 Date d'inscription   Statut Membre Dernière intervention   3 425
 

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 1858 Date d'inscription   Statut Membre Dernière intervention   230
 

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   Statut Membre Dernière intervention   2
 

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 1858 Date d'inscription   Statut Membre Dernière intervention   230
 

Aussi :

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

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

Daniel


1
vaanbasch Messages postés 770 Date d'inscription   Statut Membre Dernière intervention   662
 

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 770 Date d'inscription   Statut Membre Dernière intervention   662
 

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 274 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 63 Date d'inscription   Statut Membre Dernière intervention   2
 

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   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 1858 Date d'inscription   Statut Membre Dernière intervention   230
 

Bonjour,

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

Daniel


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

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


Crdlmt

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

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 4253 Date d'inscription   Statut Membre Dernière intervention   700
 

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   Statut Membre Dernière intervention   2
 

Bonjour,

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

Mais merci !

0
brucine Messages postés 21682 Date d'inscription   Statut Membre Dernière intervention   3 425 > CBRiste31 Messages postés 63 Date d'inscription   Statut Membre Dernière intervention  
 

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