Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :Dernier texte après symbole
Ce nouveau volet est l'occasion de découvrir une technique précieuse, encore
matricielle. Elle offre la possibilité d'
extraire la fin d'une chaîne située après un
caractère remarquable, pourtant répété à plusieurs reprises dans le texte.
L'exemple illustré par la capture est parfaitement dédié. Des
chemins d'accès complets à des
fichiers sont listés dans une première colonne du tableau. D'ailleurs, nous aurions très bien pu construire ce
listing de fichiers automatiquement grâce à PowerQuery. Dans une seconde colonne, grâce à une
formule unique, nous parvenons à extraire seulement les
noms des fichiers qui composent ces chaînes. Cela signifie que nous sommes en mesure de ne conserver que la
portion de texte située après le dernier antislash.
Classeur Excel à télécharger
Pour développer cette
formule matricielle, nous proposons d'appuyer l'étude sur un
classeur offrant des
chemins d'accès à décortiquer.
Nous retrouvons bien le tableau de deux colonnes. La première héberge effectivement des
chemins d'accès avec des
noms de fichiers en bouts de courses. La seconde est naturellement vide à ce stade. Elle attend la
formule d'extraction pour isoler ces
noms de fichiers.
Au-dessus de la seconde colonne, vous notez la présence du caractère remarquable de l'
antislash. Il est plus précisément inscrit en
cellule G3. Nous souhaitons naturellement exploiter cette cellule dans la formule. Ainsi, en fonction de la nature des chaînes qu'il aura à traiter, l'utilisateur pourra changer le
symbole de séparation à détecter pour
isoler ces fragments de textes.
Prélever par la fin
La première astuce de cette
formule matricielle consiste à prélever les caractères en partant de la
fin de la chaîne. Et pour cela, nous devons exploiter la
fonction Excel Droite.
- Sélectionner la case du premier nom de fichier à extraire en cliquant sur sa cellule F6,
- Taper le symbole égal (=) pour débuter la construction de la formule matricielle,
- Inscrire la fonction de découpe par la fin suivie d'une parenthèse, soit : Droite(,
- Désigner le premier chemin d'accès à analyser en cliquant sur sa cellule B6,
- Puis, taper un point-virgule (;) pour passer dans l'argument de la longueur de découpe,
Chercher le dernier symbole
Pour déterminer cette
longueur de découpe en partant de la
fin de la chaîne, nous devons trouver la
position du premier antislash qui est en réalité le dernier, si nous étudions la chaîne en partant des premiers caractères. Et pour le débusquer, nous allons exploiter la
fonction de recherche Equiv.
- Inscrire la fonction de recherche de position suivie d'une parenthèse, soit : Equiv(,
Son premier argument concerne la
valeur cherchée. Cette
valeur cherchée dans la chaîne n'est autre que le
symbole de l'antislash.
En effet, nous répliquerons cette
formule matricielle sur les cellules du dessous. Quand l'analyse doit se déplacer naturellement sur les
chemins d'accès (B6 puis B7 etc...), dans le même temps la cellule du symbole à chercher ne doit pas bouger quant à elle. Nous la figeons donc.
- Taper un point-virgule (;) pour passer dans l'argument du tableau de recherche,
Analyser les caractères individuellement
En guise de
tableau de recherche, nous allons lui fournir une matrice des lettres isolées individuellement, en partant du dernier caractère et en remontant jusqu'au
premier antislash trouvé. C'est ainsi que la
fonction Equiv répondra favorablement pour transmettre la
longueur de découpe à la
fonction droite. Et pour découper une chaîne lettre à lettre, nous avons besoin de la
fonction Stxt.
- Mais cliquer d'abord sur le petit bouton de l'assistant fonction à gauche de la barre de formule,
Il va nous livrer quelques précieuses indications servant à simplifier la compréhension du mécanisme.
- Cliquer dans la zone Tableau_recherche pour l'activer,
- Inscrire la fonction de découpe suivie d'une parenthèse, soit : Stxt(,
- Désigner de nouveau le premier chemin d'accès en cliquant sur sa cellule B6,
- Puis, taper un point-virgule (;) pour passer dans l'argument de la position de départ,
Pour passer chaque lettre en revue en partant de la dernière, nous devons créer une
matrice virtuelle de numéros pour retrancher la position en cours au
nombre total de caractères dans la chaîne. Cette
matrice doit partir du
chiffre 1 et poursuivre sur un nombre assez grand d'occurrences pour être sûr de croiser l'
antislash. Pour créer cette
matrice virtuelle de nombres, nous avons besoin de la
fonction Ligne. Le
nombre total de caractères peut quant à lui être renvoyé par la
fonction NbCar. Le dernier caractère ne sera donc pas analysé (NbCar -1 pour le premier traitement récursif). Nous partons logiquement du principe qu'un délimiteur ne se trouve jamais en dernière position.
- Inscrire la fonction pour le nombre de caractères, suivie d'une parenthèse, soit : NbCar(,
- Désigner de nouveau le premier chemin d'accès en cliquant sur sa cellule B6,
- Fermer alors la parenthèse de la fonction NbCar,
- Taper le symbole moins (-) pour annoncer le retranchement à suivre,
- Construire alors la matrice virtuelle de nombres suivante : Ligne($1:$200),
Les
dollars sont importants pour que ces bornes ne varient pas avec la réplication de la formule. Dans ce
traitement récursif, au
nombre total de caractères, nous allons d'abord retrancher une unité puis deux et ainsi de suite jusqu'à atteindre les deux cents. Nous remontons donc dans les caractères à analyser. Et précisément, nous devons les étudier un à un pour débusquer la présence de l'
antislash. C'est justement ce que nous permet de définir le troisième et dernier argument de la
fonction Stxt. Il concerne la
longueur de découpe.
- Taper un point-virgule (;) pour passer dans l'argument de la longueur de découpe,
- Taper le chiffre 1 pour analyser les caractères individuellement et tour à tour,
- Puis, fermer la parenthèse de la fonction Stxt,
Comme vous pouvez le voir, l'assistant fonction réagit par une matrice en regard de la zone
Tableau_recherche. Nous y trouvons chaque caractère du chemin d'accès en partant de l'avant dernier et en remontant sur 200 positions, tel que nous l'avons défini. C'est ainsi que nous allons finir par croiser le chemin du
dernier antislash.
- Cliquer dans la zone Type de l'assistant fonction pour l'activer,
- Puis, saisir le chiffre 0 pour réaliser une recherche exacte,
Cette fois, l'assistant pour la
fonction Equiv répond par la position trouvée pour l'occurrence de l'
antislash. Rappelons-le, c'est bien sur ce symbole que nous avons engagé la recherche.
Si vous analysez le
premier chemin d'accès, il s'agit effectivement de l'emplacement précis du
dernier antislash.
- Dans la barre de formule, cliquer à la toute fin de la syntaxe,
- Fermer la parenthèse de la fonction Droite,
- Puis, valider la formule matricielle par le raccourci clavier CTRL + MAJ + Entrée,
Comme vous pouvez le voir, le
premier nom de fichier tombe. Il a parfaitement été isolé par le
calcul matriciel.
- Double cliquer sur la poignée du résultat pour répliquer la logique sur la hauteur du tableau,
Nous obtenons tous les noms de fichiers des fins de chaînes, parfaitement isolés dans leurs cellules. Maintenant, vous pouvez tester cette fabuleuse formule matricielle en remplaçant en G3 l'antislash par un tiret (-) ou un point (.).
Dans le premier cas, nous obtenons la chaîne placée après le dernier tiret. Dans le second cas, nous livrons toutes les extensions de chaque fichier. La syntaxe complète de la
formule matricielle que nous avons construite est la suivante :
=DROITE(B6; EQUIV($G$3; STXT(B6; NBCAR(B6)-LIGNE($1:$200); 1); 0))