Récupérartion des durées de musique sur fichier MP3, WAV et WMA

GClaire

XLDnaute Occasionnel
Supporter XLD
Salut tout le monde.

Tout d'abord merci a tout ceux qui se sont penché sur mon probleme du a la migration vers EXCEL 2007.

Ce post étant je pense résolu, par la modification de mon code par un internaute (Que je remercie beaucoup).

Donc voici ma seconde demande :

Dans l'importation de mes données dans ma feuille Tool_Planning, j'ai une colonne dédié aux temps des musiques.

Jusqu'a présent étant donné que je faisait moi même les montages audio, je finalisé tous mes projets audio en WAVE.

Maintenant les profs, fond leur montage audio avec leur moyen, et me donne en généralité de tous suivant le sprofs, donc je peux avoir du MP3, du Wave et pire du WMA.

Le code que j'utilisé jusqu'a maintenant fonctionné juste pour le Wave, et était calculé sur le poids du fichier.

Maintenant j'aimerais avoir la possibilité de faire l'import des ces durées dans ma feuille Tool_Planning et tenant compte qu'il peu y avoir ces 3 extensions.

Voici le code complet (Comprens celuyi modifié car je pense que l'on peu en avoir besoin) :

Code:
'Déclaration des variables dans le haut du module
Option Explicit
Dim Tblo()
Dim A As Long
'----------------------------------------
Sub Liste_Des_Fichiers()
Dim X
Dim Répertoire As String
Répertoire = "O:\Spectacle années en cours"
A = 0
Répertoire = ChoixDossierFichier(Répertoire) & "\"
If Répertoire <> "\" Then
    Call Contenu_Répertoire(Répertoire)
    Call FoldersInFolder(Répertoire)
    Call Traitement
    Else
    Exit Sub
End If
End Sub
'----------------------------------------

Sub FoldersInFolder(myFolderName As String)

Dim FSO As Object
Dim myBaseFolder As Object
Dim myFolder As Object

Set FSO = CreateObject("scripting.filesystemobject")
Set myBaseFolder = FSO.GetFolder(myFolderName)
For Each myFolder In myBaseFolder.SubFolders
    Call Contenu_Répertoire(myFolder.Path & "\")
    Call FoldersInFolder(myFolder.Path)
Next myFolder

End Sub
'----------------------------------------
Sub Contenu_Répertoire(Chemin As String)
Dim Fichier As String
Fichier = Dir(Chemin & "*.wav")
    Do While Fichier <> ""
        A = A + 1
        ReDim Preserve Tblo(A)
        Tblo(A) = Chemin & Fichier
        Fichier = Dir()
    Loop
End Sub
'----------------------------------------
Function ChoixDossierFichier$(Optional ByVal Racine)
Dim objShell, objFile, Chemin, SecuriteSlash, FlagChoix&, Msg$

  If IsMissing(Racine) Then Racine = "c:\"
  Msg = "Choisissez le fichier à ouvrir :"
  Set objShell = CreateObject("Shell.Application")
  Set objFile = objShell.BrowseForFolder(&H0&, Msg, &H4000, Racine)
  On Error Resume Next
  Chemin = objFile.ParentFolder.ParseName(objFile.Title).Path & ""
  ChoixDossierFichier = Chemin
End Function

'----------------------------------------
Sub Traitement()
 Dim Txt As String, i As Long, Fil As String
 Dim Tablo1, Tablo2, Organisateurs As String
 Dim Annee As String, A As String, B As String
 Dim C As String, D As String, e As String, F As String
 Dim G, f1, Ligne As Long, Choix      ', fso, dossier

For i = 1 To UBound(Tblo)
    Fil = Tblo(i)
    Tablo1 = Split(Fil, "\")
    Tablo2 = Split(Tablo1(UBound(Tablo1)), "-")
        If UBound(Tablo1) = 6 And _
            UBound(Tablo2) = 3 And _
            InStr(1, UCase(Fil), UCase(Txt)) > 0 Then
            'Organisateurs
            Organisateurs = Tablo1(2)
            'Année
            Annee = Tablo1(1)
            Annee = Right(Annee, 4)
'A : N° de la partie -> (Donnée récupérée par rapport au dossier)
      A = Tablo1(4)
      A = Application.Substitute(A, "Partie ", "")
'B : N° du ballet -> (Donnée récupérée avec le nom du fichier)
      B = Tablo2(0)
'C : Nom du prof -> (Données récupérées par rapport au dossier)
      C = Tablo1(5)
'D : Groupe d 'élève -> (Données récupérées avec le nom du fichier)
      D = Tablo2(1)
'E : Interprètes -> (Données récupérées avec le nom du fichier)
      e = Tablo2(3)
      e = Left(e, Len(e) - 4)
'F : Titres -> (Données récupérées avec le nom du fichier)
      F = Tablo2(2)
'G : La durée de la chanson --> (Données récupérées avec le poids du fichier)
      '(39934/176400)1024=232 sec soit 3'52 sec
      G = FileLen(Fil)
      G = G / 176400 / 60 / 60 / 24
'NUMEROTATION DES FICHIERS
With Sheets("Tool_Planning")
        Application.ScreenUpdating = False
        .Range("C4") = Organisateurs
        Ligne = .Cells(.Cells.Rows.Count, 1).End(xlUp).Row + 1
        .Cells(Ligne, "A") = A
        '.Cells(Ligne, "A").NumberFormat = "00"
        .Cells(Ligne, "B") = B
        '.Cells(Ligne, "B").NumberFormat = "00"
        .Cells(Ligne, "C") = C
        .Cells(Ligne, "D") = D
        .Cells(Ligne, "E") = e
        .Cells(Ligne, "F") = F
        .Cells(Ligne, "G") = G
        .Cells(Ligne, "G").NumberFormat = "mm:ss"
            If Range("A14").Value = 0 Then Exit Sub
                Call Trie_Planning
End With
End If
Next i
End Sub
'----------------------------------------

Un code m'a été proposé par JPN, dans l'autre post et j'ai bien essayé de l'utilisé.

Code:
Sub Durée()
Set myShell = CreateObject("Shell.Application")
Set myFolder = myShell.Namespace("Chemin du dossier")
Set myFile = myFolder.Items.Item("Nom du fichier")
MsgBox myFolder.GetDetailsOf(myFile, 21)
End Sub

J'ai tenté de remplacer tous les chemins, déclaration de variable, etc... afin de le remettre dans les codes que j'ai, mais a chaque fois il me manque quelque chose.




Serait il possible d'avoir un bon coup de main.

Je vous remercie par avance, G'Claire
 

GClaire

XLDnaute Occasionnel
Supporter XLD
Re : Récupérartion des durées de musique sur fichier MP3, WAV et WMA

Re

Donc je viens d'y insérer le code pour les MP3, le test que j'ai fait avec 3 fichiers, donc :

1) a priori il vois bien les 3 fichier car il m'affiche 3 fois la fenê, mais cela m'affiche toujours 0 millisecondes..

2) Cela m'envois bien 00:00 dans la feuille "Tool_Planning"


J'essaye encore de regarder, salutations, G'Claire
 
Dernière édition:

GClaire

XLDnaute Occasionnel
Supporter XLD
Re : Récupérartion des durées de musique sur fichier MP3, WAV et WMA

Bonsoir.

Voici ce que j'ai fait :

Code:
'Récupération des infos MP3
Dim s As String * 255
Dim X As Long
'Dim ShortName As String * 255

''ouvrir la session
'ShortName = FileLen(Fil)
X = mciSendString("open " & FileLen(Fil) & " type MPEGVideo alias Voix1", 0&, 0, 0)

''reuperer les infos
X = mciSendString("status voix1 length", s, 255, 0)
MsgBox Val(s) & " millisecondes"
G = Val(s)

''fermer la session
X = mciSendString("close voix1", 0&, 0, 0)
'Fin de réupération des infos MP3


G est ma variable de remplissage dans la feuille "Tool_Planning", ici

Code:
With Sheets("Tool_Planning")
        Application.ScreenUpdating = False
        .Range("C4") = Organisateurs
        Ligne = .Cells(.Cells.Rows.Count, 1).End(xlUp).Row + 1
        .Cells(Ligne, "A") = A
        '.Cells(Ligne, "A").NumberFormat = "00"
        .Cells(Ligne, "B") = B
        '.Cells(Ligne, "B").NumberFormat = "00"
        .Cells(Ligne, "C") = C
        .Cells(Ligne, "D") = D
        .Cells(Ligne, "E") = e
        .Cells(Ligne, "F") = F
        .Cells(Ligne, "G") = G
        .Cells(Ligne, "G").NumberFormat = "mm:ss"
            If Range("A14").Value = 0 Then Exit Sub
                Call Trie_Planning
End With

Quand je met des points d'arrets, pour voir ce que prennent comme valeur ls variables, j'ai des valeurs un peu zarbi.

Du genre pour :

"s" plein de rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr

Point d'arret sur :

X = mciSendString("open " & FileLen(Fil) & " type MPEGVideo alias Voix1", 0&, 0, 0)

X= 0

Point d'arret sur : X = mciSendString("status voix1 length", s, 255, 0)

X=255

Point d'arret sur : G = Val(s)

X=263
G=vide

Point d'arret sur : X = mciSendString("close voix1", 0&, 0, 0)

G=0

Point d'arret sur : With Sheets("Tool_Planning")

Les valeurs change plus.

Et depuis le premier point d'arret la variable Fil = le chemin du fichier

Voili, voilou, merci G'Claire
 

MichelXld

XLDnaute Barbatruc
Re : Récupérartion des durées de musique sur fichier MP3, WAV et WMA

Rebonsoir

As tu essayé cette syntaxe qui fonctionne chez moi (Excel2007/WinXP) :


Code:
Option Explicit

Declare Function mciSendString Lib "winmm.dll" Alias _
    "mciSendStringA" (ByVal lpstrCommand As String, ByVal _
    lpstrReturnString As Any, ByVal uReturnLength As Long, ByVal _
    hwndCallback As Long) As Long

Private Declare Function GetShortPathName Lib "kernel32" _
    Alias "GetShortPathNameA" (ByVal lpszLongPath As String, _
    ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long
 

Sub dureeFichierMP3()
    Dim s As String * 255
    Dim i As Long
    Dim ShortName As String
    
    ''ouvrir la session
    ShortName = GetShortName("C:\dossier\maMusique.mp3")
    i = mciSendString("open " & ShortName & " type MPEGVideo alias Voix1", 0&, 0, 0)
    
    ''reuperer les infos
    i = mciSendString("status voix1 length", s, 255, 0)
    MsgBox Val(s) & " millisecondes"
    
    ''fermer la session
    i = mciSendString("close voix1", 0&, 0, 0)
End Sub
 

Public Function GetShortName(ByVal sLongFileName As String) As String
    Dim lRetVal As Long, sShortPathName As String, iLen As Integer
    sShortPathName = Space(255)
    iLen = Len(sShortPathName)
    
    lRetVal = GetShortPathName(sLongFileName, sShortPathName, iLen)
    GetShortName = Left(sShortPathName, lRetVal)
End Function


que contient la variable Fil ?


bonne soirée
michel
 

GClaire

XLDnaute Occasionnel
Supporter XLD
Re : Récupérartion des durées de musique sur fichier MP3, WAV et WMA

Salut MichelXld, et PascalXLD

Et bien cela fait vraiment plaisir qu'il reste encore "Des anciens", depuis tout ce temps.

Rien empeche que cela fait plaisir qu'il y ai des nouveaux, lol.
Cela prouve que ce forum fonctionne bien, et que david a super bien bossé, lol.....

Oui, Michel ca va bien et toi, lol.

Donc je vais essayer ce code.

La variable "fil", quand je regarde ca valeur :

"O:\Spectacle années en cours\Amicale Laïque\Musiques pour le gala\Partie 1\Cathy PASCAL\03-Debutantes 2 et Intermediaire 3-Mise en scene-Inconnu.wav"

Elle insère dans un tablo, les fichier contenue dans les dossiers.

Si cela est assez claire.

Merci, G'Claire
 

MichelXld

XLDnaute Barbatruc
Re : Récupérartion des durées de musique sur fichier MP3, WAV et WMA

Salut Pascal ... ;o)


La variable "fil", quand je regarde ca valeur :

"O:\Spectacle années en cours\Amicale Laïque\Musiques pour le gala\Partie 1\Cathy PASCAL\03-Debutantes 2 et Intermediaire 3-Mise en scene-Inconnu.wav"

Ok je pensais que tu voulais lire un fichier MP3....

L'exemple suivant, également issu du lien fourni dans mon premier message, fonctionne toujours pour les fichiers .wav :


Code:
Option Explicit

Declare Function mciSendString Lib "winmm.dll" Alias _
    "mciSendStringA" (ByVal lpstrCommand As String, ByVal _
    lpstrReturnString As Any, ByVal uReturnLength As Long, ByVal _
    hwndCallback As Long) As Long

Private Declare Function GetShortPathName Lib "kernel32" _
    Alias "GetShortPathNameA" (ByVal lpszLongPath As String, _
    ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long

Sub dureeFichierWAV()
    Dim s As String * 255
    Dim i As Long
    Dim ShortName As String
    
    ''ouvrir la session
    ShortName = GetShortName("C:\WINDOWS\system32\LoopyMusic.wav")
    i = mciSendString("open " & ShortName & _
        " type waveaudio alias Voix1", 0&, 0, 0)
    
    ''reuperer les infos
    i = mciSendString("status voix1 length", s, Len(s), 0)
    MsgBox Val(s) & " millisecondes"
    
    ''fermer la session
    i = mciSendString("close voix1", 0&, 0, 0)
End Sub

Public Function GetShortName(ByVal sLongFileName As String) As String
    Dim lRetVal As Long, sShortPathName As String, iLen As Integer
    sShortPathName = Space(255)
    iLen = Len(sShortPathName)
    
    lRetVal = GetShortPathName(sLongFileName, sShortPathName, iLen)
    GetShortName = Left(sShortPathName, lRetVal)
End Function


bonne soirée
michel
 

Brigitte

XLDnaute Barbatruc
Re : Récupérartion des durées de musique sur fichier MP3, WAV et WMA

Bonsoir tout le monde,

Oui je sais, ca va étonner tout le monde que je sois sur ce fil, je vous rassure, les gars vous n'hallucinez pas, c'est bien moi, mais seulement, en plus du plaisir de vous y croiser, pour rappeler à Jacques qu'il avait, semble t'il une réponse sur le premier fil qui traitait de la migration de son code vers excel 2007.

Tu avais déjà posé la question là : https://www.excel-downloads.com/threads/probleme-de-code-du-a-migration-vers-excel-2007.121162/

et JNP t'avait aidé, grâce notamment à un code de JB... tu as vu sa réponse, tu l'as testée ? car il semble que ca marche... D'ailleurs JNP est lui même musicien, donc il doit savoir de quoi il cause, hihi (comme tu dirais)...

Si tu peux aller lui dire en quoi ca ne marche pas, car il a fait de grandes recherches pour arriver à cette solution et aimerait sans doute au moins savoir ce qui ne marche pas.

Bisous et merci d'avance. Bisous aux zotres aussi, bien sûr.
 

JNP

XLDnaute Barbatruc
Re : Récupérartion des durées de musique sur fichier MP3, WAV et WMA

Bonsoir le fil :),
J'avoue que j'ai du mal à comprendre...
Code:
Sub Durée()
Set myShell = CreateObject("Shell.Application")
Set myFolder = myShell.Namespace("Chemin du dossier")
Set myFile = myFolder.Items.Item("Nom du fichier")
MsgBox myFolder.GetDetailsOf(myFile, 21)
End Sub
en remplaçant Chemin du dossier par un chemin valide et Nom du fichier par un fichier valide me fait remonter la durée du morceau, quel que soit le type de fichier, wma, mpg3, etc.
Ou alors tes fichiers musiques ne sont pas renseignés...
Bonne soirée :cool:
 

GClaire

XLDnaute Occasionnel
Supporter XLD
Re : Récupérartion des durées de musique sur fichier MP3, WAV et WMA

Salut tout le monde

Désolé de ne pas avoir répondu, mais tous mes week end étaient trés occupé et la semaine pas mal, et j'avais zappé cela, car les dates de mes spectacles s'approchant a grand pas j'avais tout simplement reconvertie tous mes fichiers en WAVE, et par se faite le programme fonctionné.

Je vais voir de suite l'autre post.

Salutations, G'Claire
 

Discussions similaires

Statistiques des forums

Discussions
314 653
Messages
2 111 589
Membres
111 208
dernier inscrit
estalavista