Comment, en vba, obtenir les propriétés avancées d'un docume

Fermé
Dadoo57 - 16 mars 2023 à 11:40
 Dadoo57 - 22 mars 2023 à 11:57

Bonjour,

Quelqu'un saurait comment, en vba, obtenir les propriétés avancées d'un document .docx fermé ?

CreateObject("Scripting.fileSystemObject") ou CreateObject("Shell.Application") permet d'obtenir certaines propriétés standard, mais pas toutes les propriétés (par exemple le nom du Modèle .dotm utilisé pour la création du document) que l'on trouve dans l'onglet Détails de la fenêtre Propriétés d'un fichier (c-à-d : clic droit sur le fichier, puis Propriétés, puis l'onglet Détails).

Cordialement,
David

3 réponses

yg_be Messages postés 23364 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 3 décembre 2024 Ambassadeur 1 556
16 mars 2023 à 12:11
0

Merci pour ton retour !

Je crois que c'est pour un document ouvert ! Mais je souhaite récupérer les propriétés avancées d'un document fermé, sans l'ouvrir.

0
yg_be Messages postés 23364 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 3 décembre 2024 1 556 > Dadoo57
16 mars 2023 à 13:02

Je ne pense pas que cela soit possible sans l'ouvrir.
Pourquoi le programme ne peut-il ouvrir le document?

0
Dadoo57 > yg_be Messages postés 23364 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 3 décembre 2024
16 mars 2023 à 14:25

Le programme peut bien sur ouvrir le document, mais ce que j'ai besoin c'est d'avoir l'info en question, avant de l'ouvrir !

0
yg_be Messages postés 23364 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 3 décembre 2024 1 556 > Dadoo57
16 mars 2023 à 17:01

Le programme peut donc ouvrir le document, mais il doit afficher l'information avant de l'ouvrir?

0

Oui, je veux récupérer l'information (nom du modèle de création) sur un document fermé.  

0
yg_be Messages postés 23364 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 3 décembre 2024 1 556
16 mars 2023 à 17:31

Et le programme peut-il ouvrir ce document, et le refermer, ou doit-il rester fermé?

0
Dadoo57 > yg_be Messages postés 23364 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 3 décembre 2024
Modifié le 16 mars 2023 à 18:42

non, pour récupérer la valeur, le document ne doit pas être ouvert et affiché à l'écran.

0
yg_be Messages postés 23364 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 3 décembre 2024 1 556 > Dadoo57
16 mars 2023 à 21:43

Et si jamais il y avait moyen de l'ouvrir sans que cela ne soit visible à l'écran?

Peux-tu donner plus d'information?

0
Dadoo57 > yg_be Messages postés 23364 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 3 décembre 2024
16 mars 2023 à 22:08

En fait non, je dois avant de l'ouvrir, vérifier une condition, et si c'est bon, je l'ouvre. C'est là toute la difficulté :-)

0
yg_be Messages postés 23364 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 3 décembre 2024 1 556 > Dadoo57
17 mars 2023 à 08:57

Qu'est-ce qui empêche de l'ouvrir un instant afin de vérifier cette propriété?

0

En fait, j'ai trouvé une solution. A la création de chaque document, je crée un mot-clé avec  "ActiveDocument.BuiltInDocumentProperties("Keywords").Value = ..." que je peux ensuite récupérer lorsque le document est fermé.

Merci pour ta collaboration !

Bonne Journée,

David

0
yg_be Messages postés 23364 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 3 décembre 2024 1 556
20 mars 2023 à 20:35

Comment récupères-tu cette valeur sans ouvrir le document?

0
Dadoo57 > yg_be Messages postés 23364 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 3 décembre 2024
22 mars 2023 à 11:57

J'ai les 2 fonctions suivantes :

Public Function M2_GetKeywordPropertyValue_4ClosedDoc(ByVal sFile As String, ByVal keyOfProp As String) As String
    Dim oDic As Object
    Dim k As Variant
    Dim i As Integer
    
    Dim chaine As String
    Dim valeurs() As String
    Dim paire() As String
    
    Set oDic = M2_GetFileProperties(sFile)
    
    For Each k In oDic.Keys
        
        If k = "Mots clés" Then ' attention "Mots clés" est en français !!!
            chaine = oDic(k)
            
            If Left(chaine, 13) = keyOfProp Then
                
               'Récupère la valeur en fonction de sa clé
               '..... ..................................
                valeurs = Split(chaine, ";")

                For i = 0 To UBound(valeurs)
                    
                    paire = Split(valeurs(i), ":")
                    
                    If LCase(Trim(paire(0))) = LCase(Trim(keyOfProp)) Then
                        chaine = paire(1) ' La clé a été trouvée, récupération de la valeur correspondante
                        Exit For
                    End If
                Next i
                '.....
                                
                M2_GetKeywordPropertyValue_4ClosedDoc = chaine
                Exit Function
            End If
        End If
    Next

    If Not oDic Is Nothing Then Set oDic = Nothing
End Function

' -----------------------------

Function M2_GetFileProperties(ByVal sFile As String) As Object
    On Error GoTo Error_Handler
    Dim oDic                  As Object    'Scripting.Dictionary
    Dim oShell                As Object    'Shell
    Dim oFolder               As Object    'Folder
    Dim oFolderItem           As Object    'FolderItem
    Dim sFilePath             As String
    Dim sFileName             As String
    Dim i                     As Long
    Dim vPropValue            As Variant

    sFilePath = Left(sFile, InStrRev(sFile, "\") - 1)
    sFileName = Right(sFile, Len(sFile) - InStrRev(sFile, "\"))

    Set oDic = CreateObject("Scripting.Dictionary")
    Set oShell = CreateObject("Shell.Application")
    Set oFolder = oShell.NameSpace(CStr(sFilePath))

    If (Not oFolder Is Nothing) Then
        Set oFolderItem = oFolder.ParseName(sFileName)
        For i = 0 To 320 'This could be bumped up in case MS increase the number again
            
            vPropValue = oFolder.GetDetailsOf(oFolderItem, i)
            
            If Trim(vPropValue & vbNullString) <> "" Then
                vPropValue = Replace(Replace(Replace(Replace(vPropValue, ChrW(8236), ""), ChrW(8234), ""), ChrW(8207), ""), ChrW(8206), "")
                oDic.Add oFolder.GetDetailsOf(oFolder.Items, i), vPropValue
            End If
        Next
    End If

    Set M2_GetFileProperties = oDic

End Function

0