Extraire extension d'un nom de fichier

  • Initiateur de la discussion Initiateur de la discussion MJ13
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

MJ13

XLDnaute Barbatruc
Bonjour à tous.

Maintennant, on peut avoir avec les documents office 2007, des extensions de 4 lettres.

Connaissez vous une formule pour extraire l'extension d'un nom de fichier:

ex: j'ai NomFIchier.xls ou NomFichier.xlsx en A1. Je voudrais avoir en B1: xls ou xlsx.

Le but serait d'avoir l'extension, quelque soit le nombre de lettres (de 1 à n).

Merci d'avance.
 
Re : Extraire extension d'un nom de fichier

Bonjour Jocelyn, JM.


Jocelyn: Merci pour ta formule. Cela fonctionne bien comme celle de Tibo.

JM: Sur Excel 2007, la fonction ne fonctione pas si j'ai plusieurs points dans le nom.
Sinon pour les formules, je cherche quelque soit l'extension, donc celle de Tibo et Jocelyn me convienent parfaitement.
Mais merci pour ta reflexion.

Bonne soirée 🙂.
 
Re : Extraire extension d'un nom de fichier

Bonsoir MJ16, t'as vu comme tout augmente par ces temps? 🙂

Juste un p'tit truc joint en VBA, si cela te tente...

Coté fonctions "Feuille1 et Feuille2, je suis un peu dur... Hein ??? 😕

Tu regarde et tu m'dis

A quand tu le voudras.

Bonne fin de soirée à toi, aux participants à ce fil,
et à ceux qui passeront par là.

Yann
 

Pièces jointes

Re : Extraire extension d'un nom de fichier

Bonjour Yann, Re à tous

Ah en VBA, c'est bien aussi, j'y avais pas penser 🙄.

Et bien merci beaucoup.

La macro avec InStrRev est assez bluffante.

Ce qui donnerait pour une zone nommée "zone".

Code:
Sub Trouve_Extension_Zone()
'Yann56
POINT = "."
For Each cell In Range("zone")
cell.Offset(0, 1).Value = Right(cell, _
(Len(cell) - InStrRev(cell, POINT, -1)))
Next
End Sub


Bonne journée 🙂.
 
Re : Extraire extension d'un nom de fichier

Bonjour Michel, et à ceux qui passeront par là.

Heureux de voir que cela fonctionne avec office 2007 que je n'ai pas...

Bon pfff 🙁 Je vais bien finir par apprendre ce que veut dire 'Offset"

Bonne fin de journée et fin de fin de semaine à tous.

Yann
 
Re : Extraire extension d'un nom de fichier

Bonsoir à tous


En mixant mon premier code et l'inspiration offerte par le code de YANN-56 😉

Code:
Public Function x_ext(t As Range) As String
Application.Volatile
x_ext = VBA.StrReverse(Split(VBA.StrReverse(t.Text), ".")(0))
End Function
 
Re : Extraire extension d'un nom de fichier

Bonjour JM, Yann, à tous

Yann:

Bon pfff 🙁 Je vais bien finir par apprendre ce que veut dire 'Offset"

Bon offset, c'est pas très compliqué 😛.

Voici l'aide sur XL2007:

expression.Offset(DécalageLigne, DécalageColonne)
expression Variable qui représente un objet Range.


Cet exemple montre comment appliquer un décalage de cellule de trois colonnes vers la droite et de trois lignes vers le bas à la cellule active de la feuille « Sheet1 ».
Visual Basic pour Applications.

Code:
Worksheets("Sheet1").Activate
ActiveCell.[B]Offset[/B](rowOffset:=3, columnOffset:=3).Activate

Cet exemple suppose que la feuille « Sheet1 » contient un tableau doté d'une ligne d'en-tête. L'exemple montre comment sélectionner le tableau sans sélectionner la ligne d'en-tête. La cellule active doit se situer à un endroit quelconque du tableau avant l'exécution de l'exemple

Code:
Set tbl = ActiveCell.CurrentRegiontbl.[B]Offset[/B](1, 0).Resize(tbl.Rows.Count - 1, _
tbl.Columns.Count).Select

JM:
Ta fonction à l'air de fonctionner.
Par contre si je l'utilise avec du VBA, cela risque de me ralentir, ainsi sur 65000 noms de fichiers en mettant ta fonction, cela a fonctionner mais dès que j'ai voulu faire la boucle for each avec le code de Yann, alors, c'était très long).

Donc, en conclusion, on a des solutions en Formules, en fonction et en VBA. Ensuite à utiliser l'une ou l'autre solution en fonction du contexte.

Merci à tous pour votre super participation et Bonne journée 🙂.
 
Re : Extraire extension d'un nom de fichier

Bonjour à ceux qui passeront par là.

Merci Michel pour l'info, et d'en avoir pris le temps.
Cela me permettra de mieux comprendre certains messages.

Pour ma part j'utilise:

Code:
i = 5
With ActiveSheet
.Cells(i, 3).Value = .Cells(i, 1).Value
End With

Mais cela ne doit pas changer grand-chose.

Quant à la lenteur; il me semble plus rapide de remplir
une ListView que d'écrire dans une feuille.

Bonne soirée à toi et à tous

Yann
 
Re : Extraire extension d'un nom de fichier

Bonjour à tous

MJ13
Chez moi c'est très rapide (1 à 2 secondes)
Code:
Public Function x_ext(t As Range) As String
Application.Volatile
x_ext = VBA.StrReverse(Split(VBA.StrReverse(t.Text), ".")(0))
End Function
Code:
Sub test_10000()
Dim c As Range
For Each c In Range("A1:A10000")
If Not IsEmpty(c) Then
c.Offset(, 1).Value = x_ext(c)
End If
Next
End Sub
PS: une astuce pour n'avoir que les fichiers Excel dans ton classeur
En utilisant le bacth suivant
(copier/coller dans bloc-notes, enregistrer sous: nomfichier.bat )
Code:
@dir /B *.x* >$$$$$
@ren $$$$$ fichiersExcel.xls
@del $$$$$
@start fichiersExcel.xls
 
Dernière édition:
Re : Extraire extension d'un nom de fichier

Bonjour JM, à tous

JM: Merci pour ta dernière solution. En effet c'est beaucoup plus rapide car la formule ne reste pas sur la feuille (j'avais mis la formule de la fonction sur les 65000 cellules).

Bien noté que le mix VBA/Fonction est très intéressant 🙄.

Bonne Soirée 🙂.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
32
Affichages
2 K
Retour