Récupérer une chaine de caractères - formules

Salut le forum,

Petite précision: pas de VBA si possible (et je sais que c'est possible, Amadeus avait trouvé une formule mais je n'arrive plus à mettre la main dessus...)

j'ai importé sous excel via une macro des noms de fichiers du type:

C:\Documents and Settings\FR018661\Desktop\dossier\2008_clients1.xls

Cependant, le nom du client est plus ou moins long et n'a jamais de la même taille.

comment par formule, récupérer le nom du fichier après le dernier \ et sans le ".xls".

Par exemple, ici, juste récupérer 2008_clients1

J'espère que quelqu'un a récupéré cette formule Amadeussienne qui me serait grandement utile....

Souri84

Bonjour,

A tout hasard et sans tester, une fonction CELLULE reverrai le chemin complet du fichier.

Il faudrait ensuite jongler avec une fonction STXT, incluant une fonction CHERCHE.

A +

EDIT :

ça devrait donner un truc dans ce goût là :

=STXT(CELLULE("nomfichier");CHERCHE("dossier";CELLULE("nomfichier"))+8;
CHERCHE(".xls";CELLULE("nomfichier"))-CHERCHE("dossier";CELLULE("nomfichier"))-8)

Post édité pour insérer un retour à la ligne dans le code afin de ne pas déformer le forum...

j'ai cherché sur d'autres forums, j'ai trouvé une formule que je n'arrive pas à appliquer...

je vais partir de cela déjà mais n'hésitez pas si vous retrouvez cette formule....

Bonjour,

Si le départ est toujours le même, c'est à dire :

C:\Documents and Settings\FR018661\Desktop\dossier\

tu peux utiliser la formule :

=STXT(A1;52;99)

qui récupère jusqu'à 99 lettres après les 52 premières

Amicalement

Nad

Toutes mes excuses, la formule que je t'ai donné précédemment récupère le nom du classeur à partir de l'emplacement du classeur.

Si tu as déjà récupéré ceci, en m'inspirant du travail de Nad-Dan, et pour supprimer également l'extension du fichier, prélever quelque soit le chemin, et pourvu que le nom récupéré commence par 20, il suffit de :

=STXT(A1;CHERCHE("20";A1);NBCAR(A1)-CHERCHE("20";A1)-4)

A +

Re,

Merci pour vos réponses, je suis toujours dessus là, je bloque.... mais je réfléchis...

En attendant, je l'ai fait en plusieurs étapes pour avancer dans le projet.

Par contre, pour répondre à Nad, non, le chemin est identique pour tous les fichiers mais il peut différer sur chacun des ordis....

Par exemple, sur mon ordi, ce peut être:

C:\Documents and Settings\FR018661\Desktop\dossier\2008_clients1.xls

Mais sur un autre ordi, ce peut être:

C:\Documents and Settings\FR018661\Desktop\dossier\dossier1\dossier2\2008_clients1.xls

C'est pourquoi, il faut que je récupère le nom du fichier à partir du dernier \

Merci en tout cas pour votre aide,

Souri84

Apparemment, cette formule a l'air de résister :

=STXT(SUBSTITUE(D17;"\";"@";NBCAR(D17)-NBCAR(SUBSTITUE(D17;"\";"")));
CHERCHE("@";SUBSTITUE(D17;"\";"@";NBCAR(D17)-NBCAR(SUBSTITUE(D17;"\";""))))+1;
NBCAR(D17)-CHERCHE("@";SUBSTITUE(D17;"\";"@";NBCAR(D17)-NBCAR(SUBSTITUE(D17;"\";""))))-5)

Attention, pour l'affichage sur le forum, j'ai mis 2 retour de ligne dans la formule.

A +

EDIT : je n'ai pas précisé, mais c'est donc pour un texte en D17, hein

YES !!!!!!!!!

Merci Bélug.... c génial, ça marche ! j'ai juste remplacé le -5 par -4 et c nickel

Merci !

Souri84

Je rends à MichelXld ce qui est à MichelXld :

MichelXld a écrit :

Compter le nombre de "a" dans la cellule A1 (Les A majuscules ne sont pas comptés)

=NBCAR(A1)-NBCAR(SUBSTITUE(A1;"a";""))

Donc à la place du "a", je cherche ""

Si je prends ce texte en exemple :

C:\Documents and Settings\FR018661\Desktop\dossier\dossier1\dossier2\2008_clients1.xls

a) la formule

=NBCAR(D17)-NBCAR(SUBSTITUE(D17;"";"")) 

renvoie 7 (il y a 7 "")

b) Ensuite, je substitue le dernier "" par un "@" :

  • rappel sur la fonction SUBSTITUE(texte;Texte_cherché;Nouveau_texte;Occurence)
    Texte : notre texte en D17
    Texte cherché : c'est un ""
    Nouveau_texte : c'est notre "@"
    Occurrence : c'est que l'on vient de trouver, le 7ème "", l'occurrence est donc notre formule de l'étape a) =NBCAR(D17)-NBCAR(SUBSTITUE(D17;"";""))

donc avec la formule

=SUBSTITUE(D17;"";"@";NBCAR(D17)-NBCAR(SUBSTITUE(D17;"";"")))

on obtient le texte :

C:\Documents and settings\FR018661\Desktop\dossier\dossier1\dossier2@2008_clients1.xls

c) maintenant que le caractère précédent le nom que l'on veut récupérer est facilement identifiable, il suffit d'une fonction STXT

  • rappel sur STXT(Texte;Début;Nombre)
    Texte : c'est notre texte avec l'@, donc la formule en étape b) SUBSTITUE(D17;"";"@";NBCAR(D17)-NBCAR(SUBSTITUE(D17;"";"")))
    Début : on va chercher le @ (on s'est donné assez de mal pour l'avoir )avec la fonction éponyme dans la formule précédente :

    (ne pas oublier le +1 pour ne pas extraire le "@")
    Nombre : (là je vais changer le -5 de place pour te perturber) c'est la longueur du texte d'obtenu (sinon il ne trouvera pas le @) - 5 (pour ne pas compter l'extension5) - la position de notre "@" (qui est donc la même formule que l'argument Début de STXT)

ce qui donne pour nombre de caractère prélevés la formule suivante :

(NBCAR(SUBSTITUE(D17;"";"@";NBCAR(D17)-NBCAR(SUBSTITUE(D17;"";""))))-5)-
CHERCHE("@";SUBSTITUE(D17;"";"@";NBCAR(D17)-NBCAR(SUBSTITUE(D17;"";""))))

Et pour formule totale :

=STXT(SUBSTITUE(D17;"";"@";NBCAR(D17)-NBCAR(SUBSTITUE(D17;"";"")));
CHERCHE("@";SUBSTITUE(D17;"";"@";NBCAR(D17)-NBCAR(SUBSTITUE(D17;"";""))))+1;
(NBCAR(SUBSTITUE(D17;"";"@";NBCAR(D17)-NBCAR(SUBSTITUE(D17;"";""))))-5)
-CHERCHE("@";SUBSTITUE(D17;"";"@";NBCAR(D17)-NBCAR(SUBSTITUE(D17;"";"")))))

A +

EDIT : c'est surtout pour ceux qui veulent les explications, je me doute que tu es chevronné et que tu as décortiqué

merci pour l'explication....

Rechercher des sujets similaires à "recuperer chaine caracteres formules"