Dossiers, fichiers et extensions
Lorsque vous manipulez des dossiers (répertoires) ou des fichiers, il y a des commandes qui reviennent souvent comme :
- Extraire le nom de fichier à partir d’un chemin complet
- Extraire l’extension (
JPG
,PNG
,DOC
,XLSX
…) d’un fichier à partir de son chemin complet- Extraire le nom du fichier, sans son extension, à partir de son chemin complet
- Extraire le chemin, sans le nom du fichier
Autant en faire des fonctions et ne plus y penser ensuite !
Le code
Recopiez le code ci-dessous dans un module standard (vous pouvez appeler ce module mod Fichiers, par exemple ; ce que j’en dis… :)).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
' --- ' EXTRACTION D'UN NOM DE FICHIER SANS SON EXTENSION ' --- ' Entrée : strPath : Chemin d'un fichier ' Ex. : test.jpg ' C:\un\chemin\quelconque\test.jpg ' Sortie : Nom du fichier sans son extension (ex. : test). ' Function FilenameWithoutExt( _ ByVal strPath As String) Dim intI As Integer ' Extraire uniquement le nom de fichier ' (au cas où on aurait transmis un chemin complet) strPath = Filename(strPath) intI = InStrRev(strPath, ".", -1, vbTextCompare) If intI = 0 Then FilenameWithoutExt = strPath Else FilenameWithoutExt = Left(strPath, intI - 1) End If End Function ' --- ' EXTRACTION D'UN NOM DE FICHIER AVEC SON EXTENSION ' --- ' Entrée : strPath : Chemin d'un fichier ' Ex. : test.jpg ' C:\un\chemin\quelconque\test.jpg ' Sortie : Nom du fichier avec son extension (ex. : test.jpg). ' Function Filename(ByVal strPath As String) As String ' Trouver le dernier backslash, s'il y en a un... Dim intI As Integer intI = InStrRev(strPath, "\", -1, vbTextCompare) ' Renvoyer la partie après le backslash Filename = IIf(intI = 0, strPath, Mid(strPath, intI + 1)) End Function ' --- ' EXTRACTION DE L'EXTENSION D'UN FICHIER ' --- ' Entrée : strPath : Chemin d'un fichier ' Ex. : test.jpg ' C:\un\chemin\quelconque\test.jpg ' Sortie : Extension du fichier (ex. : jpg). ' Function FileExt(ByVal strPath As String) As String ' Ne conserver que le nom de fichier strPath = Filename(strPath) ' Trouver le dernier point Dim intI As Integer intI = InStrRev(strPath, ".", -1, vbTextCompare) FileExt = IIf(intI = 0, "", Mid(strPath, intI + 1)) End Function ' --- ' EXTRACTION D'UN CHEMIN ' --- ' Entrée : strPath : Chemin d'un fichier ' Ex. : test.jpg ' C:\un\chemin\quelconque\test.jpg ' Sortie : Chemin du fichier (ex. : C:\un\chemin\quelconque). ' Function FilePath(ByVal strPath As String) As String ' Trouver le dernier Dim intI As Integer intI = InStrRev(strPath, "\", -1, vbTextCompare) ' Valeur de retour FilePath = IIf(intI = 0, strPath, Left(strPath, intI)) End Function |
Mode d’emploi
Le code ci-dessus crée 4 fonctions VBA :
- La fonction
Filename()
Cette fonction reçoit un chemin complet en entrée (ex. :C:\Users\Hervé\Pictures\photo.jpg
), et fournit le nom du fichier (avec son extension) en sortie, soit :photo.jpg
. - La fonction
FilenameWithoutExt()
Cette fonction reçoit un chemin complet en entrée (ex. :C:\Users\Hervé\Pictures\photo.jpg
), et fournit le nom du fichier (cette fois sans son extension) en sortie, soit :photo
. - La fonction
FileExt()
Cette fonction reçoit un chemin complet en entrée (ex. :C:\Users\Hervé\Pictures\photo.jpg
), et fournit uniquement l’extension en sortie, soit :jpg
. - La fonction
FilePath()
Cette fonction reçoit un chemin complet en entrée (ex. :C:\Users\Hervé\Pictures\photo.jpg
), et fournit uniquement le chemin (sans le nom du fichier) en sortie, soit :C:\Users\Hervé\Pictures
.
Exemple
Voici un petit programme qui ne sert qu’à tester les fonctions du dessus. Vous pouvez le recopier dans le même module, ou dans un module différent, au choix.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
' --- ' TEST DES FONCTIONS DE FICHIERS ' --- ' Sub TestFonctionsDeFichiers() Dim strChemin1 As String Dim strChemin2 As String Dim strChemin3 As String strChemin1 = "C:\Users\Hervé\Pictures\photo.jpg" strChemin2 = "mon_cv.pdf" strChemin3 = "C:\Users\Hervé\Music" Debug.Print "NOM DE FICHIER" Debug.Print Filename(strChemin1) Debug.Print Filename(strChemin2) Debug.Print Filename(strChemin3) Debug.Print Debug.Print "NOM DE FICHIER SANS EXTENSION" Debug.Print FilenameWithoutExt(strChemin1) Debug.Print FilenameWithoutExt(strChemin2) Debug.Print FilenameWithoutExt(strChemin3) Debug.Print Debug.Print "EXTENSION SEULEMENT" Debug.Print FileExt(strChemin1) Debug.Print FileExt(strChemin2) Debug.Print FileExt(strChemin3) Debug.Print Debug.Print "CHEMIN SEULEMENT" Debug.Print FilePath(strChemin1) Debug.Print FilePath(strChemin2) Debug.Print FilePath(strChemin3) End Sub |
Et le résultat, dans la fenêtre Exécution (CTRL
+ G
) :
C:\Users\Pictures
.InStrRev()
. Cette fonction n’existe pas sous Access 97. Si vous avez cette version, vous devez écrire par vous-même un équivalent de la fonction InStrRev()
.
Bonsoir,
le plugin Crayon Syntax Highlighter semble ignorer le ‘\’ dans le code lignes 37 et 72 .
Merci pour avoir partagé ces excellents modules.
Merci pour le retour, c’est corrigé en principe.
En fait, à la base, il s’agit d’un problème qui s’est produit par endroits lors de la migration récente… mais après correction, c’est bien Crayon qui colorie de travers… 😉 A priori, le code devrait être bon, par contre !
Salut,
essayez SyntaxHighlighter Evolved plugin.
Merci.
Merci pour la piste, je testerai dès j’ai un moment (mais le plugin m’a l’air moins riche fonctionnellement ; à tester en tout cas).