DEVROË-ROY Paul-André

Miscellanées & analectes

Changement noms d'une photo - Macro EXCEL

Cette macro en VBA (Visual Basic) permet d'attribuer à une photo un nom selon l'organisation AAAAMMJJ_HHMMSS.jpg

Exemple : 20130818_101722.jpg pour une photo du 18 Août 2018 à 10H 17MN 22S

Sub ChangeNomPhotos()
    Dim objFolder
    Dim objFile As File
    Dim TabFiles()
    Dim drv As Drive
    Dim strPath As String
    Dim LeNomOld As String
    Dim LeNomNew As String
    Dim TempoTxt As String
    Dim i As Integer
    Dim NbFiles As Integer
    Dim NameChanged As Boolean
    
On Error GoTo Erreur
' Specify the path of the folder
    strPath = InputBox("Mettre un \ en fin de Répertoire" & Chr(10) & Chr(13) & Chr(10) & Chr(10) & "Répertoire de travail : ")
    If strPath = "" Or Not Right$(strPath, 1) = "\" Then
        Exit Sub
    End If
'Create the object of this folder
    Set objFolder = FSO.GetFolder(strPath)
    NbFiles = objFolder.Files.Count
    ReDim TabFiles(NbFiles - 1)
    i = 0
    For Each objFile In objFolder.Files
        Set TabFiles(i) = objFile
        i = i + 1
    Next objFile
    NameChanged = False
    For i = 0 To NbFiles - 1
'    For Each objFile In objFolder.Files
        LeNomOld = TabFiles(i).Name
        Cells(1, 7) = LeNomOld
' Recherche de l'extension ".jpg"
        If StrComp(FSO.GetExtensionName(TabFiles(i)), "jpg") = 0 Then
' On change le Nom
            LeNomNew = ConvertiNomPhoto(TabFiles(i).DateLastModified)
' On identifie le changement de nom
            NameChanged = True
        ElseIf StrComp(FSO.GetExtensionName(TabFiles(i)), "JPG") = 0 Then
' On change le Nom
            LeNomNew = ConvertiNomPhoto(TabFiles(i).DateLastModified)
' On identifie le changement de nom
            NameChanged = True
        End If
' Si il y a eu changement de nom
        If NameChanged = True Then
' Si les noms sont différents
            If Not StrComp(LeNomOld, LeNomNew) = 0 Then
' On copy le fichier avec le nouveau nom
                TabFiles(i).Copy strPath & LeNomNew
' On efface le ficher avec l'ancien nom
                TabFiles(i).Delete True
                NameChanged = False
            Else
' Ici la Noms sont identiques
                MsgBox LeNomOld, vbCritical, "Fichier existe déjà"
                NameChanged = False
            End If
        End If
'    Next objFile
    Next i
    Exit Sub
Erreur:
    MsgBox (Err.Description)

End Sub

Function ConvertiNomPhoto(LeNom As String) As String
    Dim Année As String
    Dim Mois As String
    Dim Jour As String
    Dim Heure As String
    Dim Minute As String
    Dim Seconde As String
    
    Année = Mid$(LeNom, 7, 4)
    Mois = Mid$(LeNom, 4, 2)
    Jour = Left$(LeNom, 2)
    Heure = Mid$(LeNom, 12, 2)
    Minute = Mid$(LeNom, 15, 2)
    Seconde = Right$(LeNom, 2)
    ConvertiNomPhoto = Année & Mois & Jour & "_" & Heure & Minute & Seconde & ".jpg"
End Function