CTXT (MID en anglais) est la fonction Excel pour extraire un morceau de texte précis depuis n'importe quelle position dans une chaîne de caractères. Tu lui donnes un point de départ et un nombre de caractères, elle te retourne exactement ce que tu veux.
Contrairement à GAUCHE qui extrait depuis le début ou DROITE depuis la fin, CTXT te permet de cibler n'importe quel segment : un code postal enfoui dans une adresse complète, la sous-catégorie entre deux tirets d'une référence produit, l'année de fabrication dans un numéro de série, ou le code banque d'un IBAN. C'est elle qui rend le découpage de données structurées vraiment chirurgical.
Syntaxe de la fonction CTXT
=CTXT(texte; no_départ; no_car)Comprendre chaque paramètre de la fonction CTXT
texte
: la chaîne de caractères source depuis laquelle tu veux extraire du texteÇa peut être une valeur directe comme "ABC-12345-XYZ", une référence de cellule comme A1, ou le résultat d'une autre fonction texte.
Exemples valides : une cellule A1 contenant du texte, une chaîne littérale "75001 Paris", ou le résultat d'une formule comme CONCATENER(A1;"-";B1). Le texte peut contenir des espaces et de la ponctuation, qui comptent comme des caractères à part entière.
no_départ
: la position du premier caractère à extraireExcel commence à compter à 1 (pas 0 comme en programmation). Si tu veux extraire à partir du 5e caractère, tu mets 5. Les espaces comptent aussi !
Par exemple, dans "PROD-123", le tiret est en position 5, le 1 en position 6. Si no_départ est inférieur à 1, Excel renvoie #VALEUR!. Si no_départ est supérieur à la longueur du texte, CTXT renvoie une chaîne vide "" sans erreur.
Astuce : Combine CTXT avec TROUVE pour trouver automatiquement la position de départ : =CTXT(A1; TROUVE("-";A1)+1; 5) extrait 5 caractères juste après le premier tiret, quelle que soit sa position.
no_car
: le nombre de caractères à extraire à partir de la position de départSi tu demandes plus de caractères qu'il n'en reste jusqu'à la fin du texte, Excel extrait simplement jusqu'à la fin sans générer d'erreur.
Cas particuliers : si no_car vaut 0, tu obtiens une chaîne vide ""; si tu veux tout extraire jusqu'à la fin quelle que soit la longueur, utilise un grand nombre comme 9999. Tu peux aussi calculer dynamiquement la valeur avec NBCAR(texte) pour adapter la formule à chaque cellule.
Pas envie d'écrire la formule CTXT à la main ?
Génère-la avec notre IAExemples pratiques pas à pas
Agent immobilier : extraire le code postal depuis une adresse complète
Tu es agent immobilier et tu as importé une base de données avec des adresses complètes. Tu dois extraire uniquement les codes postaux (5 chiffres) pour segmenter tes biens par zone géographique, sans ressaisir chaque ligne à la main.
| A | B | |
|---|---|---|
| 1 | Adresse complète | Code postal extrait |
| 2 | 15 rue de la Paix, 75001 Paris | 75001 |
| 3 | 8 avenue des Champs, 69002 Lyon | 69002 |
| 4 | 142 boulevard Haussmann, 75008 Paris | 75008 |
| 5 | 23 cours Mirabeau, 13100 Aix | 13100 |
=CTXT(A2; TROUVE(",";A2)+2; 5)La formule localise d'abord la virgule, ajoute 2 pour sauter la virgule et l'espace qui suivent, puis extrait 5 caractères : le code postal 75001. Comme il commence toujours deux positions après la virgule dans ce format d'adresse, l'extraction reste juste même si la rue change de longueur.
Astuce de pro : Si tes adresses n'ont pas toutes le même format, tu peux utiliser TROUVE pour localiser le début du code postal en cherchant le premier chiffre après une virgule ou un espace, plutôt qu'une position fixe.
Responsable logistique : parser des références produit structurées
Tu es responsable logistique et tes références produit suivent un format strict : CAT-SOUSCATEGORIE-NUMERO. Tu dois extraire uniquement la sous-catégorie (les caractères entre les deux tirets) pour créer des rapports par famille de produits.
| A | B | |
|---|---|---|
| 1 | Référence produit | Sous-catégorie |
| 2 | ELC-SMARTPHONE-1245 | SMARTPHONE |
| 3 | ELC-TABLETTE-8956 | TABLETTE |
| 4 | VET-CHEMISE-3421 | CHEMISE |
| 5 | ALI-CONSERVE-7788 | CONSERVE |
=CTXT(A2; 5; TROUVE("-";A2;5)-5)La formule démarre à la position 5 (juste après la catégorie sur 3 lettres et son tiret), puis calcule le nombre de caractères à extraire en cherchant le deuxième tiret et en lui retranchant 5. Elle isole ainsi SMARTPHONE et s'adapte automatiquement à toutes les longueurs de sous-catégorie.
Technicien SAV : extraire l'année de fabrication depuis des numéros de série
Tu travailles au SAV d'un fabricant et les numéros de série contiennent l'année de fabrication aux positions 8 à 11. Tu dois extraire cette information pour identifier automatiquement les produits encore sous garantie, sans ouvrir chaque fiche produit.
| A | B | C | |
|---|---|---|---|
| 1 | Numéro de série | Année fab. | Sous garantie ? |
| 2 | ABC123-2023-XY789 | 2023 | OUI |
| 3 | DEF456-2021-ZT456 | 2021 | NON |
| 4 | GHI789-2024-QW123 | 2024 | OUI |
| 5 | JKL012-2020-ER890 | 2020 | NON |
=CTXT(A2; 8; 4)Ici, la fonction extrait 4 caractères à partir de la position 8 et renvoie l'année 2023 au format YYYY. Comme le numéro de série garde toujours la même structure, la position fixe suffit : pas besoin de TROUVE pour repérer le segment.
Astuce de pro : Pour automatiser le calcul de garantie, combine avec : =SI(ANNEE(AUJOURDHUI())-CNUM(CTXT(A2;8;4))<=2;"OUI";"NON") pour une garantie de 2 ans.
Comptable : extraire le code banque depuis un IBAN
Tu es comptable et tu dois analyser les paiements reçus en identifiant la banque d'origine. Dans un IBAN français, les 5 chiffres du code banque se trouvent aux positions 5 à 9 du format compact (sans espaces).
| A | B | C | |
|---|---|---|---|
| 1 | IBAN | Code banque | Banque |
| 2 | FR76 3000 4007 1234 5678 9012 345 | 30004 | BNP Paribas |
| 3 | FR14 2004 1010 1234 5678 9012 345 | 20041 | Société Générale |
| 4 | FR76 1027 8060 1234 5678 9012 345 | 10278 | Crédit Agricole |
| 5 | FR76 3000 2005 1234 5678 9012 345 | 30002 | BNP Paribas |
=CTXT(SUBSTITUE(A2;" ";""); 5; 5)La formule supprime d'abord tous les espaces de l'IBAN (présents uniquement pour la lisibilité), puis extrait 5 caractères à partir de la position 5 pour obtenir le code banque 30004. Sans le nettoyage préalable, les espaces décaleraient les positions et fausseraient l'extraction.
Astuce de pro : Tu peux créer une table code banque vers nom de banque, puis utiliser RECHERCHEV pour afficher automatiquement le nom de la banque à partir du code extrait.
Envie de t'entraîner sur de vrais exercices Excel ?
M'entraînerLes erreurs fréquentes avec la fonction CTXT
Erreur #VALEUR! avec une position de départ incorrecte
Si no_départ est inférieur à 1 ou si tu passes du texte au lieu d'un nombre pour ce paramètre, Excel renvoie #VALEUR!. La position doit être un entier positif.
Solution : Vérifie que ton numéro de départ est au minimum 1. Si tu utilises une formule pour calculer la position, ajoute un contrôle avec =MAX(1; ta_formule) pour garantir un minimum de 1.
Oubli des espaces dans le comptage
Les espaces comptent comme des caractères. Si tu veux extraire "Paris" de "75001 Paris" et que tu commences à la position 6 au lieu de 7, tu obtiens " Paris" avec un espace au début.
Solution : Compte soigneusement en incluant les espaces, ou utilise SUPPRESPACE(CTXT(...)) pour nettoyer les espaces indésirables avant ou après l'extraction.
Formule figée qui ne s'adapte pas aux variations de longueur
Si tu utilises des positions fixes comme =CTXT(A1; 5; 3) mais que tes données n'ont pas toujours le même format, tu obtiens des résultats incorrects ou des extractions tronquées.
Solution : Utilise TROUVE ou CHERCHE pour calculer dynamiquement la position de départ : =CTXT(A1; TROUVE("-";A1)+1; 5) s'adaptera à toutes les variations de longueur de préfixe.
Résultat vide inattendu sans erreur
Si no_départ est supérieur à la longueur totale du texte, CTXT retourne une chaîne vide "" sans afficher d'erreur. Par exemple, =CTXT("Bonjour"; 20; 5) renvoie "" car "Bonjour" n'a que 7 caractères.
Solution : Utilise NBCAR(texte) pour vérifier la longueur avant d'extraire, ou ajoute un contrôle avec SI : =SI(no_départ>NBCAR(texte); "Format invalide"; CTXT(...)).
CTXT vs GAUCHE vs DROITE
Utilise CTXT quand les données que tu veux sont au milieu du texte ou à une position variable. Utilise GAUCHE pour extraire depuis le début (codes, préfixes) et DROITE pour extraire depuis la fin (extensions, suffixes).
| Critère | CTXT | GAUCHE | DROITE |
|---|---|---|---|
| Position d'extraction | N'importe où | Début uniquement | Fin uniquement |
| Paramètres | 3 (texte, départ, nb) | 2 (texte, nb) | 2 (texte, nb) |
| Flexibilité | Très haute | Moyenne | Moyenne |
| Combine avec TROUVE | Très utile | Moins utile | Moins utile |
| Cas d'usage typique | Code postal dans adresse, sous-catégorie entre tirets | Code préfixe : "ELC-..." | Extension fichier : "...xlsx" |
Astuces avancées avec CTXT
Extraction entre deux délimiteurs
Pour extraire du texte entre deux caractères spécifiques (entre deux tirets, deux virgules), combine CTXT avec deux TROUVE : =CTXT(A1; TROUVE("-";A1)+1; TROUVE("-";A1;TROUVE("-";A1)+1)-TROUVE("-";A1)-1). Cette formule trouve le premier tiret, puis le deuxième, et extrait tout ce qui est entre les deux.
Elle s'adapte automatiquement quelle que soit la longueur du segment central.
Extraction dynamique jusqu'à la fin
Si tu veux extraire depuis une position jusqu'à la fin du texte, quelle que soit sa longueur, utilise un grand nombre pour no_car : =CTXT(A1; 10; 9999) extrait tout depuis la position 10 jusqu'à la fin.
Excel s'arrête simplement au dernier caractère disponible, sans erreur ni troncature.
Nettoyage avant extraction
Combine CTXT avec SUBSTITUE ou SUPPRESPACE pour normaliser les données avant d'extraire, surtout après un import externe : =CTXT(SUPPRESPACE(SUBSTITUE(A1;" - ";"-")); 5; 3) enlève les espaces superflus et uniformise les tirets.
Cela évite les décalages de position causés par des séparateurs inconsistants.
Questions fréquentes sur la fonction CTXT
Quelle est la différence entre CTXT et GAUCHE ou DROITE ?
GAUCHE extrait depuis le début du texte, DROITE depuis la fin, et CTXT depuis n'importe quelle position que tu choisis. CTXT est plus flexible quand les données que tu veux sont au milieu d'une chaîne, comme un code postal dans une adresse complète.
Tu peux aussi combiner les trois pour extraire plusieurs parties d'un même texte : GAUCHE pour la catégorie, CTXT pour le code central, et DROITE pour le suffixe.
Que se passe-t-il si je demande plus de caractères qu'il n'y en a ?
Excel extrait simplement tous les caractères disponibles jusqu'à la fin du texte, sans générer d'erreur. Par exemple, si tu as 10 caractères et que tu demandes 20, tu obtiens les 10 caractères restants.
Ce comportement est pratique quand tu veux tout extraire jusqu'à la fin sans connaître la longueur exacte : utilise 9999 comme no_car pour couvrir tous les cas.
CTXT compte-t-il les espaces comme des caractères ?
Oui, absolument. Les espaces, la ponctuation et les caractères spéciaux comptent chacun pour 1. Si tu veux extraire "Code" de "Mon Code", tu dois commencer à la position 5 (après "Mon "), pas 4.
En cas de doute, sélectionne le texte source et compte manuellement, ou utilise TROUVE pour localiser automatiquement le début du segment à extraire.
Comment trouver automatiquement la position de départ ?
Combine CTXT avec TROUVE ou CHERCHE pour détecter automatiquement où commence le texte que tu cherches. Par exemple, =CTXT(A1; TROUVE("-";A1)+1; 5) extrait 5 caractères après le premier tiret.
Pour le deuxième tiret, utilise TROUVE("-";A1;TROUVE("-";A1)+1) qui cherche le tiret à partir de la position du premier. Cela rend tes formules robustes face aux variations de longueur.
CTXT fonctionne-t-il avec des chiffres ?
Oui, mais Excel traite les nombres comme du texte pour l'extraction. Pour extraire les 3 premiers chiffres de 123456, utilise =CTXT(A1; 1; 3). Le résultat est un texte, pas un nombre.
Si tu as besoin d'un nombre pour des calculs ultérieurs, entoure la formule avec CNUM() : =CNUM(CTXT(A1; 1; 3)).
Pour aller plus loin
Bloqué sur une formule Excel ?
Pose ta question à notre assistant Excel IA, il te sort la bonne formule en quelques secondes.
Essayer l'assistant IAGratuit · 10 questions par mois

