OVH Cloud OVH Cloud

Re à Frédéric Sigonneau fil du 13/12/2004

9 réponses
Avatar
Christian.L
Bonjour Frédéric

Je m'excuse de répondre par un nouveau post, mais quand je répond dans le
fil du 13/12/2004, le serveur efface mon message.

Voila,

J'ai essayé une bonne partie du week end les codes de ton site Internet

http://frederic.sigonneau.free.fr/code/Fichiers/ProprietesClasseurFerme.txt

mais je pense que la bibliothèque a été modifiée car c'est la version :
DSO OLE Document Properties Reader 2.0 qui est chargée
au lieu de
DS: OLE Document Properties 1.4 Object Library

En conséquence, a la ligne " Set DSO =
CreateObject("DSOleFile.PropertyReader")"
se produit une erreur d'exécution :
"Erreur d'exécution '429':
Un composant ActiveX ne peut pas créer d'objet"

Encore merci

C.L.

9 réponses

Avatar
Clément Marcotte
Bonjour,

Après une recherche sur le site de MS, il semblerait que la
bibliothèque DSOFile soit à la version 2 depuis le début décembre
2004. Cette nouvelle version ne serait pas supportée en bas de Windows
ME.


"Christian.L" a écrit dans le message de
news:%
Bonjour Frédéric

Je m'excuse de répondre par un nouveau post, mais quand je répond
dans le

fil du 13/12/2004, le serveur efface mon message.

Voila,

J'ai essayé une bonne partie du week end les codes de ton site
Internet



http://frederic.sigonneau.free.fr/code/Fichiers/ProprietesClasseurFerme.txt


mais je pense que la bibliothèque a été modifiée car c'est la
version :

DSO OLE Document Properties Reader 2.0 qui est chargée
au lieu de
DS: OLE Document Properties 1.4 Object Library

En conséquence, a la ligne " Set DSO > CreateObject("DSOleFile.PropertyReader")"
se produit une erreur d'exécution :
"Erreur d'exécution '429':
Un composant ActiveX ne peut pas créer d'objet"

Encore merci

C.L.




Avatar
Clément Marcotte
Rebonjour,

J'ai essayé la nouvelle version de la dll et le programme de
démonstration VB qui vient avec, avec Windows98 SE et VB6, sur le
nombre "mirobolant" (enfin, cela dépend du point de vue) de 2
classeurs Excel et cela a fonctionné.

DSans le programme Démo VB6, avec la référence cochée (early binding)
la dll est initialisée comme cela:

Dans l'entête du module:

Private m_oDocumentProps As DSOFile.OleDocumentProperties

Dans la proédure:

Set m_oDocumentProps = New DSOFile.OleDocumentProperties

Donc, avec le Late Binding (sans cocher la référence), et ton
programme à toi, et la nouvelle dll, tu devrais avoir quelque chose
du genre, en croisant les doigts:

Set DSO = CreateObject("DSOFile.OleDocumentProperties")

Chez moi, les deux versions de la dll sont dans des dossiers
différents, et cela semble cohabiter.

Je t'ai mis l'ancienne version là, si t tu préfères essayer l'ancienne
version avec le programme actuel:

http://cjoint.com/?mtwLRekCyv




"Christian.L" a écrit dans le message de
news:%
Bonjour Frédéric

Je m'excuse de répondre par un nouveau post, mais quand je répond
dans le

fil du 13/12/2004, le serveur efface mon message.

Voila,

J'ai essayé une bonne partie du week end les codes de ton site
Internet



http://frederic.sigonneau.free.fr/code/Fichiers/ProprietesClasseurFerme.txt


mais je pense que la bibliothèque a été modifiée car c'est la
version :

DSO OLE Document Properties Reader 2.0 qui est chargée
au lieu de
DS: OLE Document Properties 1.4 Object Library

En conséquence, a la ligne " Set DSO > CreateObject("DSOleFile.PropertyReader")"
se produit une erreur d'exécution :
"Erreur d'exécution '429':
Un composant ActiveX ne peut pas créer d'objet"

Encore merci

C.L.




Avatar
Frédéric Sigonneau
Salut Clément,

Merci du relais. Je n'ai pas encore fait d'essai mais je suis surpris qu'une
version + récente ne soit pas compatible avec une plus ancienne (c'est le sens
de ma réponse au demandeur dans son premier fil).
A suivre.

FS
---
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://frederic.sigonneau.free.fr
Si votre question sur Excel est urgente, évitez ma bal !

Rebonjour,

J'ai essayé la nouvelle version de la dll et le programme de
démonstration VB qui vient avec, avec Windows98 SE et VB6, sur le
nombre "mirobolant" (enfin, cela dépend du point de vue) de 2
classeurs Excel et cela a fonctionné.

DSans le programme Démo VB6, avec la référence cochée (early binding)
la dll est initialisée comme cela:

Dans l'entête du module:

Private m_oDocumentProps As DSOFile.OleDocumentProperties

Dans la proédure:

Set m_oDocumentProps = New DSOFile.OleDocumentProperties

Donc, avec le Late Binding (sans cocher la référence), et ton
programme à toi, et la nouvelle dll, tu devrais avoir quelque chose
du genre, en croisant les doigts:

Set DSO = CreateObject("DSOFile.OleDocumentProperties")

Chez moi, les deux versions de la dll sont dans des dossiers
différents, et cela semble cohabiter.

Je t'ai mis l'ancienne version là, si t tu préfères essayer l'ancienne
version avec le programme actuel:

http://cjoint.com/?mtwLRekCyv




"Christian.L" a écrit dans le message de
news:%

Bonjour Frédéric

Je m'excuse de répondre par un nouveau post, mais quand je répond


dans le

fil du 13/12/2004, le serveur efface mon message.

Voila,

J'ai essayé une bonne partie du week end les codes de ton site


Internet


http://frederic.sigonneau.free.fr/code/Fichiers/ProprietesClasseurFerme.txt


mais je pense que la bibliothèque a été modifiée car c'est la


version :

DSO OLE Document Properties Reader 2.0 qui est chargée
au lieu de
DS: OLE Document Properties 1.4 Object Library

En conséquence, a la ligne " Set DSO >>CreateObject("DSOleFile.PropertyReader")"
se produit une erreur d'exécution :
"Erreur d'exécution '429':
Un composant ActiveX ne peut pas créer d'objet"

Encore merci

C.L.








Avatar
Clément Marcotte
Bonjour,

Merci du relais. Je n'ai pas encore fait d'essai mais je suis
surpris qu'une

version + récente ne soit pas compatible avec une plus ancienne
(c'est le sens

de ma réponse au demandeur dans son premier fil).
A suivre.


Il y a effectivement quelques "crocheries" dans l'histoire; notamment
que dans la liste des propriétés supportées. Dans la liste de l'array
de la procédure de ton site, il faut en supprimer 4. (Pas pris le
temps de vérifier si on peut les récupérer du côté des "Custom", mais
elles ne le sont plus du côté des "Built-in" (À moins que ce ne soit
dû à mon Windows "antique")

Également, toujours de la liste de l'array, il y en a 2 dont le nom a
été modifié.

Je le mentionne en commentaires dans le module réécrit, que j'ai
ajouté, un plus bas, dans le message.

Il y a également l'ajout d'une méthode Open pour accéder au classeur
(ou au fichier en cause).

J'ai repris laligne de la méthode open du démo VB6 de la nouvelle
version. En VB6 on peut ouvrir le fichier en lecture seule, la ligne
d'appel en tient compte. On pourrait peut-être la modofier pour VBA,
mais je n'ai pas essayé.

Voici donc le "module" obtenu en reprenant la procédure originale de
ton site et adaptée à la sauce 2.0


Option Explicit


Sub test()
Dim Fich$, S$
Fich = "C:Mes DocumentsMerlin1.xls"
MsgBox ReadProperty(Fich, 9)
MsgBox ReadProperties(Fich)(9)
End Sub

'renvoie directement l'une des propriétés
Function ReadProperty(CheminAcces$, NumProp As Byte)
'Version DSOFile :2.0
Dim DSO As Object
Dim ArrProps
Dim oSummProps As Object
Dim fOpenReadOnly As Boolean, dsoOptionOpenReadOnlyIfNoWriteAccess
Set DSO = CreateObject("DSOFile.OleDocumentProperties")



' Here is where we load the document properties for the file.
' Depending on the read-only option set in the Open dialog, we
' can open for editing or just read-only. If you pass False to
' read-only flag and the file cannot be edited (because of access)
' an error will occur. For simple case, we can pass the optional flag
' ask the component to switch to read-only if file is protected.

'Il faut "ouvrir" le fichier pour qu'il soit reconnu par la dll
'Instruction prise directement d'un programme VB6
'A fonctionné tel quel avec VBA.

DSO.Open CheminAcces$, fOpenReadOnly,
dsoOptionOpenReadOnlyIfNoWriteAccess

' Obtenir le propriétés Standard
'Les BuiltinProperties
'Notez qu'il y a des différences entre les deux versions
'de la dll. De la liste originale du site de Frédéric,
'il faut changer appName pour ApplicationName, LastEditedBy
'par LastSavedBy. Toujours en partant de la procédure du
'site de Frédéric, il faut enlever IsReadOnly,Location,
'Name et Hasmacros.
Set oSummProps = DSO.SummaryProperties

With oSummProps

'ceci peut être modifié pour lire plus de propriétés
ArrProps = Array("", .ApplicationName, .Author, .Comments, _
.Company, .DateCreated, .DateLastPrinted, _
.DateLastSaved, .LastSavedBy, _
.Version)
End With

ReadProperty = ArrProps(NumProp)

End Function

'renvoie dans un tableau 9 des propriétés d'un fichier
Function ReadProperties(CheminAcces$)
'Version DSOFile :2.0
Dim DSO As Object
Dim ArrProps
Dim oSummProps As Object
Dim fOpenReadOnly As Boolean, dsoOptionOpenReadOnlyIfNoWriteAccess
Set DSO = CreateObject("DSOFile.OleDocumentProperties")
DSO.Open CheminAcces$, fOpenReadOnly,
dsoOptionOpenReadOnlyIfNoWriteAccess
Set oSummProps = DSO.SummaryProperties

With oSummProps

'ceci peut être modifié pour lire plus de propriétés
ArrProps = Array("", .ApplicationName, .Author, .Comments, _
.Company, .DateCreated, .DateLastPrinted, _
.DateLastSaved, .LastSavedBy, _
.Version)
End With

ReadProperties = ArrProps

End Function

Avatar
Clément Marcotte
Bonjour,

Excusez pardon, la réponse précédente mérite quelques nuances.

Je ne sais pas, si le programme en question est fourni avec l'exemple
qu'il y a dans ce coin-là

http://msdn.microsoft.com/msdnmag/issues/1200/TypeLib/default.aspx


ou s'il est fourni avec Visual Basic, mais, en utilisant TypeLibInfo,
j'ai pu décortiquer d'un peu plus près les deux versions de la dll
DSOFile.

Pour ce qui nous préoccupe pour l'intant, la version 1.4 a une seule
routine pour lire toutes les propriétés "buil-in", alors que la
version 2.0 en a 2.

Dans la version 2, il y a les "Summary Properties" qui "collent" aux
fenêtres propriétés des fichiers Office et les OLEProperties qui
donnent des propriétés absentes, des fenêtres propriétés, et qui ont
récupéré certaines des propriétés qui se retrouvaient dans la
procédure du site de Frédéric.

P.S. Pour Frédéric. Quand j'ouvre regedit et que je fais une recherche
pour DSOFile, les deux versions on un CSLID - GUID différent.


"Clément Marcotte" a écrit dans le
message de news:
Bonjour,

Merci du relais. Je n'ai pas encore fait d'essai mais je suis
surpris qu'une

version + récente ne soit pas compatible avec une plus ancienne
(c'est le sens

de ma réponse au demandeur dans son premier fil).
A suivre.


Il y a effectivement quelques "crocheries" dans l'histoire;
notamment

que dans la liste des propriétés supportées. Dans la liste de
l'array

de la procédure de ton site, il faut en supprimer 4. (Pas pris le
temps de vérifier si on peut les récupérer du côté des "Custom",
mais

elles ne le sont plus du côté des "Built-in" (À moins que ce ne soit
dû à mon Windows "antique")

Également, toujours de la liste de l'array, il y en a 2 dont le nom
a

été modifié.

Je le mentionne en commentaires dans le module réécrit, que j'ai
ajouté, un plus bas, dans le message.

Il y a également l'ajout d'une méthode Open pour accéder au classeur
(ou au fichier en cause).

J'ai repris laligne de la méthode open du démo VB6 de la nouvelle
version. En VB6 on peut ouvrir le fichier en lecture seule, la ligne
d'appel en tient compte. On pourrait peut-être la modofier pour VBA,
mais je n'ai pas essayé.

Voici donc le "module" obtenu en reprenant la procédure originale de
ton site et adaptée à la sauce 2.0


Option Explicit


Sub test()
Dim Fich$, S$
Fich = "C:Mes DocumentsMerlin1.xls"
MsgBox ReadProperty(Fich, 9)
MsgBox ReadProperties(Fich)(9)
End Sub

'renvoie directement l'une des propriétés
Function ReadProperty(CheminAcces$, NumProp As Byte)
'Version DSOFile :2.0
Dim DSO As Object
Dim ArrProps
Dim oSummProps As Object
Dim fOpenReadOnly As Boolean, dsoOptionOpenReadOnlyIfNoWriteAccess
Set DSO = CreateObject("DSOFile.OleDocumentProperties")



' Here is where we load the document properties for the file.
' Depending on the read-only option set in the Open dialog, we
' can open for editing or just read-only. If you pass False to
' read-only flag and the file cannot be edited (because of access)
' an error will occur. For simple case, we can pass the optional
flag

' ask the component to switch to read-only if file is protected.

'Il faut "ouvrir" le fichier pour qu'il soit reconnu par la dll
'Instruction prise directement d'un programme VB6
'A fonctionné tel quel avec VBA.

DSO.Open CheminAcces$, fOpenReadOnly,
dsoOptionOpenReadOnlyIfNoWriteAccess

' Obtenir le propriétés Standard
'Les BuiltinProperties
'Notez qu'il y a des différences entre les deux versions
'de la dll. De la liste originale du site de Frédéric,
'il faut changer appName pour ApplicationName, LastEditedBy
'par LastSavedBy. Toujours en partant de la procédure du
'site de Frédéric, il faut enlever IsReadOnly,Location,
'Name et Hasmacros.
Set oSummProps = DSO.SummaryProperties

With oSummProps

'ceci peut être modifié pour lire plus de propriétés
ArrProps = Array("", .ApplicationName, .Author, .Comments, _
.Company, .DateCreated, .DateLastPrinted, _
.DateLastSaved, .LastSavedBy, _
.Version)
End With

ReadProperty = ArrProps(NumProp)

End Function

'renvoie dans un tableau 9 des propriétés d'un fichier
Function ReadProperties(CheminAcces$)
'Version DSOFile :2.0
Dim DSO As Object
Dim ArrProps
Dim oSummProps As Object
Dim fOpenReadOnly As Boolean, dsoOptionOpenReadOnlyIfNoWriteAccess
Set DSO = CreateObject("DSOFile.OleDocumentProperties")
DSO.Open CheminAcces$, fOpenReadOnly,
dsoOptionOpenReadOnlyIfNoWriteAccess
Set oSummProps = DSO.SummaryProperties

With oSummProps

'ceci peut être modifié pour lire plus de propriétés
ArrProps = Array("", .ApplicationName, .Author, .Comments, _
.Company, .DateCreated, .DateLastPrinted, _
.DateLastSaved, .LastSavedBy, _
.Version)
End With

ReadProperties = ArrProps

End Function







Avatar
Clément Marcotte
Bonjour,

Juste avant le dodo, et après les recherches que je raconte, un peu
plus haut. Voici la version DSOFile 2.0 qui remplace mon autre qui
"remplaçait" (peut-être) celle du site de Frédéric. J'ai du faire
quelques réaménagements dan l'ordre initial et dans les noms des
propriétés. En fait Microsoft, semble avoir décidé de calquer les noms
des propriétés sur celles des fenêtres "Propriétés" d'Office. Ils ont
donc changé quelques noms et zigouillé la propriété Hasmacros

Donc ces procédures remplacent celles que j'avais envoyées
précédemment:

Option Explicit


Sub test()
Dim Fich$, S$
Fich = "C:Mes DocumentsMerlin1.xls"
MsgBox ReadProperty(Fich, 12)
MsgBox ReadProperties(Fich)(12)
End Sub

'renvoie directement l'une des propriétés
Function ReadProperty(CheminAcces$, NumProp As Byte)
'Version DSOFile :2.0
Dim DSO As Object
Dim ArrProps
Dim oSummProps As Object
Dim fOpenReadOnly As Boolean, dsoOptionOpenReadOnlyIfNoWriteAccess
Set DSO = CreateObject("DSOFile.OleDocumentProperties")
' Here is where we load the document properties for the file.
' Depending on the read-only option set in the Open dialog, we
' can open for editing or just read-only. If you pass False to
' read-only flag and the file cannot be edited (because of access)
' an error will occur. For simple case, we can pass the optional flag
' ask the component to switch to read-only if file is protected.
'Il faut "ouvrir" le fichier pour qu'il soit reconnu par la dll
DSO.Open CheminAcces$, fOpenReadOnly,
dsoOptionOpenReadOnlyIfNoWriteAccess
'Obtenir les propriétés
'Les BuiltinProperties d'Office sont retournées
'par les "SummaryProperties". Les autres viennent de
'l'objet lui-même.
'Notez qu'il y a des différences entre les deux versions
'de la dll. De la liste originale du site de Frédéric,
'il faut changer appName pour ApplicationName, LastEditedBy
'par LastSavedBy et place par path.
'De plus, les propriétés path, name et IsReadOnly ne sont pas
'retournées par "SummaryProperties, mais par l'objet racine
'lui-même. Toujours en partant de la procédure du
'site de Frédéric, il faut enlever Hasmacros qui est disparue
'dans la brume.
Set oSummProps = DSO.SummaryProperties
Select Case NumProp
Case 10
'Propriété Name, non incluse dans les "SummaryProperties"
ReadProperty = DSO.Name
Case 11
'Propriété Path, non incluse dans "SummaryProperties"
ReadProperty = DSO.Path
Case 12
'Propriété IsReadOnly non incluse dans les "Summary Properties"
ReadProperty = DSO.isreadonly
Case Else
'Propriétés incluses dans les "Summary Properties"
With oSummProps
'ceci peut être modifié pour lire plus de propriétés
ArrProps = Array("", .ApplicationName, .Author, .Comments, _
.Company, .DateCreated, .DateLastPrinted, _
.DateLastSaved, .LastSavedBy, _
.Version)
End With
ReadProperty = ArrProps(NumProp)
End Select

End Function


Function ReadProperties(CheminAcces$)
'renvoie dans un tableau 12 des propriétés d'un fichier
'Version DSOFile :2.0
'Les BuiltinProperties d'Office sont retournées
'par les "SummaryProperties. Les autres viennent de
'l'objet lui-même.
'Notez qu'il y a des différences entre les deux versions
'de la dll. De la liste originale du site de Frédéric,
'il faut changer appName pour ApplicationName, LastEditedBy
'par LastSavedBy et place par path.
'De plus, les propriétés path, name et IsReadOnly ne sont pas
'retournées par "SummaryProperties, mais par l'objet racine
'lui-même. Toujours en partant de la procédure du
'site de Frédéric, il faut enlever Hasmacros qui est disparue
'dans la brume.
Dim DSO As Object
Dim ArrProps
Dim oSummProps As Object
Dim fOpenReadOnly As Boolean, dsoOptionOpenReadOnlyIfNoWriteAccess
Set DSO = CreateObject("DSOFile.OleDocumentProperties")
DSO.Open CheminAcces$, fOpenReadOnly,
dsoOptionOpenReadOnlyIfNoWriteAccess
Set oSummProps = DSO.SummaryProperties

With oSummProps

'ceci peut être modifié pour lire plus de propriétés
'En autant que ce sont des prropriétés "Summary"
ArrProps = Array("", .ApplicationName, .Author, .Comments, _
.Company, .DateCreated, .DateLastPrinted, _
.DateLastSaved, .LastSavedBy, _
.Version, "", "", "")
End With
'Propriétés non incluses dans les "Summary Properties"
ArrProps(10) = DSO.Name
ArrProps(11) = DSO.Path
ArrProps(12) = DSO.isreadonly
ReadProperties = ArrProps

End Function

"Christian.L" a écrit dans le message de
news:%
Bonjour Frédéric

Je m'excuse de répondre par un nouveau post, mais quand je répond
dans le

fil du 13/12/2004, le serveur efface mon message.

Voila,

J'ai essayé une bonne partie du week end les codes de ton site
Internet



http://frederic.sigonneau.free.fr/code/Fichiers/ProprietesClasseurFerme.txt


mais je pense que la bibliothèque a été modifiée car c'est la
version :

DSO OLE Document Properties Reader 2.0 qui est chargée
au lieu de
DS: OLE Document Properties 1.4 Object Library

En conséquence, a la ligne " Set DSO > CreateObject("DSOleFile.PropertyReader")"
se produit une erreur d'exécution :
"Erreur d'exécution '429':
Un composant ActiveX ne peut pas créer d'objet"

Encore merci

C.L.




Avatar
Christian.L
Bonjour Clément et Frédéric (dans l'ordre alphabétique)

Je vous suis gré tous les deux pour vos efforts et j'en profite ( et je
pense être un peu un porte parole) pour vous
remercier chaleureusement de votre contribution a ce forum

Ta solution, Clément fonctionne parfaitement, mais malheureusement comme je
le pensais, il n'est possible de lire les propriétés que des fichiers
Office.

En ce qui me concerne, je suis en train de scanner les photos d'enfance de
ma belle famille, et je pensais mettre dans le commentaire du fichier de
chaque photo la légende et la date de prise de vue de celle ci.
Mes recherches sur l'accès aux propriétés des fichiers, avaient pour but
d'automatiser cette tache.

Merci encore et bonne nuit à Clément

C.L.



"Clément Marcotte" a écrit dans le message
de news:
Bonjour,

Juste avant le dodo, et après les recherches que je raconte, un peu
plus haut. Voici la version DSOFile 2.0 qui remplace mon autre qui
"remplaçait" (peut-être) celle du site de Frédéric. J'ai du faire
quelques réaménagements dan l'ordre initial et dans les noms des
propriétés. En fait Microsoft, semble avoir décidé de calquer les noms
des propriétés sur celles des fenêtres "Propriétés" d'Office. Ils ont
donc changé quelques noms et zigouillé la propriété Hasmacros

Donc ces procédures remplacent celles que j'avais envoyées
précédemment:

Option Explicit


Sub test()
Dim Fich$, S$
Fich = "C:Mes DocumentsMerlin1.xls"
MsgBox ReadProperty(Fich, 12)
MsgBox ReadProperties(Fich)(12)
End Sub

'renvoie directement l'une des propriétés
Function ReadProperty(CheminAcces$, NumProp As Byte)
'Version DSOFile :2.0
Dim DSO As Object
Dim ArrProps
Dim oSummProps As Object
Dim fOpenReadOnly As Boolean, dsoOptionOpenReadOnlyIfNoWriteAccess
Set DSO = CreateObject("DSOFile.OleDocumentProperties")
' Here is where we load the document properties for the file.
' Depending on the read-only option set in the Open dialog, we
' can open for editing or just read-only. If you pass False to
' read-only flag and the file cannot be edited (because of access)
' an error will occur. For simple case, we can pass the optional flag
' ask the component to switch to read-only if file is protected.
'Il faut "ouvrir" le fichier pour qu'il soit reconnu par la dll
DSO.Open CheminAcces$, fOpenReadOnly,
dsoOptionOpenReadOnlyIfNoWriteAccess
'Obtenir les propriétés
'Les BuiltinProperties d'Office sont retournées
'par les "SummaryProperties". Les autres viennent de
'l'objet lui-même.
'Notez qu'il y a des différences entre les deux versions
'de la dll. De la liste originale du site de Frédéric,
'il faut changer appName pour ApplicationName, LastEditedBy
'par LastSavedBy et place par path.
'De plus, les propriétés path, name et IsReadOnly ne sont pas
'retournées par "SummaryProperties, mais par l'objet racine
'lui-même. Toujours en partant de la procédure du
'site de Frédéric, il faut enlever Hasmacros qui est disparue
'dans la brume.
Set oSummProps = DSO.SummaryProperties
Select Case NumProp
Case 10
'Propriété Name, non incluse dans les "SummaryProperties"
ReadProperty = DSO.Name
Case 11
'Propriété Path, non incluse dans "SummaryProperties"
ReadProperty = DSO.Path
Case 12
'Propriété IsReadOnly non incluse dans les "Summary Properties"
ReadProperty = DSO.isreadonly
Case Else
'Propriétés incluses dans les "Summary Properties"
With oSummProps
'ceci peut être modifié pour lire plus de propriétés
ArrProps = Array("", .ApplicationName, .Author, .Comments, _
.Company, .DateCreated, .DateLastPrinted, _
.DateLastSaved, .LastSavedBy, _
.Version)
End With
ReadProperty = ArrProps(NumProp)
End Select

End Function


Function ReadProperties(CheminAcces$)
'renvoie dans un tableau 12 des propriétés d'un fichier
'Version DSOFile :2.0
'Les BuiltinProperties d'Office sont retournées
'par les "SummaryProperties. Les autres viennent de
'l'objet lui-même.
'Notez qu'il y a des différences entre les deux versions
'de la dll. De la liste originale du site de Frédéric,
'il faut changer appName pour ApplicationName, LastEditedBy
'par LastSavedBy et place par path.
'De plus, les propriétés path, name et IsReadOnly ne sont pas
'retournées par "SummaryProperties, mais par l'objet racine
'lui-même. Toujours en partant de la procédure du
'site de Frédéric, il faut enlever Hasmacros qui est disparue
'dans la brume.
Dim DSO As Object
Dim ArrProps
Dim oSummProps As Object
Dim fOpenReadOnly As Boolean, dsoOptionOpenReadOnlyIfNoWriteAccess
Set DSO = CreateObject("DSOFile.OleDocumentProperties")
DSO.Open CheminAcces$, fOpenReadOnly,
dsoOptionOpenReadOnlyIfNoWriteAccess
Set oSummProps = DSO.SummaryProperties

With oSummProps

'ceci peut être modifié pour lire plus de propriétés
'En autant que ce sont des prropriétés "Summary"
ArrProps = Array("", .ApplicationName, .Author, .Comments, _
.Company, .DateCreated, .DateLastPrinted, _
.DateLastSaved, .LastSavedBy, _
.Version, "", "", "")
End With
'Propriétés non incluses dans les "Summary Properties"
ArrProps(10) = DSO.Name
ArrProps(11) = DSO.Path
ArrProps(12) = DSO.isreadonly
ReadProperties = ArrProps

End Function

"Christian.L" a écrit dans le message de
news:%
Bonjour Frédéric

Je m'excuse de répondre par un nouveau post, mais quand je répond
dans le

fil du 13/12/2004, le serveur efface mon message.

Voila,

J'ai essayé une bonne partie du week end les codes de ton site
Internet





http://frederic.sigonneau.free.fr/code/Fichiers/ProprietesClasseurFerme.txt


mais je pense que la bibliothèque a été modifiée car c'est la
version :

DSO OLE Document Properties Reader 2.0 qui est chargée
au lieu de
DS: OLE Document Properties 1.4 Object Library

En conséquence, a la ligne " Set DSO > > CreateObject("DSOleFile.PropertyReader")"
se produit une erreur d'exécution :
"Erreur d'exécution '429':
Un composant ActiveX ne peut pas créer d'objet"

Encore merci

C.L.







Avatar
Michel Pierron
Bonjour Christian.L;
Si tu as XP, tu peux récupérer les propriétés de n'importe quel fichier
avec:

Sub Test()
MsgBox GetProperties("c:windowsclock.avi"), 64
'MsgBox GetProperties("c:classeur1.xls"), 64
End Sub

Private Function GetProperties(ByVal FullPathFile$) As String
If Dir(FullPathFile) = "" Then Exit Function
Dim PathFile$, FileName$, i%, Info$
Dim oFolder As Object, oItem As Object
i = lPos(FullPathFile, "")
PathFile = Left$(FullPathFile, i - 1)
FileName = Mid$(FullPathFile, i + 1)
Set oFolder = CreateObject("Shell.Application") _
.NameSpace(CStr(PathFile))
If oFolder Is Nothing Then Exit Function
With oFolder
Set oItem = .ParseName(CStr(FileName))
If oItem Is Nothing Then GoTo 1
For i = 0 To 34
If Len(.GetDetailsOf(oItem, i)) Then
GetProperties = GetProperties & .GetDetailsOf(oFolder, i) & ": "
GetProperties = GetProperties & .GetDetailsOf(oItem, i) & vbLf
End If
Next
End With
1: Set oItem = Nothing: Set oFolder = Nothing
End Function

Private Function lPos%(Chain$, Char$)
Dim iPos As Integer
Do
iPos = InStr(lPos + 1, Chain, Char, 1)
If iPos Then lPos = iPos Else Exit Do
Loop
End Function

Et si tu souhaites afficher la fenêtre des propriétés:
Private Declare Function ShellExecuteEX Lib "shell32.dll" Alias _
"ShellExecuteEx" (SEI As ShellExecuteInfo) As Long

Private Type ShellExecuteInfo
cbSize As Long
fMask As Long
hwnd As Long
lpVerb As String
lpFile As String
lpParameters As String
lpDirectory As String
nShow As Long
hInstApp As Long
lpIDList As Long
lpClass As String
hkeyClass As Long
dwHotKey As Long
hIcon As Long
hProcess As Long
End Type

Sub ShowProperties(sFileName)
Dim SEI As ShellExecuteInfo
With SEI
.cbSize = Len(SEI)
.fMask = &H44C
.hwnd = 0
.lpVerb = "properties"
.lpFile = sFileName
.lpParameters = vbNullChar
.lpDirectory = vbNullChar
.nShow = 0
.hInstApp = 0
.lpIDList = 0
End With
ShellExecuteEX SEI
End Sub

Sub TestShow()
ShowProperties "c:Classeur1.xls"
End Sub

MP

"Christian.L" a écrit dans le message de
news:%
Bonjour Frédéric

Je m'excuse de répondre par un nouveau post, mais quand je répond dans le
fil du 13/12/2004, le serveur efface mon message.

Voila,

J'ai essayé une bonne partie du week end les codes de ton site Internet


http://frederic.sigonneau.free.fr/code/Fichiers/ProprietesClasseurFerme.txt


mais je pense que la bibliothèque a été modifiée car c'est la version :
DSO OLE Document Properties Reader 2.0 qui est chargée
au lieu de
DS: OLE Document Properties 1.4 Object Library

En conséquence, a la ligne " Set DSO > CreateObject("DSOleFile.PropertyReader")"
se produit une erreur d'exécution :
"Erreur d'exécution '429':
Un composant ActiveX ne peut pas créer d'objet"

Encore merci

C.L.




Avatar
Christian.L
Bonjour Michel

Merci pour ta réponse

Cela marche bien, mais a priori ne permet pas de modifier une des propriétés
(en l'occurrence le commentaire)

C.L.


"Michel Pierron" a écrit dans le message de
news:
Bonjour Christian.L;
Si tu as XP, tu peux récupérer les propriétés de n'importe quel fichier
avec:

Sub Test()
MsgBox GetProperties("c:windowsclock.avi"), 64
'MsgBox GetProperties("c:classeur1.xls"), 64
End Sub

Private Function GetProperties(ByVal FullPathFile$) As String
If Dir(FullPathFile) = "" Then Exit Function
Dim PathFile$, FileName$, i%, Info$
Dim oFolder As Object, oItem As Object
i = lPos(FullPathFile, "")
PathFile = Left$(FullPathFile, i - 1)
FileName = Mid$(FullPathFile, i + 1)
Set oFolder = CreateObject("Shell.Application") _
.NameSpace(CStr(PathFile))
If oFolder Is Nothing Then Exit Function
With oFolder
Set oItem = .ParseName(CStr(FileName))
If oItem Is Nothing Then GoTo 1
For i = 0 To 34
If Len(.GetDetailsOf(oItem, i)) Then
GetProperties = GetProperties & .GetDetailsOf(oFolder, i) & ": "
GetProperties = GetProperties & .GetDetailsOf(oItem, i) & vbLf
End If
Next
End With
1: Set oItem = Nothing: Set oFolder = Nothing
End Function

Private Function lPos%(Chain$, Char$)
Dim iPos As Integer
Do
iPos = InStr(lPos + 1, Chain, Char, 1)
If iPos Then lPos = iPos Else Exit Do
Loop
End Function

Et si tu souhaites afficher la fenêtre des propriétés:
Private Declare Function ShellExecuteEX Lib "shell32.dll" Alias _
"ShellExecuteEx" (SEI As ShellExecuteInfo) As Long

Private Type ShellExecuteInfo
cbSize As Long
fMask As Long
hwnd As Long
lpVerb As String
lpFile As String
lpParameters As String
lpDirectory As String
nShow As Long
hInstApp As Long
lpIDList As Long
lpClass As String
hkeyClass As Long
dwHotKey As Long
hIcon As Long
hProcess As Long
End Type

Sub ShowProperties(sFileName)
Dim SEI As ShellExecuteInfo
With SEI
.cbSize = Len(SEI)
.fMask = &H44C
.hwnd = 0
.lpVerb = "properties"
.lpFile = sFileName
.lpParameters = vbNullChar
.lpDirectory = vbNullChar
.nShow = 0
.hInstApp = 0
.lpIDList = 0
End With
ShellExecuteEX SEI
End Sub

Sub TestShow()
ShowProperties "c:Classeur1.xls"
End Sub

MP

"Christian.L" a écrit dans le message de
news:%
Bonjour Frédéric

Je m'excuse de répondre par un nouveau post, mais quand je répond dans
le


fil du 13/12/2004, le serveur efface mon message.

Voila,

J'ai essayé une bonne partie du week end les codes de ton site Internet




http://frederic.sigonneau.free.fr/code/Fichiers/ProprietesClasseurFerme.txt


mais je pense que la bibliothèque a été modifiée car c'est la version :
DSO OLE Document Properties Reader 2.0 qui est chargée
au lieu de
DS: OLE Document Properties 1.4 Object Library

En conséquence, a la ligne " Set DSO > > CreateObject("DSOleFile.PropertyReader")"
se produit une erreur d'exécution :
"Erreur d'exécution '429':
Un composant ActiveX ne peut pas créer d'objet"

Encore merci

C.L.