extraire Durée fichier mp3

Patience

XLDnaute Nouveau
Bonjour à tous,

Je suis nouvelle sur le forum, j'ai quelques notion d'excel et suis débutante en VBA.
Mon pb: J'ai des fichiers mp3 sur un clé USB (G:\);
J'ai réussi à bidouiller différents morceaux de code pour les lister (sans lister les sous-dossiers ce qui est tout à fait ce que je souhaite), en extraire le nom et la date de création. je voudrais également avoir la durée mais je bloque.
J'ai cherché et tester différentes macros mais je ne m'en sors pas.
Je fais un post en désespoir de cause.
Je bloque au niveau de la ligne en violet et ne sais pas quoi mettre pour récupérer la durée du fichier mp3
En espérant que vous pourrez m'aider.

voici mon code :
Sub ScanClasseurs()
Dim Dossier As Object, Fichier As Object
Dim Chemin As String, CeFichier As String, ExtFichier As String
Dim TabDossiers As Variant
Dim L As Long, D As Long
Chemin = "G:\"
If Chemin = "" Then Exit Sub
Application.ScreenUpdating = False
ThisWorkbook.Sheets("Test").Range("A2:B65536").Delete Shift:=xlUp
CeFichier = ThisWorkbook.Name
ExtFichier = UCase(Trim(ThisWorkbook.Sheets("Test").Range("Extension").Text))
L = 1
'Création du tableau des sous-dossiers existants
TabDossiers = lstDossiers(Chemin, True)
'Chemin du dossier (ou sous-dossier) à analyser
Chemin = "G:\"
If Right(Chemin, 1) <> "\" Then Chemin = Chemin & "\"
'Analyse du dossier (ou sous-dossier)
Set Dossier = CreateObject("Scripting.FileSystemObject").GetFolder(Chemin)
For Each Fichier In Dossier.Files
If Fichier.Name <> CeFichier Then
If ExtFichier = "" Or UCase(Right(Fichier.Name, 3)) = ExtFichier Then
'Liste les fichiers
L = L + 1
'MAJ feuille résultats
With ThisWorkbook.Sheets("Test")
.Cells(L, 1).Value = Fichier.Name
.Cells(L, 2).Value = Fichier.DateCreated
.Cells(L, 3).Value = Fichier.????????
End With
End If
End If
Next
Set Dossier = Nothing
'Rétablit l'alerte de lien éventuelle dans les options Excel
Application.ScreenUpdating = True

End Sub

Private Function lstDossiers(Chemin As String, Optional Debut As Boolean) As Variant
Dim Dossier As Object, SD As Object, D As Object
Static TabTemp() As String
If Debut Then
ReDim TabTemp(1 To 1)
TabTemp(1) = Chemin
End If
Set Dossier = CreateObject("Scripting.FileSystemObject").GetFolder(Chemin)
'examen du dossier courant
For Each D In Dossier.subfolders
ReDim Preserve TabTemp(1 To UBound(TabTemp) + 1)
TabTemp(UBound(TabTemp)) = D.Path
Next

End Function
 

Patience

XLDnaute Nouveau
Re : extraire Durée fichier mp3

Bonjour phlaurent55,

Avant d'embêter avec mes questions, j'ai fais des recherches sur le forum et j'ai testé le code dont vous donnez le lien.
Malheureusement, chez moi, ca donne une erreur : erreur de compilation : Membre de méthode ou de données introuvables à la li 115, Col 41 et ca souligne en bleu le "items" dans la phrase For Each strFileName In objFolder.Items

et je suis bien trop débutante pour voir d'où ca peut venir.

Mais merci de votre réponse rapide.
Bonne journée
 
Dernière édition:

mromain

XLDnaute Barbatruc
Re : extraire Durée fichier mp3

Bonjour Patience, Philippe, le forum,

Voici un code à placer dans un module :
VB:
Option Explicit
Public Enum FilePropType
Name = 0
Size = 1
FileType = 2
DateModified = 3
DateCreated = 4
DateAccessed = 5
Attributes = 6
Status = 7
Owner = 8
Author = 9
Title = 10
Subject = 11
Category = 12
Pages = 13
Comments = 14
Copyright = 15
Artist = 16
AlbumTitle = 17
Year = 18
TrackNumber = 19
Genre = 20
Duration = 21
BitRate = 22
Protected = 23
CameraModel = 24
DatePictureTaken = 25
Dimensions = 26
Company = 30
Description = 31
FileVersion = 32
ProductName = 33
ProductVersion = 34
End Enum

Public Function GetFileProperty(filePath As String, idx As FilePropType) As String
Dim objFolder As Object, theFile As Object
Set theFile = CreateObject("Scripting.FileSystemObject").GetFile(filePath)
Set objFolder = CreateObject("Shell.Application").Namespace(CStr(theFile.ParentFolder))
GetFileProperty = objFolder.GetDetailsOf(objFolder.ParseName(theFile.Name), idx)
Set objFolder = Nothing: Set theFile = Nothing
End Function

Ensuite, il faut l'utiliser comme ça :
VB:
laDuree = GetFileProperty("C:\MaMusique.mp3",Duration)


La fonction renvoit un string du type "00:04:19".
A+
 

Patience

XLDnaute Nouveau
Re : extraire Durée fichier mp3

Bonjour mromain,

et merci de votre réponse,

j'ai mis donc ce que vous m'avez donné dans un module.

et dans le code que j'avais déjà, j'ai changé et mis (cf police violette), sachant que les mp3 se trouvent à la racine de ma clé USB, en espérant avoir bien suivi vos indications :

Option Explicit

Sub ScanClasseurs()
Dim Dossier As Object, Fichier As Object
Dim Chemin As String, CeFichier As String, ExtFichier As String
Dim TabDossiers As Variant
Dim L As Long, D As Long
Chemin = "G:\"
If Chemin = "" Then Exit Sub
Application.ScreenUpdating = False
ThisWorkbook.Sheets("Test").Range("A2:B65536").Delete Shift:=xlUp
CeFichier = ThisWorkbook.Name
ExtFichier = UCase(Trim(ThisWorkbook.Sheets("Test").Range("Extension").Text))
L = 1
'Création du tableau des sous-dossiers existants
TabDossiers = lstDossiers(Chemin, True)
'Chemin du dossier (ou sous-dossier) à analyser
Chemin = "G:\"
If Right(Chemin, 1) <> "\" Then Chemin = Chemin & "\"
'Analyse du dossier (ou sous-dossier)
Set Dossier = CreateObject("Scripting.FileSystemObject").GetFolder(Chemin)
For Each Fichier In Dossier.Files
If Fichier.Name <> CeFichier Then
If ExtFichier = "" Or UCase(Right(Fichier.Name, 3)) = ExtFichier Then
'Liste les fichiers
L = L + 1
'MAJ feuille résultats
With ThisWorkbook.Sheets("Test")
.Cells(L, 1).Value = Fichier.Name
.Cells(L, 2).Value = Fichier.DateCreated
.Cells(L, 3).Value = GetFileProperty("G:\.mp3", Duration)

End With
End If
End If
Next
Set Dossier = Nothing
'Rétablit l'alerte de lien éventuelle dans les options Excel
Application.ScreenUpdating = True

End Sub

Private Function lstDossiers(Chemin As String, Optional Debut As Boolean) As Variant
Dim Dossier As Object, SD As Object, D As Object
Static TabTemp() As String
If Debut Then
ReDim TabTemp(1 To 1)
TabTemp(1) = Chemin
End If
Set Dossier = CreateObject("Scripting.FileSystemObject").GetFolder(Chemin)
'examen du dossier courant
For Each D In Dossier.subfolders
ReDim Preserve TabTemp(1 To UBound(TabTemp) + 1)
TabTemp(UBound(TabTemp)) = D.Path
Next

End Function


Maleureusement, ca ne convient pas à Excel. Lorsque j'execute la macro, il bloque, met un message : "Erreur d'exécution '53' : fichier introuvable et surligne en jaune (position Li 10, Col 1) dans le module où j'ai copié ce que vous m'avez donné
Set theFile = CreateObject("Scripting.FileSystemObject").GetFile(filePath)

Qu'est ce que j'ai mal fait ?

Je joins le fichier si ca peut aider.

Je précise que pour que la macro ne me liste que les mp3, je dois remplir une case dans la feuille test, sinon, il liste tous les types de fichiers.

encore merci de votre temps...
 

Pièces jointes

  • fichier mp3.xls
    145.5 KB · Affichages: 76
Dernière édition:

MJ13

XLDnaute Barbatruc
Re : extraire Durée fichier mp3

Bonjour à tous

J'avais trouvé sur le net un code comme celui de Mickaël :).


Voici un fichier à tester (OK sur XL2007).
 

Pièces jointes

  • Liste_Fichier_MP3_Dossier_Renomme_MJ.xls
    63 KB · Affichages: 188

Patience

XLDnaute Nouveau
Re : extraire Durée fichier mp3

Bonjour Michel,

Ce fichier marche effectivement parfaitement. Merci beaucoup.

Je vais essayer de voir si je peux l'intégrer à ma macro déjà existante car j'aurais aimé pouvoir extraire d'un coup pour les fichiers mp3 présents sur la racine de ma clé USB leur nom, leur date de création et leur durée afin de pouvoir des trier du plus ancien au plus récent et les copier ensuite à la suite d'une liste déjà existante mais je crois qu'il ne faut pas trop en demander :p.

En tout cas, merci beaucoup !

et bon week-end à tous.
 

MJ13

XLDnaute Barbatruc
Re : extraire Durée fichier mp3

Bonjour Patience

En tout cas, merci beaucoup !

Mais de rien, cela faisant longtemps que je cherchais ce code :).

leur date de création et leur durée afin de pouvoir des trier du plus ancien au plus récent

Normalement en modifiant ce code, en ajoutant la boucle For..Next, tu devrais y arriver.

Code:
Cells(cell.Row, 2) = objFolder.GetDetailsOf(strFileName, 27)
 For j = 1 To 5
 Cells(cell.Row, j + 2) = objFolder.GetDetailsOf(strFileName, j)
 Next
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 472
Messages
2 088 709
Membres
103 928
dernier inscrit
MIKETUAU