Générer un nom de fichier avec numéro
Ok, le titre de ce billet est complètement nébuleux ! En clair : vous disposez du chemin complet d’un fichier (par exemple :
C:\un\chemin\quelconque\test.jpg
), et vous souhaitez le transformer enC:\un\chemin\quelconque\test-00001.jpg
si un fichiertest.jpg
existe déjà à cet emplacement.
Quelques pré-requis
Le code qui va suivre utilise lui-même d’autres portions de VBA publiées sur ce blog, portions que vous devez aussi intégrer à votre base de données. Reportez-vous à ces articles :
Le code
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 |
' --- ' INCREMENTATION BASIQUE D'UN NOM DE FICHIER ' --- ' Entrée : Chemin complet ' Ex. : C:uncheminquelconquetest.jpg ' Sortie : Chemin incrémenté, si un fichier existe déjà à cet emplacement. ' Ex. : C:uncheminquelconquetest-00001.jpg Function FilenameInc(ByVal strFile As String) As String Dim strFileTemp As String Dim intI As Integer ' Si le fichier n'existe pas, on conserve son ' nom d'origine If Dir(strFile) = "" Then FilenameInc = strFile Exit Function End If ' Créer un nouveau nom de fichier numéroté, ' en vérifiant qu'il n'existe pas déjà intI = 1 strFileTemp = strFile While Dir(strFileTemp) <> "" strFileTemp = StringFormat("{0}{1}-{2}.{3}", _ FilePath(strFile), _ FilenameWithoutExt(strFile), _ Format(intI, "00000"), _ FileExt(strFile)) intI = intI + 1 Wend ' Valeur de retour FilenameInc = strFileTemp End Function |
Exemple
Pour tester ce bout de code :
- Ouvrez la fenêtre Exécution (
CTRL
+G
). - Tapez-y quelque chose comme :
? FilenameInc("C:\un\chemin\quelconque\test.jpg")
Si aucun fichier test.jpg
, n’existe à cet emplacement, le résultat affiché sera :
C:\un\chemin\quelconque\test.jpg
Dans le cas contraire, le chemin sera :
C:\un\chemin\quelconque\test-00001.jpg
Et si un fichier test-00001.jpg
existe aussi, le chemin proposé sera :
C:\un\chemin\quelconque\test-00002.jpg
Bien sûr, ce code n’a aucun intérêt s’il est utilisé tout seul. La fonction FilenameInc()
ne renomme pas de fichier, elle ne fait que proposer le prochain « nom numéroté » disponible. Elle sera utilisée dans d’autres articles à venir.