XL 2016 Lister fichiers avec Exifs et propriétés (suivant son choix) - code à modifier

re4

XLDnaute Occasionnel
Edit 19/04/2021 : Les solutions sont aux posts #28 et #44 un grand merci à Dudu2

Bonjour à tous,
Je reviens avec une autre idée avec le code ci-dessous que j'ai légèrement modifé avec quelques annotations de débutant (que je suis ,-)
Cette macro fonctionne bien et extrait seulement les exifs que l'on désire avec quelque prérequis.

Je ne sais pas faire, vous est-il possible de m'aider et de la modifié pour :
1- Aller chercher le répertoire par l'ouverture d'une boite (explorer ?), à la place de : Set objFolder = objShell.Namespace("C:\Users\PC\Pictures\Test")
2- Lister à partir du dossier racine tous les fichiers de tous les sous répertoires.

Merci beaucoup

VB:
'original ?
    'https://www.excel-downloads.com/threads/macro-pour-extraire-l

    'Prérequis
    'créer une feuille ''Code'' avec en tête en ligne 1:
    'Colonne A les codes de toutes propriétés
    'Colonne B les noms de ces propriétés
    'Colonne C un X par exemple pour ne choisir que les plus utiles
    'Colonne D index par ordre de péférence (noms que l'on veut, puis tris de A-Z sur colonne D)
    'Colonne E les codes (colonne A) du tri de D

    ' Ne liste que le repertoire choisi (mais affiche les dossiers sous répertoire en nom)

    Sub LireExifTags5()
    Dim det_Headers(355)

    Sheets("Code").Select

    ' compte le nbre de cellule non vide de la colonne E de la feuille 'Code'
    LastRow = Cells(Rows.Count, 5).End(xlUp).Row

    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.Namespace("C:\Users\PC\Pictures\Test")

    Workbooks(1).Sheets(1).Activate
        DernLigClear = Range("A" & Rows.Count).End(xlUp).Row

        Range("A2:OJ" & DernLigClear).ClearContents 'jusqu'a la colonne 400

    For i = 2 To LastRow
    c = i - 2
    k = Worksheets("Code").Cells(i, 5) 'Seulement les exifs que l'on désire

    det_Headers(c) = objFolder.GetDetailsOf(objFolder.Items, k)
    ActiveSheet.Cells(2, c + 1) = det_Headers(c) 'headers en ligne 2

    Workbooks(1).Sheets(1).Activate
    j = 3 ' pour datas en ligne 3

    For Each strFileName In objFolder.Items
    For m = 1 To LastRow
    Next

    Sheets(1).Cells(j, i - 1).Value = objFolder.GetDetailsOf(strFileName, k)

    j = j + 1

    Next
    Next

    'Columns("A:z").AutoFit
    ActiveSheet.UsedRange.EntireColumn.AutoFit
    End Sub
 
Dernière édition:
Solution
OK. Si le titre de la colonne E est "Ordre" la formule serait mieux avec =SI([@Ordre]>0;"Oui";"Non")
C'est une syntaxe propre aux tableaux structurés (le symbole @ représente la ligne courante).

Mais à partir du moment où c'est le chiffre qui déclenche l'affichage, on peut se passer de la colonne "Afficher".
Voici une version qui, selon ta préférence, utilise la colonne Ordre (de classement) dont la gestion requiert la ré-attribution des numéros et le tri du tableau (bouton dédié) en cas de modification de classement.
Pour le centrage vertical des lignes tu as une idée ?
Une instruction VBA.

Fichier mis à jour 21/04/2021 14h32

re4

XLDnaute Occasionnel
Bonjour,
Encore moi, y a un petit souci chez moi, je viens de tester sur mes 2 PC et le comportement est différent.


l'extraction des tags sur les deux PC donnent exactement les mêmes données n° et noms
Si tu le temps...

Merci

Test tags avec ce code
VB:
Sub Creer_image_et_generer_code()

'Céation d'une image test ''Control_code_champs.jpg'' pour lister les code champs
Dim Plage As Range
Repertoire = ThisWorkbook.Path
Application.ScreenUpdating = False
With Sheets("Code")
    Set Plage = .Range("f1:g8")
    Plage.CopyPicture
    With .ChartObjects.Add(Plage.Left, Plage.Top, Plage.Width, Plage.Height).Chart
        .Paste
        ' création d'une image dans le repertoire du fichier Excel
        .Export ThisWorkbook.Path & "\Control_code_champs.jpg", "JPG"
    
    End With
    .ChartObjects(.ChartObjects.Count).Delete
End With
Set Plage = Nothing

'------------------------------------------------
'Auteur Theze
'Adapté R
'------------------------------------------------


'CreateObject("Wscript.shell").Popup "Recherche les codes champs de ce PC", 1, "Info"

Dim NomImg As String
'nom de l'image
NomImg = "Control_code_champs.jpg"

' Sheets("Code").Visible = True ' rendu visible parce que masquée

Sheets("Code").Select
[B2:c350].ClearContents
Set objShell = CreateObject("Shell.Application")
Set objfolder = objShell.Namespace(ThisWorkbook.Path & "\")
For Each strFilename In objfolder.Items
If strFilename = NomImg Then
For i = 0 To 350
ActiveSheet.cells(i + 1, 2) = objfolder.GetDetailsOf(objfolder.Items, i - 1)

cells(i + 2, 1).Value = i

Next i
End If
Next strFilename
Worksheets("Code").Range("A1").Value = "Codes"
Worksheets("Code").Range("B1").Value = "Désignations"
'Worksheets("Code").Range("C1").Value = "Propriétés"
'Range("G6").Value = Application.OperatingSystem ' pour version de Windows
'Range("G7").Value = Application.Version ' pour office version
'Range("G8").Value = Application.Build

End Sub
 

Pièces jointes

  • tableau1e.PNG
    tableau1e.PNG
    17 KB · Affichages: 44
  • 1617171690217.png
    1617171690217.png
    14.7 KB · Affichages: 18
Dernière édition:

re4

XLDnaute Occasionnel
Je n'ai pas été précis, je voulais dire qu'avec mon dernier code du post 18 les tags sont identiques sur les 2 pc mais lorsque j'utilise ta macro sur l'un ou l'autre pc j'ai des résultats différents voir tableau du post 18, mon test à été fait dans l'exemple avec
date de prise de vue (tag 12)​
hauteur (tag 176)​
et largeur (tag 178)​
Le résultat n'est pas identique dans la feuille 1 sur les 2 machines.
J'ai aussi fait des tests avec d'autres tags mais sans bon résultat pour certains...
Je suis vraiment désolé de te mettre autant à contribution, éventuellement n'y travaille que si tu as le temps
Je suppose que sur ton pc ou tes pc tout est ok.
Merci
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
Donc la différence que tu constates est au niveau de ces 3 Tags ???
- date de prise de vue (tag 12)
- hauteur (tag 176)
- et largeur (tag 178
Ou ailleurs ??? Franchement ton post #18 est totalement obscure.

Je ne vois pas les chiffres pour chacun des PC. Juste des lignes de titre dont je ne comprends pas la signification. Est-ce que la différence réside dans les titres ou dans les valeurs ? Ou est la différence ? Est-ce que ce que tu trouves anormal est une différence ou une concordance ? Ou autre chose ?

Si la résolution d'écran est différente, ou le zoom, ou la taille des cellules, vu qu'il semble que tu copies un Range en image, ça me semble normal qu'il y ait une différence de dimension. Quant aux dates, elles diffèrent en quoi ? En format ? En valeur ? Je n'arrive pas à les voir dans ma boule de cristal. Quelles sont les dates respectives sur les PC à la création de l'image ?
De toutes façons le code ne fait que lire des infos de fichiers sans aucune transformation.

Si ce n'est pas ça, fais des copies d'écran de ce qui diffère. C'est pas compliqué:
- Copie d'écran PC 1 (séparée)
- Copie d'écran PC 2 (séparée)
et tu indiques où est la différence. Ou la concordance. Ou quoi que ce soit que tu trouves anormal.
 
Dernière édition:

re4

XLDnaute Occasionnel
Bonjour
Voici les copie d'écran des deux PC
J'ai filtré les paramètres pour montrer ceux que j'ai choisi mais la macro a été lancée sans les filtres
Nous constatons dans les deux cas que seule la date de prise de vue a été bien extraite
Mon niveau en VBA étant limité, je suppose que tu vas chercher le nom dans la feuille paramètre et tu dois le comparer avec un n° de tag, c'est pour ça que j'ai joint le bout de code pour tester et identifier sur chaqu'un des pc si les tags correspondent bien au nom (exemple tag 12 = prise de vue)
Dans les colonnes D,E,F, il devrait y avoir Largeur tag 176, Hauteur tag 178, ISO tag 264
Merci encore Dudu2

Edit : Je viens d'inclure dans Private Const TagsPhoto tous le numéros de tags de 0 à 320, ça à l'air de fonctionner reste maintenant à dire à la macro de scanner les ajouts dans la colonne B de la feuille Paramètres
Dans la feuille ''Paramètres'', je ne sais s'il faut tous les mettre car certains ne sont liés aux exifs mais au moins cela ? :
01345122021222425303132164165174175176177178191192194255257258259260261262263264265266267268272273274275276
NomTailleModifié leDate de créationDate d’accèsPrise de vueAuteursTitreObjetCommentairesCopyrightModèle d'appareil photoDimensionsMarque appareil photoExtension du fichierNom de fichierProfondeur de couleurRésolution horizontaleLargeurRésolution verticaleHauteurChemin du dossierDossierChemin d’accèsVersion EXIFCompensationProgramme d’expositionTemps d’expositionFocaleMode flashDistance focaleDistance focale 35mmSensibilité ISOFabricant de l’objectifModèle d’objectifSource de lumièreOuverture maxiMode programméSaturationDistance au sujetBalance des blancsPriorité
 

Pièces jointes

  • Capture_ resultat PC1.JPG
    Capture_ resultat PC1.JPG
    81.2 KB · Affichages: 18
  • Capture_ resultat PC2.JPG
    Capture_ resultat PC2.JPG
    58.2 KB · Affichages: 18
Dernière édition:

re4

XLDnaute Occasionnel
Suite post 22
Pour t'éviter une saisie si besoin
Private Const TagsPhoto = "0,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,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78," & _
"79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102," & _
"103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125," & _
"126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148," & _
"149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171," & _
"172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195," & _
"196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219," & _
"220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243," & _
"244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267," & _
"268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291," & _
"292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316," & _
"317,318,319,320"
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
La constante est là pour donner le numéro de Tag correspondant au libellé du tableau de présence des Tags.
Libellé Tag 1ère ligne tableau = 1er numéro de Tag de la constante
Libellé Tag 2ème ligne tableau = 2ème numéro Tag de la constante
etc...
Donc mettre tous les tags dans la constante va tout désorganiser et rien ne correspondra plus.
Les titres des colonnes sont pris dans le système, pas dans le tableau de présence des Tags.
-----
En fait tu veux dire que sur ces 2 PCs, le Tag #162 qui est libellé largeur (en pixels de la photo) dans le tableau de présence des Tags s'affiche sur ces PCs comme étant la Date de fin. Étonnant !
Sur mon Windows 7 le Tag #162 est bien la largeur.
1617186393361.png

La question est maintenant de savoir si c'est lié au système ou au fichier.
----
- Quel système Windows sur ces PCs ?
- Envoie-moi STP l'une de ces images pour que je l'analyse sur mon Windows 7
- D'où viennent ces images ? Appareil photo ?
- Exécute le fichier joint sur l'un de ces PCs avec ces images et renvoie-le moi pour que je voie la ligne des titres
 
Dernière édition:

re4

XLDnaute Occasionnel
Cher Dudu2;
Effective c'est le problème que j'avais rencontré suivant l'os et d'autres inconnues (?) les N° de tags ne sont pas identiques. Tu dis que sur win 7 le tag de hauteur est 162 mais chez moi sur les 2 PC Win10 le tag hauteur est 178.
Oui, j'ai compris le principe mais avec mes tests je me suis aperçu que si les n° de tags n'étaient pas complet ça ne marchait pas bien 0 à 320 ou au moins jusqu'au dernier tags de la liste ''Paramètres''
Dans mes autres macros et fichiers, j'avais contourné le problème avec l'aide de la communauté des programmeurs en créant une macro qui crée une image puis lit les tags et les affiches dans une feuille, puis une autre macro pouvait scanner le répertoire photo avec les bons N° de tags et les bons noms (Propriétés fichier et exifs) ça fonctionne sur Win7,8, 10.
Je comprends bien que tu es dans une autre démarche et que je maitrise moins... ;-)
Les photos viennent principalement d'un APN Reflex de toutes marques (club photo).

Merci
Ps : images tests
 

Pièces jointes

  • IMG_1965 t2_compressed.jpg
    IMG_1965 t2_compressed.jpg
    95.8 KB · Affichages: 19
  • Tags Exif Images Répertoire (Dudu2 post24).xlsm
    104.1 KB · Affichages: 11

Dudu2

XLDnaute Barbatruc
La différence semble effectivement émaner de Windows, car chez moi, sur Windows 7 tes 2 images donnent le résultat escompté.
1617196705300.png


J'ai pensé à cette solution de travailler d'abord sur un image référence pour avoir le liste des Tags par noms applicables aux photos.
C'est soit une image type dans le fichier à enregistrer et analyser ou simplement la 1ère image du lot.
En supposant que les noms des Tags soient communs pour toutes les versions de Windows et seuls les numéros variant.

Mais ça je ne peux pas encore le savoir car il faut que tu exécutes le fichier tel que je te l'ai envoyé avec:

1617195892000.png

Pour l'instant je ne vois que les Tags que tu as sélectionnés.
 
Dernière édition:

re4

XLDnaute Occasionnel
Voici le fichier du post 24 sans aucune modification.
Comme je le disais dans mes autres fichiers l'on crée une image mais il est plus simple de partir de la 1er image pour en déterminer les tags, Il me semble qu'il faudrat tout scanner (Propriétés et Exifs), il sera plus facile de faire son choix.
On va y arriver :)
 

Pièces jointes

  • Tags Exif Images Répertoire (post24 sans modif).xlsm
    76.9 KB · Affichages: 16
Dernière édition:

Dudu2

XLDnaute Barbatruc
J'ai laissé le tableau de présence des Tags tel qu'il est. Ce sont des Tags spécifiques des photos.
Libre à l'utilisateur d'y ajouter ou retirer des Tags mais inutile d'avoir un tableau de 300+ lignes à examiner pour faire une liste des propriétés des photos.

En choisissant
1617216676727.png
tous les Tags jusqu'au numéro 320 sont listés.

Les Tags sont recherchés par nom sur la 1ère image traitée de manière à en conserver les numéros trouvés pour les images suivantes.

Fichier mis à jour 21/04/2021 14h35
 

Pièces jointes

  • Liste images et tags Exif.xlsm
    124.3 KB · Affichages: 22
Dernière édition:

re4

XLDnaute Occasionnel
Bonsoir,
Merci et bravo pour ton superbe travail, tout à l'air de bien fonctionner
Bien vu pour
Private Const NBMAXTAGS = 320

Chez moi :
Appareil photo est => Modèle d'appareil photo
Nom est => Nom de fichier (tag 165), alors que les autres macros c'est Nom (tag 0)
Vitesse ISO est => Sensibilité ISO (tag 264)
Je n'ai pas tout testé, par ces constats et pour que ce soit le plus universel possible, je pense qu'il faudrait lister dans une feuille tous les tags (0 à 320) et aller chercher ceux qui nous intéresse pour la feuille 'Paramètres' puis les trier par ordre de préférence d'affichage par exemple dans la colonne D, c'est ce que je viens de faire pour tester
1617222151842.png

Tu dois avoir certainement une autre idée

( ce qui a de bien c'est qu'il y a une alerte au lancement de Go)
Je n'ai pas tout testé mais je fais confiance à ton savoir.

Si j'ai bien compris à partir du nom des tags tu vas chercher son n° ? C'est donc l'inverse de ce que je fais avec mes autres macros. (???)

Juste une petite question, est-ce un partage libre de droit et sans restriction de modification ? En tant que photographe, je suis très sensibilisé au ©.
Si c'est vraiment tout droit non réservé, peux tu me dire comment rendre certaines fonctions non grisées comme par exemple la modif des références des noms de plage. Je ne connais pas parfaitement les subtilités d'Excel...
1617217654616.png

Y a t'il autre chose qui est protégé ?
Mille mercis pour ton travail, ta réactivité et ta patience, ça été très instructif pour moi.
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
Chez moi:
1617219055359.png

Sans doute, le Tag #30 suffit. JE vais supprimer le Tag #32 de le liste.

Juste une petite question, est-ce un partage libre de droit et sans restriction de modification ?
Si tu parles du code dans le classeur que j'ai publié ici, bien sûr que c'est libre de droits avec ou sans modifications.
peux tu me dire comment rendre certaines fonctions non grisées comme par exemple la modif des références des noms de plage
L'image que tu montres est relative à un nom de Tableau Structuré dans le Gestionnaire de noms.
Ce n'est pas la définition d'une plage. Excel a l'exclusivité de la gestion de la plage que le tableau structuré occupe. Pour insérer ou supprimer les lignes, faire clic droit dans le tableau, puis choisir insérer, supprimer, etc...
1617219809421.png
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
311 721
Messages
2 081 927
Membres
101 842
dernier inscrit
seb0390