IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Récupération du nom d'auteur d'un fichier [AC-2010]


Sujet :

VBA Access

  1. #1
    Membre habitué Avatar de Cabos
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    novembre 2010
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : novembre 2010
    Messages : 108
    Points : 156
    Points
    156
    Par défaut Récupération du nom d'auteur d'un fichier
    Bonjour,

    Je cherche à récupérer par code la propriété "Auteur" de divers fichiers (un peu de tout).

    Comme toujours, les renseignements fournis sur le site m'ont été très utiles, mais impossible de trouver une propriété directement issue de FSO pour retourner le nom d'auteur d'un fichier.

    Existe-t-il un moyen de contourner ce problème ? Via FSO ? Autre méthode ?

    Merci d'avance à toutes et tous pour votre aide.
    Selon les points de vue, on peut être un chic type ou juste un trou du c...

  2. #2
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Bonjour,

    Inspire toi de ça (l'auteur à l'indice 8)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    Set objShell = CreateObject ("Shell.Application")
    Set objFolder = objShell.Namespace ("C:")
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Dim arrHeaders(13)
    For i = 0 to 13
        arrHeaders(i) = objFolder.GetDetailsOf (objFolder.Items, i)
    Next
    For Each strFileName in objFolder.Items
        For i = 0 to 13
            If i <> 9 then
                Wscript.echo arrHeaders(i) _
                    & ": " & objFolder.GetDetailsOf (strFileName, i)
            End If
        Next
        Wscript.Echo
    Next

  3. #3
    Membre habitué Avatar de Cabos
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    novembre 2010
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : novembre 2010
    Messages : 108
    Points : 156
    Points
    156
    Par défaut
    Merci pc75,

    Tu passes donc par une autre méthode que FSO.

    Quelle est la déclaration de objShell et objFolder ?

    Dim objShell as .... ?
    Dim objFolder as .... ?

    Set objShell = CreateObject ("Shell.Application")
    Set objFolder = objShell.Namespace (Répertoire dont j'explore les fichiers)

    Pour chaque fichier de mon répertoire
    Auteur = objFolder.GetDetailsOf (objFolder.Items, 8)
    Next fichier

    C'est bien cela l'idée ?


    ... quelques essais plus tard ....

    J'ai déclaré objShell et objFolder as Object.

    Le programme ne reconnait pas du tout l'objet objFolder. La ligne Auteur = objFolder.GetDetailsOf (objFolder.Items, 8) se plante.

    Il y aurait une référence à activer préalablement ?
    Selon les points de vue, on peut être un chic type ou juste un trou du c...

  4. #4
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Re,

    Tu as testé ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Set objShell = CreateObject ("Shell.Application")
    Set objFolder = objShell.Namespace ("C:\excel")
    Dim arrHeaders(13)
    For i = 0 to 13
        arrHeaders(i) = objFolder.GetDetailsOf (objFolder.Items, i)
    Next
    For Each strFileName in objFolder.Items
                Wscript.echo arrHeaders(8) & ": " & objFolder.GetDetailsOf (strFileName, 8)
    Next

  5. #5
    Membre habitué Avatar de Cabos
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    novembre 2010
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : novembre 2010
    Messages : 108
    Points : 156
    Points
    156
    Par défaut
    Bonjour,

    Ca ne passe pas.

    J'ai copié le code que tu propose, sans rien autour, pour ne pas polluer, juste pour voir si ça s'exécutait correctement.

    Et ca bloque sur :

    arrHeaders(i) = objFolder.GetDetailsOf(objFolder.Items, i)

    "Variable objet ou variable de bloc With non définie". C'était le même problème avec mes tentatives d'insert de tes lignes dans mon code.

    ---

    Au temps pour moi : bien évidemment, il fallait que j'adapte le chemin d'accès à quelque chose d'existant chez moi. A partir de là, le renseignement du tableau se passe bien, mais c'est la ligne suivante qui bloque :

    Wscript.Echo arrHeaders(8) & ": " & objFolder.GetDetailsOf(strFilename, 8)

    Erreur : "Objet requis"

    ---

    Donc, en supprimant Wscript.echo, qui ne fonctionne pas, par un simple Msgbox, j'obtiens bien les infos nécessaires. Juste une précision : l'item est le n°10 : "Propriétaire" (le 8 c'est "Hors connexion").

    En intégrant ce code dans le mien, il me retourne qu'objFolder = Nothing. Le problème se passe donc dans son renseignement :

    Si je dis

    dim REPSTR as String
    dim objRDR as Scripting.Folder

    REPSTR = objRDR.Path
    Set objFolder = objShell.NameSpace(REPSTR)

    et que je teste les valeurs :

    objRDR = "J:\BT" (paramètre d'appel de la fonction)
    REPSTR = "J:\BT"
    objFolder = Nothing => forcément, plus loin, à l'appel de GetDetailsOf, ça plante.


    Par contre, si je dis :

    dim REPSTR as String
    dim objRDR as Scripting.Folder

    REPSTR = "J:\BT" (je force la valeur du répertoire)
    Set objFolder = objShell.NameSpace(REPSTR)

    Ca passe comme une lettre à la poste.

    Il faut donc que je trouve comment, à partir d'un objet FSO, je peux transmettre une valeur à objFolder, qui lui demande un type chaine.

    C'est positif, je cerne mieux le problème...
    Selon les points de vue, on peut être un chic type ou juste un trou du c...

  6. #6
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Re,

    Et si tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MsgBox.Echo arrHeaders(8) & ": " & objFolder.GetDetailsOf(strFilename, 8)

  7. #7
    Membre habitué Avatar de Cabos
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    novembre 2010
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : novembre 2010
    Messages : 108
    Points : 156
    Points
    156
    Par défaut
    Pas de problème sur la récupération des données : comme dit, j'ai juste affiché en Msgbox les entêtes pour repérer le bon attribut (n°10), et j'ai effectivement pu récupérer les infos.

    Maintenant le problème est que je renseigne objFolder par un paramètre passé à partir du corps principal de programme, paramètre de type Scripting.Folder.

    J'ai essayé de le faire passer en Variant, ou de le récupérer dans une variable de type String, mais rien n'y fait. Quand je le passe en argument à :

    Set objFolder = objShell.NameSpace(Répertoire visé), objFolder retourne la valeur Nothing (= plantage des items, puisque rien à évaluer...)

    Par contre, si j'écris directement le répertoire dans l'instruction, objFolder s'impute correctement.

    Il y a donc un problème de type. Il faut que j'arrive à lui convertir le chemin en chaine. J'ai essayé

    "'" & REPTES & "'"
    chr(34) & REPTES & chr(34)

    Rien n'y fait.
    Selon les points de vue, on peut être un chic type ou juste un trou du c...

  8. #8
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Re,

    Si tu fais un truc comme ça, ça passe ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    MonChemin = "C:\excel"
    Set objFolder = objShell.Namespace (MonChemin)

  9. #9
    Membre habitué Avatar de Cabos
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    novembre 2010
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : novembre 2010
    Messages : 108
    Points : 156
    Points
    156
    Par défaut
    Non, ça ne passe pas. Mais ça, ça passe :

    Set objFolder = objShell.NameSpace(Left(objRDR, Len(objRDR)))

    objRDR est l'objet FSO.Folder passé en paramètre.

    Ensuite, j'abandonne la méthode FSO pour n'utiliser que ta méthode Shell (je ne sais pas s'il est correct de la désigner comme cela !?), et ça fonctionne impeccable.

    Je fournis le code pour celles et ceux qui auraient la même galère :

    Test des noms de propriétaire (au passage : ce n'était pas 'Auteur' que je cherchais, mais bien 'Propriétaire' !) de fichiers à partir d'un répertoire passé en paramètre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    Dim objFSO As Scripting.FileSystemObject
    Dim objRDR As Scripting.Folder                  '==> c'est le répertoire passé en paramètre d'appel
    Dim objShell As Object
    Dim objFolder As Object
    Dim ligne As String
    Dim strFilename As Object
     
    'Instanciation des objets
    Set objFSO = New Scripting.FileSystemObject
    Set objRDR = objFSO.GetFolder(objREPTES)
    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.NameSpace(Left(objRDR, Len(objRDR)))
     
        For Each strFilename In objFolder.Items
            ligne = strFilename & " : " & objFolder.GetDetailsOf(strFilename, 10)
        Next
    Tant que j'y suis, voici la liste des paramètres, ça peut être utile :

    0 : Nom

    1 : Taille

    2 : Type d’élément

    3 : Modifié le

    4 : Date de création

    5 : Date d’accès

    6 : Attributs

    7 : État hors connexion

    8 : Hors connexion

    9 : Type identifié

    10 : Propriétaire

    11 : Sorte

    12 : Prise de vue

    13 : Artistes ayant participé

    14 : Album

    15 : Année

    16 : Genre

    17 : Chefs d’orchestre

    18 : Mots-clés

    19 : Notation

    20 : Auteurs

    21 : Titre

    22 : Objet

    23 : Catégories

    24 : Commentaires

    25 : Copyright

    26 : N°

    27 : Longueur

    28 : Vitesse de transmission

    29 : Protégé

    30 : Modèle d'appareil photo

    31 : Dimensions

    32 : Appareil photo

    33 : Entreprise

    34 : Description du fichier

    35 : Nom du programme

    36 : Durée

    37 : Connecté

    38 : Périodique

    39 : Emplacement

    40 : Adresses des participants facultatifs

    41 : Participants facultatifs

    42 : Adresse de l’organisateur

    43 : Nom de l’organisateur

    44 : Heure du rappel

    45 : Adresses des participants obligatoires

    46 : Participants obliga

    Un énorme merci à toi pc75, parce que sans toi, je serais encore dans la mélasse !
    Selon les points de vue, on peut être un chic type ou juste un trou du c...

  10. #10
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Re,

    Un petit clic sur le bouton "Résolu" ?

  11. #11
    Membre habitué Avatar de Cabos
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    novembre 2010
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : novembre 2010
    Messages : 108
    Points : 156
    Points
    156
    Par défaut
    Je pensais honnêtement l'avoir fait ! Très fatigué hier soir !...
    Selon les points de vue, on peut être un chic type ou juste un trou du c...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fixer le nom d'auteur sur un fichier Excel
    Par majgi dans le forum Excel
    Réponses: 3
    Dernier message: 26/12/2012, 16h12
  2. Réponses: 1
    Dernier message: 22/02/2008, 18h22
  3. Réponses: 10
    Dernier message: 15/05/2007, 14h24
  4. Réponses: 5
    Dernier message: 03/05/2007, 13h44
  5. [XSLT] Récupération du nom du fichier XML analysé
    Par Patkaza dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 26/01/2005, 11h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo