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

Excel Discussion :

Excel VBA : mettre à jour les propriétés étendues d'un fichier jpg


Sujet :

Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Avril 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2014
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Excel VBA : mettre à jour les propriétés étendues d'un fichier jpg
    Bonjour,

    Voici mon besoin : j'ai numérisé un grand nombre de diapos et je voudrais pour chacune d'entre elles mettre à jour la date de prise, le lieu, le commentaire, le titre, etc...
    Ces informations sont modifiables dans l'explorateur windows7, mais d'une part la mise à jour manuelle est fastidieuse et d'autre part j'ai déjà une feuille excel qui contient la liste de ces fichiers JPG avec pour chacun d'entre eux l'ensemble des informations que je souhaite mettre à jour.

    J'ai donc voulu automatiser le processus.
    La lecture de différents posts et articles sur ce site (et sur d'autre) m'a permis de comprendre comment lire les propriétés étendues de ces fichiers avec un Getdetailsof.
    Malheureusement il n'y a pas de Setdetailsof. J'ai donc essayé les solutions suivantes :

    • utilisation de la DLL CDDBControl avec la fonction ID3tag, mais il semblerait que cela ne s'applique qu'au fichier MP3, car après mise à jour des propriétés étendues le fichier JPG devient illisible
    • J'ai essayé d'utiliser les fonctions de WindowsMediaPlayer (Wmp.currentMedia.setItemInfo "Title", mytitle) mais je n'ai pas réussi à faire fonctionner le code (erruer lors de l'exécution)
    • Enfin l'utilisation de la DLL DSOfile semblait répondre exactement à mon besoin.
      Le code fonctionne bien, lorsque je vérifie avec DSOFile les propriétés ont été mises à jour, mais lorsque je vais dans l'explorateur Windows7 aucune de mes mises à jour n'est visible.


    Je suis donc assez perplexe. Tout se passe comme si les fichiers avaient 2 jeux de propriétés étendues. Mes recherches semblent confirmer cette hypothèse : il y aurait des propriétés de types "ADS" quie ont été remplacées par de nouvelles propriétés étendues car elles présentaient des problèmes de sécurité.
    Toutefois je ne suis pas sûr que cette explication soit valide.

    Voici le code que j'utilise pour mettre à jour les propriétés étendues
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    Sub WRITE_TO_EXPLORER()
     
        Dim mydate As Date
        Dim mytitle As String
        Dim mycomment As String
        Dim MyArtist As String
     
     
        Application.Calculation = xlCalculationManual
        Set ws = Sheets("A écrire")
        ws.Activate
     
      '  'Nécessite d'activer la référence DSO OleDocument Properties Reader 2.0
     '   'http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q224351
    '    Set DSO = New DSOFile.OleDocumentProperties
        Set DSO = CreateObject("DSOFile.OleDocumentProperties")
     
        '-----------------------------------------------------------------------------------------------------
        '- CHECK NUMBER OF FILES TO CHANGE (VISIBLE ROWS)
        LastRow = ws.Range("A65536").End(xlUp).Row  ' count worksheet rows
        FilesToChange = ws.Range("A2:A" & LastRow).SpecialCells(xlCellTypeVisible).Count
        If FilesToChange = 0 Then MsgBox ("No files to change."): Exit Sub
        FilesChanged = 0
        '-----------------------------------------------------------------------------------------------------
        '- LOOP WORKSHEET FILES - VISIBLE ROWS ONLY
        For FromRow = 2 To LastRow
            If ws.Cells(FromRow, "A").EntireRow.Hidden = False Then
                '---------------------------------------------------------------------------------------------
                '- Get file properties from sheet
                With ws
                        MyFilePathName = .Cells(FromRow, "J").Value
                        MyArtist = .Cells(FromRow, "E").Value
                        mycomment = .Cells(FromRow, "G").Value
                        mytitle = .Cells(FromRow, "F").Value
                        mydate = .Cells(FromRow, "C").Value
                End With
                '---------------------------------------------------------------------------------------------
                '- Write to file
     
    '    'Attention: Le fichier doit être préalablement fermé!
                DSO.Open (MyFilePathName)
                DSO.SummaryProperties.Comments = mycomment
                DSO.SummaryProperties.Title = mytitle
                DSO.SummaryProperties.Author = MyArtist
    '            DSO.SummaryProperties.DateCreated = mydate
                DSO.Save
                DSO.Close
     
     
                '---------------------------------------------------------------------------------------------
                FilesChanged = FilesChanged + 1
            End If
        Next
        '-----------------------------------------------------------------------------------------------------
        '- end of program
        Application.Calculation = xlCalculationAutomatic
    End Sub
    Pouvez-me dire

    • si j'ai loupé quelque chose dans la mise à jour des propriétés étendues ?
    • est-ce que mon hypothèse sur les 2 jeux de propriétés étendues est correcte
    • Surtout quel est le moyen pour mettre à jour les propriétés étendues qui sont visibles dans l'explorateur Windows 7



    Merci de votre aide

    GA

  2. #2
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, ceci devrait répondre à tes questions.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Avril 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2014
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci pour la rapidité de ta réponse.

    L'utilisation de la Dll Wia permet effectivement d'écrire un tag dans un fichier JPG
    Bien que cela ne réponde pas complètement à mon objectif initial c'est un énorme progrès.
    Les points suivants ne sont pas résolus, si quelqu'un peut avoir la gentillesse d'y jeter un coup d'oeil :

    • il faut créer un nouveau fichier, car la méthode Savefile interdit la mise à jour d'un fichier (erreur -2147024816 file already exists).
      Est-il absolument nécessaire de créer un nouveau fichier ? y-a t-il une méthode permettant de mettre à jour le fichier courant ?


    • Pour pouvoir mettre à jour plusieurs tags il faut recréer pour chaque Tag une nouvelle instance de l'objet ImageProcess sinon linstruction
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Set Img = IP.Apply(Img)
      renvoie l'erreur "erreur automation -2145320830 (80210082)" la seconde fois que l'on arrive dessus.
      Est-ce la bonne manière de procéder
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
          'application du filtre dans l'image
                  Set Img = IP.Apply(Img)
                  Set IP = Nothing
       
      'On écrit l'Auteur (40093  Auteur)
          'creation du gestionnaire de filtre
              Set IP = CreateObject("WIA.imageProcess")
       
          'définit le filtre pour gérer l'EXIF
                  IP.Filters.Add IP.FilterInfos("Exif").FilterID
                  IP.Filters(1).Properties("ID") = 40093


    • Bien que la documentation indique que le vecteur ID 40093 contient le ou les auteurs de la photo, la mise à jour ne se reflète pas dans Winddows.
      Y a t-il une explication ?

    • Je n'ai pas trouvé comment mettre à jour la date de prise de vue (propriétés EXIF 36867 & 36868) ni la notation ou Rating (propriété 18246).
      Est-ce que quelqu'un aurait une idée ?


    Merci pour votre aide et la foule d'information que l'ontrouve sur ce site

    GA

  4. #4
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, toujours dans les tutos : ici
    sinon via une recherche

Discussions similaires

  1. Mettre à jour les propriété d'une List<struct>[i] ?
    Par StringBuilder dans le forum C#
    Réponses: 3
    Dernier message: 21/01/2014, 18h34
  2. [XL-2007] Modifier les propriété avancé d'un fichier "JPG"
    Par Pyton dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 25/03/2012, 09h02
  3. [XL-2000] répondre automatiquement aux messages Excel (type mettre à jour les liaisons)
    Par salent9 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 22/06/2011, 15h23
  4. Mettre à jour les propriétés des formulaires
    Par rj450 dans le forum VBA Access
    Réponses: 2
    Dernier message: 23/03/2010, 10h41
  5. [VBA-E] comment ne pas mettre à jour les liaisons!
    Par max2245 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/12/2005, 12h05

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