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,
Quelle correction as-tu faite sur le fichier post 105 ?
Y a un truc qui m'intrique mais c'est juste pour essayer de comprendre :
Dans largeur maxi et hauteur maxi, quand tu écrits points, est-ce bien des pixels ?
j'ai fais une comparaison pour voir ce qui se passait lors de l'import et en regardant les propriétés de la photo (shape)
Photo d'origineParamètresPixels de la photo
de la cellule (Shape)
500 x 333333 x 333443 x 296
500 x 333500 x 333641 x 428
J'avais lu quelque part qu'il y a une limite en hauteur et effectivement ça plante au-dessus de 409 mais aucun intérêt d'afficher des images aussi grande.
D'après mes tests c'est la largeur qui impose l'affichage la hauteur suit le ratio, je pense que la saisie de la hauteur n'est pas indispensable, elle pourrait être égale à la hauteur par défaut.
Une hypothèse : peut-être qu'Excel considère ces shapes comme une sortie et adapte la définition en fonction du DPI de l'écran ?

Bonne idée de convertir les images RAW, mais cela va prendre du temps de calcul et idéalement il faudrait après avoir imposé un dimensionnement pour les cellules et compresser toutes les images, pour le fichier soit le moins lourd possible.
L'autre idée pour l'import et tu le suggérais en partie est de ne pas afficher les images RAW, TIF, BMP mais seulement les JPG et PNG à la demande par exemple.

Bien sur, ce sont des réflexions, ton programme fonctionne parfaitement comme ça.

PS : je vais essayer de t'envoyer les cr2 et arw, y a t'il un autre moyen que via le forum ? Dans les exifs il peut y avoir des infos confidentielles non effaçables
 

Dudu2

XLDnaute Barbatruc
Quelle correction as-tu faite sur le fichier post 105 ?
Pour ajouter la fonctionnalité que tu n'as pas découverte, j'ai dû réorganiser la structure du code.
Dans largeur maxi et hauteur maxi, quand tu écrits points, est-ce bien des pixels ?
Ce sont de points (1.6666 pixels).
D'après mes tests c'est la largeur qui impose l'affichage la hauteur suit le ratio, je pense que la saisie de la hauteur n'est pas indispensable, elle pourrait être égale à la hauteur par défaut
La hauteur et la largeur des paramètres définissent une zone maximale de placement de l'image réduite du % de marge verticale et horizontale définies. Ici on ne donne la possibilité de définir qu'une marge verticale pour mieux séparer les miniatures.
Dans la zone réduite des marges, c'est la dimension (hauteur ou largeur) qui est saturée par l'image qui va définir le ratio à appliquer à l'image pour en conserver les proportions.
VB:
Case "TOP", "BOTTOM", "LEFT", "RIGHT", "CENTRE"
    RatioWidth = Application.Min(ZonePicWidth / Pic.Width, ZonePicHeight / Pic.Height)
    Pic.ShapeRange.LockAspectRatio = msoTrue
Un paramètre différent de la fonction de chargement d'image que j'ai codée permet de couvrir complètement la zone, et dans ce cas l'image ne conserve plus ses proportions.
Code:
Case "COVER"
    RatioWidth = ZonePicWidth / Pic.Width
    RatioHeight = ZonePicHeight / Pic.Height
    Pic.ShapeRange.LockAspectRatio = msoFalse
Après le traitement j'ajuste la hauteur de la ligne à la hauteur de l'image + la marge verticale.
Code:
'Ajuste la hauteur de ligne à la hauteur de la miniature + marge hauteur miniature
Cellule.EntireRow.RowHeight = ActiveSheet.Shapes("IMG" & Cellule.Address).Height + 2 * MargeVerticaleMiniature
Cet ajustement n'aura d'effet que si c'est la largeur de la zone qui est saturée, impliquant, si l'image n'est pas carrée, une non saturation de la hauteur donnant lieu à un espacement plus grand que la marge verticale et donc inutile.
Une hypothèse : peut-être qu'Excel considère ces shapes comme une sortie et adapte la définition en fonction du DPI de l'écran ?
Je ne vois pas trop où tu veux en venir. D'une manière générale il y a 72 points par pouce.
Pour le vérifier exécuter Application.InchesToPoints(1).
Les affichages des objets dont le .Parent est la feuille sont exprimés en points par rapport à la 1ère cellule Haut Gauche de la feuille ([A1].Left = 0, [A1].Top = 0).
 

Dudu2

XLDnaute Barbatruc
J'ai installé l'extension Canon Raw Codec 1.11 mais ça n'a aucun effet ni sur l'explorateur de fichier qui n'affiche pas les miniatures .cr2, ni sur la visionneuse de photos qui n'affiche pas les images .cr2.

Il y a bien une extension pour Raw de Microsoft mais pourWindows 10 uniquement.

Il y a ça pour Windows 8 et 8.1 -> https://www.microsoft.com/fr-fr/search?q=caméra+codec+pack

Et un truc payant à essayer pour toutes les versions -> http://www.fastpictureviewer.com/codecs/
 
Dernière édition:

re4

XLDnaute Occasionnel
Pour ajouter la fonctionnalité que tu n'as pas découverte
Non pas trouvé :-(

'ai dû réorganiser la structure du code.
Désolé pour tant de travail, comme tu l'as compris, ce n'étais pas des demandes mes des suggstions

Une hypothèse : peut-être qu'Excel considère ces shapes comme une sortie et adapte la définition en fonction du DPI de l'écran ?
Je viens de tester sur un autre écran à quelques pixels près c'est identique, mauvais raisonnement puisque je raisonnais en pixels et non en points

Il y a bien une extension pour Raw de Microsoft mais pour Windows 10 uniquement.
Je suis sous Windows 10, c'est pourquoi je vois les miniatures dans l'explorateur et Excel...

Merci pour toutes ces explications, et ton travail.
J'aimerai bien mettre des hyperliens sur le nom du fichier que je mets en 1er colonne lorsque je ne choisi pas les miniatures. Ca permet de mieux visualiser les autres Tags car le chemin peut être long et je le préfère en dernière colonne si besoin.
 

Dudu2

XLDnaute Barbatruc
Non pas trouvé :-(
Pour les mots-clés, il y a maintenant la possibilité de les appliquer sur le nom de fichier ou sur les mots-clés des propriétés (ou Tag Mots-clés / Mots clés). Il suffit de choisir l'option dans le formulaire de saisie des mots-clés.
1619191000224.png

Désolé pour tant de travail, comme tu l'as compris, ce n'étais pas des demandes mes des suggstions
Je l'ai fait aussi pour ma propre satisfaction !
Je suis sous Windows 10, c'est pourquoi je vois les miniatures dans l'explorateur et Excel...
Dans ce cas, je serais intéressé de savoir si la conversion d'image via le fichier du Post #106 fonctionne en utilisant comme source un fichier Raw.
 

re4

XLDnaute Occasionnel
J'avais pas vu la flèche, n'utilisant pas la fonction jusqu'a présent :) En tout cas bien vu et ça fonctionne
Pour le RAW je testerai
Edit : Ca fonctionne parfaitement avec les RAW (ARW et CR2)

Info :
TAG 0 : Nom du fichier sans extension
TAG 165 : Nom du fichier avec extension
 
Dernière édition:

re4

XLDnaute Occasionnel
les dpi (ppp) n'ont pas d'importance dans notre cas, c'est un peu hors sujet mais c'est pour comprendre...

Sauf erreur de ma pour l'histoire des pixels et dpi, il y a une contradiction dans les systèmes de calcul.
Avec un test d'une image carrée et pour
Largeur maxi miniature (points approximativement)120
Hauteur maxi miniature (points exactement)120
% de marge verticale miniature0%
Excel donne bien une miniature de 200 pixels (120x1.6666), cependant en copiant cette miniature dans Photoshop par exemple, qui s'ouvre par défaut à 72 dpi l'image ne fait que 160 pixels il faut saisir 89.5 dpi pour obtenir 200 pixels.
La définition du moniteur est de 1920px soit un dpi de (def x2.54 / diagonale) de ~122 dpi, le site infobyip.com donne 120 dpi.
 

Dudu2

XLDnaute Barbatruc
Ca fonctionne parfaitement avec les RAW (ARW et CR2)
Ok donc, pour alléger le fichier Excel, il est tout à fait possible de convertir les Raw en jpeg avant d'insérer la miniature.
Je ne sais pas ce que le Webmaster a fait mais on ne peut plus éditer les anciens posts !!!!!!
Donc je mets le fichier ici.

Fichier modifié 25/04/2021 16h47
 

Pièces jointes

  • Tags Exif Images Répertoire - Colonne Ordre.xlsm
    135.9 KB · Affichages: 15
Dernière édition:

Dudu2

XLDnaute Barbatruc
OK merci. J'ai ajouté mon commentaire.
Dis-moi STP si la conversion des images Raw en jpeg pour les miniatures est efficace pour alléger le fichier Excel car sur mon Windows 7 cette conversion ne peut pas fonctionner, les Codecs Raw n'étant pas présents.
1619351210731.png
 

re4

XLDnaute Occasionnel
Bonjour
pour alléger le fichier Excel, il est tout à fait possible de convertir les Raw en jpeg
Je viens de tester
Dossier avec 1 arw & 1 cr2 => 42Mo
Pour les tif pas pu tester, y a pas l'extension
Fichier Excel post 105 => 42186 Ko => traitement 3''
Fichier Excel post 114 => 42194 Ko => traitement 7'' ça tombe à 2'' pour le 2ème scan sans fermer le fichier
Visiblement vu la durée de traitement ça doit compresser mais pas dans Excel... (???).
Une image 200x 200 pixels compressée devrait faire ~25 Ko
Est-il possible de t'envoyer les raw par message privé ?
Question personnelle, y a t'il une raison particulière de travailler sous Win7 ?
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
Je n'ai pas compris dans ta réponse si le fichier Excel est effectivement allégé grâce à la conversion jpeg.

Ça ne sert finalement à rien que tu m'envoies les Raw. J'en ai trouvé quelques unes dans des "samples" d'installation d'un programme. Mais la conversion via la "Microsoft Windows Image Acquisision Library" ne fonctionne pas, les Codecs ne sont pas présents en Windows 7.
Question personnelle, y a t'il une raison particulière de travailler sous Win7
Mon PC a quelques années et n'est pas matériellement compatible Windows 10.
Je pourrais essayer ça http://www.fastpictureviewer.com/codecs/ si vraiment la conversion des Raw m'était nécessaire.
J'ai aussi un laptop en Windows 8.1 et qui pourrait sans doute se voir installer des Codecs https://www.microsoft.com/fr-fr/search?q=caméra+codec+pack.
 

re4

XLDnaute Occasionnel
Je n'ai pas compris dans ta réponse si le fichier Excel est effectivement allégé grâce à la conversion jpeg.
Pardon j'ai testé le fichier du post 114 et pas celui du 106 (conversion)
Voici les messages mais il n'y a pas le jpg converti dans le repertoire
Error 1.PNG
convert.png




Je crois que ce n'est pas la peine de se prendre la tête avec les raw vu le poids du fichier, personnellement je l'utiliserai unique pour visualiser ou alors l'autre idée que je t'avais suggéré est de ne pas afficher les raw et généralement les images au-dessus d'un certains poids (RaW , TIF, PSD) mais de lister quand même.
Ca ferait des lignes en plus a ajouter à la feuille Paramètres + la programmation, donc beaucoup de travail...

Si pour le fun tu décides de continuer j'ai d'autres idées à ajouter, ça va devenir une usine à gaz, pour moi ça été un plaisir de voir ton travail et un peu formateur vu mon niveau de VBA ,-)
Pour tests, j’essaie de faire quelques modifs mais c'est laborieux...
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
Non ça ne change presque rien sur le poids
Ce n'est pas normal.
Je viens d'essayer avec un fichier TIF de 7.7 Mo dont la conversion fonctionne en Windows 7 et le poids du fichier Excel n'est que de 652 Ko.
1619356934476.png

Donc
- soit la conversion cr2 -> jpeg ne fonctionne pas, ce qui m'étonne puisque c'est le même code que celui du Post #106 dont tu m'as confirmé qu'il fonctionne.
- soit il y a une autre raison

Pour le savoir ajouter la ligne:
VB:
If S = NomFichierImage Then MsgBox "Conversion <" & NomFichierImage & "> en échec."
1619357472095.png
 

Discussions similaires

Statistiques des forums

Discussions
315 094
Messages
2 116 153
Membres
112 670
dernier inscrit
Flow87