XL 2019 Lire propriété (vidéo) à partir d'une boite de dialogue ?

re4

XLDnaute Occasionnel
Bonjour,
Il est encore temps de vous souhaiter une bonne et heureuse année.

J'ai adapté le code ci-dessous pour mes besoins, pouvez-vous m'aider pour aller chercher le fichier avec une boite de dialogue à la place de ce code :
Set objFolder = objShell.Namespace("D:\temp test\video")
Set objFolderItem = objFolder.ParseName("test.mp4")
Mon expérience VBA étant limitée, je n'ai peut -être pas utilisé les bons termes... :-(

Merci par avance
Bonne journée


VB:
Sub ProprieteVideo()

'Extraction de tous les codes sur le pc qui utilise ce fichier dans une feuille ""Code""
Call M2_code_champs1.code_champs1
    
'\
    Dim strHauteurVideo As String
    Dim strLargeurVideo As String
    Dim strHauteur As String
    Dim strLargeur As String
    Dim strTaille As String
    Dim strDebite As String
    
    Largeur = Worksheets("Code").Range("C2").Value  'Win 10 sur mon poste en 2022 => Code 316
    Hauteur = Worksheets("Code").Range("D2").Value 'win 10 sur mon poste en 2022 => Code 314
    Taille = Worksheets("Code").Range("E2").Value        'win 10 sur mon poste en 2022 => code 1
    Debit = Worksheets("Code").Range("F2").Value        'win 10 sur mon poste en 2022 => code 320
    
    Worksheets("Datas").Select
    Set objShell = CreateObject("shell.application")
    
    '***
    Set objFolder = objShell.Namespace("D:\temp test\video")
    Set objFolderItem = objFolder.ParseName("test.mp4")
    '***
    
    strLargeurVideo = objFolder.GetDetailsOf(objFolderItem, Largeur)
    strHauteurVideo = objFolder.GetDetailsOf(objFolderItem, Hauteur)
    Range("A1") = strLargeurVideo & "x" & strHauteurVideo
    strTaille = objFolder.GetDetailsOf(objFolderItem, Taille)
    Range("B1") = strTaille
      strDebit = objFolder.GetDetailsOf(objFolderItem, Debit)
    Range("C1") = strDebit
    
    Set objFolderItem = Nothing
    Set objFolder = Nothing
    Set objShell = Nothing

End Sub
 

TooFatBoy

XLDnaute Barbatruc
Une question pourquoi ces 2 lignes alors que l'on va chercher le fichier avec la boite ?
ChDrive "D:"
ChDir "\temp test\video
Pardon de le préciser, le répertoire et le nom du fichier sont à titre d'exemple et ne seront pas toujours les mêmes mais tu l'avais bien sûr compris.
C'était pour pré-positionner la boîte de dialogue de sélection de fichier sur un dossier précis.
Mais si tu n'en a pas besoin, tu peux supprimer ces deux lignes.
 

TooFatBoy

XLDnaute Barbatruc
Bonjour,
Merci Marcel32, je m'en doutais un peu, avez-vous une idée pourquoi ça plante à cette ligne :


(Office 2019 & Win 10 - 21h2 à jour)
merci
Je ne connais pas toutes ces instructions que tu utilises (CreateObject, ParseName, etc.), donc je ne sais pas te répondre.

Il faut que je teste chez moi, pour voir si ça plante aussi (même si je suppose que ça plante aussi).
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
il y a un autre souci aussi avec ça important
par exemple avec ton fichier "test.mp4"
chez moi par exemple je lis tout avec VLC mp4,mp3,avi,ts,flv,ect......
j'ai donc mis tout mes fichiers "ouvrir avec "VLC" a la place du Window media player de microsoft

et bien en changeant cela les propriétés et index de propriétés changent

d'ailleurs tu le vois tout de suite en mettant ton explorateur sur le dossier de tes video en mode liste et details
conclusion (voir avec les apis ) je sais qu'il il existe une api pour les "Avi"
je ne sais pas si elle fonction avec les mp4 ou autre sinon chercher
mais attention c'est du costaud
 

re4

XLDnaute Occasionnel
Patricktoulon
Très bonne réflexion, j'ai modifié le lecteur pour lecture par défaut par VLC, chez moi, ma macro qui extrait toutes les propriétés me donne les mêmes codes
Largeur de trameHauteur de trameTailleDébit total (en bits)
3163141320
Il y a toujours le plantage sur la même ligne, c'est un mystère pour l'instant...

Marcel32, Patricktoulon, mais par quoi remplacer 'parsename' alors ?
Le but est d'afficher les propriétés du tableau ou d'autres si besoin, sans faire une usine à gaz ;-)
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
en changeant cela les propriétés et index de propriétés changent
Comment le lecteur par défaut peut-il changer les propriétés d'un fichier ?
Ça n'a pas de sens !
À la limite, ça peut éventuellement modifier les valeurs renvoyées par Windows...

Perso, pour récupérer les propriétés de fichiers vidéos, je passe par un programme spécialisé qui me crée un fichier .txt et je fais ça avec un fichier .bat.
En suite, si je veux absolument utiliser Excel, je peux importer le fichier .txt dans Excel.
 

patricktoulon

XLDnaute Barbatruc
bon je viens de réouvrir mes archive et j'avais ca
largeur de trame trames c'est 286
hauteur de trame c'es 284
le nombre de trame/s c'est 285(Fréquence d’images)
le Kbits/s de compression c'est 283
le kbits/s réel c'est 287
le nom du dossier c'est 177
la duration c'est 28
le Kbits/s pour l'audio c'est 29
modifié le c'est 3
le dernier accès ou création c'est 5 et/ou 6
le 2 c'est la taille en Mo ou KO selon la taille

bingo!!!!!
et j'ai compris le problème
COMME AVEC CERTAINES (FONCTIONS/MEMBRE) DU SCRIPTINGFILESYSTEMOBJECT
LE LE SHELL.APPLICATION ATTEND UN VARIANT ET NON UN STRING
MÊME SI L'ARGUMENT EST UN STRING
et c'est le cas pour le dossier

le pire c'est que je le savais j'ai regardé ce code comme un bleu ;)🤣

le folder ne doit pas être string ni un object ,il faut donc le convertir en variant si c'est un string de dossier injecté

donc
Set dossier = Shell.Namespace(ici c'est un variant pas un string )

donc exemple
VB:
dim chemin As String , cheminvariant as variant

chemin=c:\mesvideos"' ici c'est du string

cheminvariant =chemin' conversion en variant 

Set dossier = Shell.Namespace(cheminvariant)' là ca fonctionne '

allez c'est parti!
VB:
Dim Chemin As String

Sub test_Avec_1_fichier()
    [A1].CurrentRegion.ClearContents
    Chemin = "I:\FILM TV\deja visionné\2 drame policier"
    Fichier$ = "une vie de mensonge.mp4"
        Get_Attributes_Fich Fichier, 3
End Sub


Function Get_Attributes_Fich(Fichier As String, index As Integer)
    Dim Shell As Object, dossier As Object, shellChild As Object, X%

    Dim Folder As Variant
    Folder = Chemin ' conversion string/variant
    
    Set Shell = CreateObject("Shell.Application")
    Set dossier = Shell.Namespace(Folder)

    If Not dossier Is Nothing Then
        Set shellChild = dossier.ParseName(Fichier)
        If Not shellChild Is Nothing Then
            With Feuil1
                Cells(index, 1).Value = Fichier
                MsgBox dossier.GetDetailsOf(shellChild, 285)

                For X = 1 To 300
                    On Error Resume Next
                    'si tu veux le nom et index de propriétés  en ligne 1 et 2
                    Cells(1, X + 1).Value = X: Cells(2, X + 1).Value = dossier.GetDetailsOf(, X)
                    Cells(index, X + 1).Value = dossier.GetDetailsOf(shellChild, X)
                    On Error GoTo 0
                Next
            End With
        End If
        Set shellChild = Nothing
    End If
    Set dossier = Nothing
    Set Shell = Nothing
    Cells(1, 1).Resize(, 300).EntireColumn.AutoFit
End Function
demo.gif
 

re4

XLDnaute Occasionnel
Bravo
Chez moi avec ta proposition et for x =1 to 350 les codes sont ceux que j'ai donné plus haut
Largeur de trameHauteur de trameTailleDébit total (en bits)
3163141320

Pour info j'avais remarqué que suivant les versions de Windows ou peut-être des plateformes (mais peu probable que le code (ou tags) des propriétés n'était pas le même, c'est pour ça que je lance la macro identification des codes ''Call M2_code_champs1.code_champs1'' à votre disposition si besoin.

en plus ta fonction patricktoulon, il n'y a pas besoin d'aller lire une propriété d'un photo comme le fais ma macro (qui n'est pas de moi d'ailleurs ,-)

Avec ta dernière macro tout semble ok, reste à aller chercher le fichier avec la boite de l'exploreur, si vous pouvez m'aider.
En plus je n'ai pas besoin de toutes les infos, je peux peut-être m'en sortir en m'inspirant du code du post #1

Encore merci
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
chez moi après 300 il n'y a plus rien
il est donc indispensable pour générer un moteur valide pour chez toi et chez moi et les autres d’identifier le nom de la propertie comme je le montre dans la macro en le comparant a un array par exemple
au lieu de faire par l'index
je suis en train de faire ça justement laisse moi du temps
après comme je le montre dans la macro je peux récupérer la propertie mais aussi le nom de la propertie dans la boucle facile apres de prendre celle que l'on veux

mais a mon avis taille c'est pas bon normalement c'est "1 MO"
comme visiblement les index c'est pas le même il va falloir peut être que je fabrique une boite de dialogue perso
chiche je me lance dans ce boulot
 

Discussions similaires

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa