Liste des attributs de fichier accessibles par VB ? "Date cliché" en est ?

etienne78

XLDnaute Nouveau
bonjour,
je suis sous Win7 - Excel 2010.

en utilisant Scripting.FileSystemObject , on a accès a certains attributs des fichiers listés , comme ".Name" ou ".size" ou ".path" etc ...
Je voudrais recupérer la DATE du fichier : le probleme c'est qu'il y a BEAUCOUP de dates differentes :
pour l'instant j'ai trouvé ".DateLastModified" et ".DateCreated" . mais il y en a bcp d'autres .
En particulier je cherche la "date du cliché" , alors que ces dates ci-dessus, donnent la date de creation du fichier JPG sur le disque dur...
QUESTION : Quelle est la liste des attributs de fichier accessibles par VB ?

NB : J'ai cherché si la qst° a déjà été posée ds le forum (et d'autres) .
Merci d'avance !
E
 

jp14

XLDnaute Barbatruc
Re : Liste des attributs de fichier accessibles par VB ? "Date cliché" en est ?

Bonjour et bienvenue sur le forum

En faisant une recherche avec le mot "exif" dans le forum, on trouve des procédures qui permettent d'afficher les paramètres d'une photo en particulier la date de prise de vue.
25=Date du cliché : la date du cliché est à la position 25

JP
 

Jack2

XLDnaute Occasionnel
Re : Liste des attributs de fichier accessibles par VB ? "Date cliché" en est ?

Bonne nuit le fil,

Avec ce code trouvé sur le site :
Code:
Sub FileMetadata()
Dim Chemin As String
Dim NomFich As String
Dim i As Integer
Dim objShell As Shell32.Shell
Dim objFolder As Shell32.Folder
Dim objFolderItem As Shell32.FolderItem
Dim cTxt As String
    
Chemin = "D:\Excel\Musique - Son - Images\Images\"
NomFich = "test.jpg"
    
Set objShell = New Shell
Set objFolder = objShell.Namespace(Chemin)
Set objFolderItem = objFolder.ParseName(NomFich)
    
For i = 0 To 40
    Range("A" & i + 1).Value = i
    Range("B" & i + 1).Value = objFolder.GetDetailsOf(objFolder, i)
    Range("C" & i + 1).Value = objFolder.GetDetailsOf(objFolderItem, i)
Next

Set objFolderItem = Nothing
Set objFolder = Nothing
Set objShell = Nothing
End Sub
Dans le cas présent :
DateCréation = objFolder.GetDetailsOf(objFolderItem, 4)

A+ Jack2
 

etienne78

XLDnaute Nouveau
Re : Liste des attributs de fichier accessibles par VB ? "Date cliché" en est ?

Bonjour,
Absent qq jours , me voici de retour la dessus . j'en profite pour vous remercier de vos contribs.
J'en connais un peu plus sur les attrib des fichiers . meme si je ne m'habitue pas a la syntaxe Objet ...

Mais j'ai un autre probleme, tres inattendu : c'est le FORMAT de sortie de la date de cliché ! incomprehensible : voyez plutot !
je recupere par
MaDateCliche = objFolder.GetDetailsOf(strFileName, 12)
en l'affichant dans Excel : ‎13/‎09/‎2013 ‏‎19:34 (Ok , c'est bien la date de cliché - pas celle de creation )
MAIS il y a un caractere caché devant le "1" ( je ne sais pas si cet editeur ici va le garder?!?) , ainsi que un caractere caché devant chaque "/" puis encore devant l'heure . Qu'est ce que c'est ce format ?!?!?
Bien sur Excel ne peut pas transformer ça en vrai format date , etc ...
Vous connaissez ça ? Merci.
E
 

Jack2

XLDnaute Occasionnel
Re : Liste des attributs de fichier accessibles par VB ? "Date cliché" en est ?

Bonjour etienne78,

Effectivement, il y a un problème au niveau de objFolder.GetDetailsOf(strFileName, 12). Ce qui est gênant, c'est que les "?" ne partent pas avec la fonction Replace, il ne sont pas pris en compte non plus par les fonctions Left, Mid, Right. En voulant extraire la date de cette manière :
Code:
St = objFolder.GetDetailsOf(objFolderItem, 12)
St = Mid(St, 1, InStr(St, ":") - 3)
LaDate = CDate(St)
Ca plante sur LaDate, la conversion ne se fait pas (Excel 2003 et 2007). Je n'ai aucune explication...

A+ Jack2

Edit
On peut convertir à condition de connaître le nombre ou la position des "?" :
Code:
St = objFolder.GetDetailsOf(objFolderItem, 12)
St = Mid(St, 2, InStr(St, ":") - 7)
S1 = Mid(St, 1, 3)
St = Replace(St, S1, "")
S2 = Mid(St, 2, 3)
St = Replace(St, S2, "")
S3 = Right(St, 4)
St = S1 & S2 & S3
D = CDate(St)
Ca reste quand même bizarre
 
Dernière édition:

etienne78

XLDnaute Nouveau
Re : Liste des attributs de fichier accessibles par VB ? "Date cliché" en est ?

Bonjour Jack2 , et merci . j'avais réussi à extraire les infos puis a reconstituer une date mais je voulais en avoir le coeur net que "c'est quand même bizarre" ! je vais attendre de voir si d'autres personnes ont trouvé .
Merci encore .
E78
 

Staple1600

XLDnaute Barbatruc
Re : Liste des attributs de fichier accessibles par VB ? "Date cliché" en est ?

Bonsoir à tous

Pour le plaisir d'être curieux
Dans le zip disponible ici
Exif reader class/dll for VB 6 | Free Security & Utilities software downloads at SourceForge.net
ouvrir le fichier *.cls dans le Bloc-notes et copier son contenu (à partir de la ligne Option Explicit)
dans un module de classe
(que vous pouvez nommer par exemple : LireEXIF )

Puis tester avec ce type de macro dans un module Standard
Code:
Sub TestEXIF()
Dim X As New LireEXIF
'adapter le chemin et le nom de la photo
X.Load "C:\Temp\Picture1.jpg"
Range("A1").Value = X.Tag(DateTimeOriginal)
End Sub

Seul souci, le format de la date est en anglais et de ce style
2013:02:19 16:49:39

C'est un peu mieux que le VBScript "VBAisé" ci-dessous
(adapté pour XL 2013 +W7 sinon le code de Jack2 plante chez moi)
Code:
Sub FileMetadataII()
Const Chemin As String = "C:\Temp"
Dim objShell As Object, objFolder As Object, objFolderItem As Object
Dim NomFich$
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(Chemin)
NomFich = "Picture1.jpg"
Set objFolderItem = objFolder.ParseName(NomFich)
Debug.Print objFolder.GetDetailsOf(objFolderItem, 12)
'End Sub
qui lui renvoie
?19/?02/?2013 ??16:49

PS: Si une bonne âme , se sent le courage de modifier le module de classe pour avoir un format de date :
jj/mm/yyyy hh:mm:ss qu'il n'hésite pas une seconde ;)
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Liste des attributs de fichier accessibles par VB ? "Date cliché" en est ?

Re


Suite...
En cherchant un peu d'infos sur les données EXIF, j'ai trouvé cette petite fonction qui solutionne le problème de format de date sans toucher au module de classe
Code:
Sub TestEXIFII()
Dim X As New LireEXIF
X.Load "C:\Temp\Picture1.jpg"
Range("A1").Value = ISODateTimeToDate(X.Tag(DateTimeOriginal))
End Sub

Code VBA:
Public Function ISODateTimeToDate(ByVal isoDateTime As String) As Date
'auteur :Steve McMahon
Dim dDate As Date
dDate = DateSerial( _
Mid(isoDateTime, 1, 4), _
Mid(isoDateTime, 6, 2), _
Mid(isoDateTime, 9, 2)) + _
TimeSerial( _
Mid(isoDateTime, 12, 2), _
Mid(isoDateTime, 15, 2), _
Mid(isoDateTime, 18, 2))
ISODateTimeToDate = dDate
End Function
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Liste des attributs de fichier accessibles par VB ? "Date cliché" en est ?

Re

Et fin. ;)
Bon c'est un peu bancal mais chez moi ca fonctionne ;)
Code vba:
Public Function ZOZODateTimeToDate(ByVal isoDateTime As String) As Date
'auteur :Steve McMahon
'adaptation hussarde de Staple
Dim dDate As Date
dDate = DateSerial( _
Mid(isoDateTime, 10, 4), _
Mid(isoDateTime, 6, 2), _
Mid(isoDateTime, 2, 2)) + _
TimeSerial( _
Mid(isoDateTime, 17, 2), _
Mid(isoDateTime, 20, 2), 0)
ZOZODateTimeToDate = dDate
End Function




Code:
Sub FileMetadataIII()
Const Chemin As String = "C:\Temp"
Dim objShell As Object, objFolder As Object, objFolderItem As Object
Dim DatePV$, NomFich$
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(Chemin)
NomFich = "Picture1.jpg"
Set objFolderItem = objFolder.ParseName(NomFich)
DatePV = objFolder.GetDetailsOf(objFolderItem, 12)
MsgBox ZOZODateTimeToDate(DatePV)
End Sub

PS: La solution avec le module de classe semble plus sur et plus riche mais elle prend plus de place
(voir le message #7)
 
Dernière édition:

Jack2

XLDnaute Occasionnel
Re : Liste des attributs de fichier accessibles par VB ? "Date cliché" en est ?

Bonjour le fil,

Je passais par hasard (pas de notification). J'ai un dépassement de capacité avec le module de classe, dépassement après avoir vu passer plusieurs dates.

Le module de classe me dépasse, j'y viendrais peut-être un jour quand j'aurais acquis les bases du VBA Excel.

Par contre, l'adaptation à la hussarde semble très bien fonctionner (la ténacité finit payer).

A+ Jack2
 

MJ13

XLDnaute Barbatruc
Re : Liste des attributs de fichier accessibles par VB ? "Date cliché" en est ?

Bonjour à tous

Sinon, pour déterminer la répartition d'un champs, vous pouvez tester ce fichier :):
 

Pièces jointes

  • Dispatche_Cellule_caractères_MJ.xlsm
    24 KB · Affichages: 112

Paf

XLDnaute Barbatruc
Re : Liste des attributs de fichier accessibles par VB ? "Date cliché" en est ?

Bonjour à tous

intéressé par le sujet( pour récupérer les info de géolocalisation), j'ai testé le code proposé par Jack2 au post #3;

et je récupère la date cliché par:
MaDate = objFolder.GetDetailsOf(objFolderItem, 25)

pour lequel je n'ai aucun problème de caractères cachés (ou bien je n'ai rien compris)
par ailleurs , pour moi la date se trouve en 25 et non en 12 ?

MaDate = objFolder.GetDetailsOf(objFolderItem, 12) me renvoie à la catégorie qui ne contient pas d'infos

les spécification de structure des fichiers image a-t-elle évoluée?

Bonne journée

Edit:

après essais sur des photos anciennes et récentes prises avec des appareils anciens ou récents , j'ai les mêmes résultats
XP/Excel 2003

??
 
Dernière édition:

MJ13

XLDnaute Barbatruc
Re : Liste des attributs de fichier accessibles par VB ? "Date cliché" en est ?

Bonjour Paf

Sur Win7 et Xl2013, la date est en 12 ème position. Il y a souvent des différences suivant les OS et les versions d'Excel.

Par contre, ce n'est pas pris comme une date au sens Excel. On le voit en faisant Crtl+Shift+1 sur une cellule contenant une date, si c'est un texte, il le mettra en format standard sinon, en format date ou en format personnalisé.

Tu peux aussi tester le fichier que j'ai mis au post #11 :).
 

Jack2

XLDnaute Occasionnel
Re : Liste des attributs de fichier accessibles par VB ? "Date cliché" en est ?

Bonjour à tous,

En listant les propriétés d'une photo à l'aide du code du post n°3, on ne voit aucune anomalie et la vérification de MJ13 le confirme. Par contre lorsque l'on observe dans l'éditeur VBA le résultat renvoyé par la propriété 12 (prise de vue) on voit des points d'interrogation (cf. image jointe). Il n'est pas possible de convertir en date :
Code:
Dim D As Date
D = CDate(objFolder.GetDetailsOf(objFolderItem, 12))
Ca plante ! . L’adaptation "à la hussarde" de Staple1600 permet de convertir en date. (testé sur Excel 2003 et 2007.).

A+ Jack2
 

Pièces jointes

  • PrisedeVue_12.jpg
    PrisedeVue_12.jpg
    22.3 KB · Affichages: 94

Discussions similaires

Réponses
19
Affichages
2 K

Statistiques des forums

Discussions
312 196
Messages
2 086 085
Membres
103 116
dernier inscrit
kutobi87