Excel 365: Extraire le nom du fichier de son chemin complet par formule
par
, 09/02/2021 à 08h00 (1645 Affichages)
Salut.
Dans un précédent billet, je vous parlais d'une formule "Palindrome" construite avec JOINDRE.TEXTE pour retourner une chaine de caractères. Je vous la rends ici: =JOINDRE.TEXTE("";VRAI;STXT(B1;NBCAR(B1)-LIGNE(INDIRECT("a1:a" & NBCAR(B1)))+1;1)).
En fin de billet, je vous ai un peu laissé sur votre fin puisque la question était: Mais à quoi ça sert? C'est vrai que tester qu'un mot peut se lire de gauche à droite ou de droite à gauche est le cadet de nos soucis, au quotidien.
Examinons maintenant le problème suivant: Comment passer de A à B par formule?
Avant XL365, il fallait "un peu" chipoter et la réponse est tout sauf intuitive => j'en parlerai dans un prochain billet. Avec Excel 365, c'est un peu plus facile.
Raisonnons un peu:
Pour extraire le nom du fichier qui se trouve à la droite de la chaine, on doit prendre les x derniers caractères. Ainsi, pour le premier fichier, on pourrait utiliser =DROITE([@[Nom complet]];13), mais on comprend assez vite que, sauf à n'avoir que des noms de fichiers de 13 caractères, ça ne va que moyennement convenir...
Le pivot, ici, est bien sûr le dernier \ dont il faut trouver la position. On dispose bien des fonctions CHERCHE() et TROUVE(), mais elles renvoient la position de la première occurrence de la sous-chaine cherchée. Ca ne nous aide pas trop puisque l'on ne sait pas combien il y en a et que les noms des dossiers composant le chemin n'ont pas tous des longueurs identiques...
ET SI ON RETOURNAIT LA CHAINE?? => Les derniers seront les premiers => notre dernier \ deviendra le premier et on pourra en trouver sa position P grâce à TROUVE(), permettant de savoir que le nom du fichier compte P-1 caractères. Et donc P-1, c'est le nombre de caractères que l'on devra extraire du chemin complet: =DROITE(Chemin; P-1)... EUREKA, on a la logique de travail. Et comme dit plus haut, on peut retourner la chaine avec la formule exposée plus haut:
=DROITE([@[Nom complet]];TROUVE("\";JOINDRE.TEXTE("";VRAI;STXT([@[Nom complet]];NBCAR([@[Nom complet]])-LIGNE(INDIRECT("a1:a" & NBCAR([@[Nom complet]])))+1;1)))-1)
Excel 365 a vraiment apporté des améliorations très intéressantes, notamment au travers de nouvelles fonctions et des plages dynamiques.
Et si on n'a pas Excel 365 et JOINDRE.TEXTE, on est condamné à devoir passer par une fonction perso en VBA? Mais noooonnnn, je vous montrerai comment réaliser cela dans un prochain billet...