> Bonjour,
> Bonjour,
> Bonjour,
Bonjour,
Bonjour,
Bonjour,
Bonjour,
Essaie ceci :
Attention aux coupures de certaines lignes de code par
le service de messagerie.
'--------------------------------------------
Sub Attribut_Fichier()
Dim objShell As Object, objFolder As Object
Dim objFolderItem As Object, A As Integer
Dim Folder As Variant, Fichier As String
'***********Variables*************
Folder = "C:UsersDMDocuments"
Fichier = "Classeur1.xls"
'**********************************
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(Folder)
If Not objFolder Is Nothing Then
Set objFolderItem = objFolder.ParseName(Fichier)
If Not objFolderItem Is Nothing Then
With Worksheets("Feuil1")
.Range("A1") = "Nom du fichier"
.Range("B1") = Fichier
For A = 1 To 14
.Range("A" & A + 1) = objFolder.GetDetailsOf(objFolder.items, A)
.Range("B" & A + 1) = objFolder.GetDetailsOf(objFolderItem, A)
Next
.Range("A:B").EntireColumn.AutoFit
End With
End If
Set objFolderItem = Nothing
End If
Set objFolder = Nothing
Set objShell = Nothing
End Sub
'--------------------------------------------
"Patrick" a écrit dans le message de groupe de discussion :
Bonjour,
En VBA, j'aimerais pouvoir lire les propriétés d'un fichier Excel (Titre,
Sujet, Auteur, Catégories, Mots clés, ...) que je ne veux pas ouvrir. Est-ce
que c'est possible ?
Y a-t-il, par exemple, des API qui permettent de le faire ?
Merci beaucoup pour votre aide.
--
Patrick
Bonjour,
Essaie ceci :
Attention aux coupures de certaines lignes de code par
le service de messagerie.
'--------------------------------------------
Sub Attribut_Fichier()
Dim objShell As Object, objFolder As Object
Dim objFolderItem As Object, A As Integer
Dim Folder As Variant, Fichier As String
'***********Variables*************
Folder = "C:UsersDMDocuments"
Fichier = "Classeur1.xls"
'**********************************
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(Folder)
If Not objFolder Is Nothing Then
Set objFolderItem = objFolder.ParseName(Fichier)
If Not objFolderItem Is Nothing Then
With Worksheets("Feuil1")
.Range("A1") = "Nom du fichier"
.Range("B1") = Fichier
For A = 1 To 14
.Range("A" & A + 1) = objFolder.GetDetailsOf(objFolder.items, A)
.Range("B" & A + 1) = objFolder.GetDetailsOf(objFolderItem, A)
Next
.Range("A:B").EntireColumn.AutoFit
End With
End If
Set objFolderItem = Nothing
End If
Set objFolder = Nothing
Set objShell = Nothing
End Sub
'--------------------------------------------
"Patrick" <no.spam.pfredin@yahoo.ca> a écrit dans le message de groupe de discussion :
37113FF6-C9F4-4E73-A627-15FEA68EB81D@microsoft.com...
Bonjour,
En VBA, j'aimerais pouvoir lire les propriétés d'un fichier Excel (Titre,
Sujet, Auteur, Catégories, Mots clés, ...) que je ne veux pas ouvrir. Est-ce
que c'est possible ?
Y a-t-il, par exemple, des API qui permettent de le faire ?
Merci beaucoup pour votre aide.
--
Patrick
Bonjour,
Essaie ceci :
Attention aux coupures de certaines lignes de code par
le service de messagerie.
'--------------------------------------------
Sub Attribut_Fichier()
Dim objShell As Object, objFolder As Object
Dim objFolderItem As Object, A As Integer
Dim Folder As Variant, Fichier As String
'***********Variables*************
Folder = "C:UsersDMDocuments"
Fichier = "Classeur1.xls"
'**********************************
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(Folder)
If Not objFolder Is Nothing Then
Set objFolderItem = objFolder.ParseName(Fichier)
If Not objFolderItem Is Nothing Then
With Worksheets("Feuil1")
.Range("A1") = "Nom du fichier"
.Range("B1") = Fichier
For A = 1 To 14
.Range("A" & A + 1) = objFolder.GetDetailsOf(objFolder.items, A)
.Range("B" & A + 1) = objFolder.GetDetailsOf(objFolderItem, A)
Next
.Range("A:B").EntireColumn.AutoFit
End With
End If
Set objFolderItem = Nothing
End If
Set objFolder = Nothing
Set objShell = Nothing
End Sub
'--------------------------------------------
"Patrick" a écrit dans le message de groupe de discussion :
Bonjour,
En VBA, j'aimerais pouvoir lire les propriétés d'un fichier Excel (Titre,
Sujet, Auteur, Catégories, Mots clés, ...) que je ne veux pas ouvrir. Est-ce
que c'est possible ?
Y a-t-il, par exemple, des API qui permettent de le faire ?
Merci beaucoup pour votre aide.
--
Patrick
Bonjour,
j'ai testé ton code il fonctionne
mais il y a des champs qui restent vides
comme auteur, titre, categorie
alors que dans mes proprietés tout est ok
merci michdenis
Bonjour,
j'ai testé ton code il fonctionne
mais il y a des champs qui restent vides
comme auteur, titre, categorie
alors que dans mes proprietés tout est ok
merci michdenis
Bonjour,
j'ai testé ton code il fonctionne
mais il y a des champs qui restent vides
comme auteur, titre, categorie
alors que dans mes proprietés tout est ok
merci michdenis
Bonjour,
Peut-être avec une autre approche (qui n'est pas parfaite non plus) ?
Dans un module de code ordinaire de n'importe quel classeur :
'======================================= > 'L'objet OleDocumentProperties permet de récupérer des informations
'sur les propriétés d'un classeur *fermé* dont certaines ne sont pas
'accessibles par la collection BuiltinDocumentProperties.
'
'Pour utiliser cet objet, il faut ajouter au classeur (par OutilsRéférences)
'une référence à la bibliothèque
' "DSO OLE Document Properties Reader 2.1" (version actuelle au 6/2/2010)
'
'ou, ce qui est le cas ici, utiliser le "late binding" (liaison OLE tardive)
'qui ne nécessite pas de référence, mais malgré tout la présence du
'fichier dsofile.dll sur la machine.
'
'Cette bibliothèque (dll) n'est pas fournie avec toutes les versions
d'office.
'Si elle n'est pas installée sur ta machine, elle est en téléchargement
'gratuit à cette adresse :
' http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q224351
'
'Le code ci-dessous permet de récupérer un tableau de 21 des propriétés
'd'un fichier ou la valeur d'une des propriétés accessibles.
'A noter enfin que ce code fonctionne avec d'autres applications (Word par
ex).
Sub test()
Dim Fich$, S$, Arr
Fich = "D:fsdatas 0Mes Docs ExcelTestDataToRead.xls"
Arr = ReadProperties(Fich)
Sheets.Add
For i = LBound(Arr) To UBound(Arr)
Cells(i + 1, "a").Value = NomsDesPropriétés(i)
Cells(i + 1, "b").Value = Arr(i)
Next
End Sub
'renvoie dans un tableau 21 des propriétés d'un fichier
Function ReadProperties(CheminAcces$)
Dim DSO As Object
Dim ArrProps
Set DSO = CreateObject("DSOFile.OleDocumentProperties")
With DSO
.Open (CheminAcces): NomDoc = .Name
LectureSeule = .IsReadOnly: Chemin = .Path
On Error Resume Next
IDProgramme = .progID
On Error GoTo 0
End With
With DSO.SummaryProperties
'ceci peut être modifié pour lire plus de propriétés
ArrProps = _
Array(.ApplicationName, .Author, .Category, .CharacterCount, _
.Comments, .Company, .DateCreated, .DateLastPrinted, _
.DateLastSaved, .LastSavedBy, NomDoc, .PageCount, _
LectureSeule, Chemin, IDProgramme, .SharedDocument, _
.Subject, .Template, .Title, .Version, .WordCount)
End With
DSO.Close
ReadProperties = ArrProps
End Function
Function NomsDesPropriétés()
NomsDesPropriétés = _
Array("Application", "Auteur", "Catégorie", _
"Nombre de caractères", "Commentaires", "Entreprise", _
"Date de création", "Date dernière impression", _
"Date dernier enregistrement", "Dernier enregistrement par", _
"Nom", "Nombre de pages", "Lecture seule", "Chemin", _
"Référence de la classe", "Document partagé", _
"Sujet", "Modèle", "Titre", "Version", "Nombre de mots")
End Function
'======================================= >
(testé avec Excel 2003 et 2007)
Par ailleurs, pour récupérer avec le code de Denis le titre ou la catégorie
il faut augmenter un peu le nombre de champs renvoyés en modifiant la ligne :
For A = 1 To 14
Remplace par exemple 14 par 19, ou par 35 si des propriétés "multimedia"
t'intéressent.
FS
Bonjour,
Peut-être avec une autre approche (qui n'est pas parfaite non plus) ?
Dans un module de code ordinaire de n'importe quel classeur :
'======================================= > 'L'objet OleDocumentProperties permet de récupérer des informations
'sur les propriétés d'un classeur *fermé* dont certaines ne sont pas
'accessibles par la collection BuiltinDocumentProperties.
'
'Pour utiliser cet objet, il faut ajouter au classeur (par OutilsRéférences)
'une référence à la bibliothèque
' "DSO OLE Document Properties Reader 2.1" (version actuelle au 6/2/2010)
'
'ou, ce qui est le cas ici, utiliser le "late binding" (liaison OLE tardive)
'qui ne nécessite pas de référence, mais malgré tout la présence du
'fichier dsofile.dll sur la machine.
'
'Cette bibliothèque (dll) n'est pas fournie avec toutes les versions
d'office.
'Si elle n'est pas installée sur ta machine, elle est en téléchargement
'gratuit à cette adresse :
' http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q224351
'
'Le code ci-dessous permet de récupérer un tableau de 21 des propriétés
'd'un fichier ou la valeur d'une des propriétés accessibles.
'A noter enfin que ce code fonctionne avec d'autres applications (Word par
ex).
Sub test()
Dim Fich$, S$, Arr
Fich = "D:fsdatas 0Mes Docs ExcelTestDataToRead.xls"
Arr = ReadProperties(Fich)
Sheets.Add
For i = LBound(Arr) To UBound(Arr)
Cells(i + 1, "a").Value = NomsDesPropriétés(i)
Cells(i + 1, "b").Value = Arr(i)
Next
End Sub
'renvoie dans un tableau 21 des propriétés d'un fichier
Function ReadProperties(CheminAcces$)
Dim DSO As Object
Dim ArrProps
Set DSO = CreateObject("DSOFile.OleDocumentProperties")
With DSO
.Open (CheminAcces): NomDoc = .Name
LectureSeule = .IsReadOnly: Chemin = .Path
On Error Resume Next
IDProgramme = .progID
On Error GoTo 0
End With
With DSO.SummaryProperties
'ceci peut être modifié pour lire plus de propriétés
ArrProps = _
Array(.ApplicationName, .Author, .Category, .CharacterCount, _
.Comments, .Company, .DateCreated, .DateLastPrinted, _
.DateLastSaved, .LastSavedBy, NomDoc, .PageCount, _
LectureSeule, Chemin, IDProgramme, .SharedDocument, _
.Subject, .Template, .Title, .Version, .WordCount)
End With
DSO.Close
ReadProperties = ArrProps
End Function
Function NomsDesPropriétés()
NomsDesPropriétés = _
Array("Application", "Auteur", "Catégorie", _
"Nombre de caractères", "Commentaires", "Entreprise", _
"Date de création", "Date dernière impression", _
"Date dernier enregistrement", "Dernier enregistrement par", _
"Nom", "Nombre de pages", "Lecture seule", "Chemin", _
"Référence de la classe", "Document partagé", _
"Sujet", "Modèle", "Titre", "Version", "Nombre de mots")
End Function
'======================================= >
(testé avec Excel 2003 et 2007)
Par ailleurs, pour récupérer avec le code de Denis le titre ou la catégorie
il faut augmenter un peu le nombre de champs renvoyés en modifiant la ligne :
For A = 1 To 14
Remplace par exemple 14 par 19, ou par 35 si des propriétés "multimedia"
t'intéressent.
FS
Bonjour,
Peut-être avec une autre approche (qui n'est pas parfaite non plus) ?
Dans un module de code ordinaire de n'importe quel classeur :
'======================================= > 'L'objet OleDocumentProperties permet de récupérer des informations
'sur les propriétés d'un classeur *fermé* dont certaines ne sont pas
'accessibles par la collection BuiltinDocumentProperties.
'
'Pour utiliser cet objet, il faut ajouter au classeur (par OutilsRéférences)
'une référence à la bibliothèque
' "DSO OLE Document Properties Reader 2.1" (version actuelle au 6/2/2010)
'
'ou, ce qui est le cas ici, utiliser le "late binding" (liaison OLE tardive)
'qui ne nécessite pas de référence, mais malgré tout la présence du
'fichier dsofile.dll sur la machine.
'
'Cette bibliothèque (dll) n'est pas fournie avec toutes les versions
d'office.
'Si elle n'est pas installée sur ta machine, elle est en téléchargement
'gratuit à cette adresse :
' http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q224351
'
'Le code ci-dessous permet de récupérer un tableau de 21 des propriétés
'd'un fichier ou la valeur d'une des propriétés accessibles.
'A noter enfin que ce code fonctionne avec d'autres applications (Word par
ex).
Sub test()
Dim Fich$, S$, Arr
Fich = "D:fsdatas 0Mes Docs ExcelTestDataToRead.xls"
Arr = ReadProperties(Fich)
Sheets.Add
For i = LBound(Arr) To UBound(Arr)
Cells(i + 1, "a").Value = NomsDesPropriétés(i)
Cells(i + 1, "b").Value = Arr(i)
Next
End Sub
'renvoie dans un tableau 21 des propriétés d'un fichier
Function ReadProperties(CheminAcces$)
Dim DSO As Object
Dim ArrProps
Set DSO = CreateObject("DSOFile.OleDocumentProperties")
With DSO
.Open (CheminAcces): NomDoc = .Name
LectureSeule = .IsReadOnly: Chemin = .Path
On Error Resume Next
IDProgramme = .progID
On Error GoTo 0
End With
With DSO.SummaryProperties
'ceci peut être modifié pour lire plus de propriétés
ArrProps = _
Array(.ApplicationName, .Author, .Category, .CharacterCount, _
.Comments, .Company, .DateCreated, .DateLastPrinted, _
.DateLastSaved, .LastSavedBy, NomDoc, .PageCount, _
LectureSeule, Chemin, IDProgramme, .SharedDocument, _
.Subject, .Template, .Title, .Version, .WordCount)
End With
DSO.Close
ReadProperties = ArrProps
End Function
Function NomsDesPropriétés()
NomsDesPropriétés = _
Array("Application", "Auteur", "Catégorie", _
"Nombre de caractères", "Commentaires", "Entreprise", _
"Date de création", "Date dernière impression", _
"Date dernier enregistrement", "Dernier enregistrement par", _
"Nom", "Nombre de pages", "Lecture seule", "Chemin", _
"Référence de la classe", "Document partagé", _
"Sujet", "Modèle", "Titre", "Version", "Nombre de mots")
End Function
'======================================= >
(testé avec Excel 2003 et 2007)
Par ailleurs, pour récupérer avec le code de Denis le titre ou la catégorie
il faut augmenter un peu le nombre de champs renvoyés en modifiant la ligne :
For A = 1 To 14
Remplace par exemple 14 par 19, ou par 35 si des propriétés "multimedia"
t'intéressent.
FS