Extraction d'une chaine de caractères depuis une cellule
Résolubrucine 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
- Extraction d'une chaine de caractères depuis une cellule
- Caractères ascii - Guide
- Aller à la ligne dans une cellule excel - Guide
- Chaine tnt gratuite sur mobile - Guide
- Excel cellule couleur si condition texte - Guide
- Verrouiller une cellule excel - Guide
8 réponses
11 févr. 2025 à 07:53
Bonjour,
Si version Excel 2024 ou 365 :
=TEXTE.APRES(TEXTE.AVANT(A1;" ";3);" ")
Bonne journée
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)
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.
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
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 !
12 févr. 2025 à 12:34
Aussi :
=TEXTE.APRES(TEXTE.AVANT(A1;{" ";" "};3);" ")
(L'un des deux " " est un espace insécable).
Daniel
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionModifié 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.
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}")
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 !
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)
12 févr. 2025 à 10:34
Bonjour,
Je suis le seul à trouver un espace insécable (ASCII 0160) après le 6 ?
Daniel
12 févr. 2025 à 11:16
non, et a part Yclik, les autres solutions donnes des résultats erronés (chez moi !)
Crdlmt
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.
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
15 févr. 2025 à 08:15
Bonjour,
Bon là, je dois avouer, vous m'avez perdu... ;-)
Mais merci !
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.
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))
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)
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 !!