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

Macros et VBA Excel Discussion :

Récupérer les poids des images dans une feuille [XL-365]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 291
    Par défaut Récupérer les poids des images dans une feuille
    Bonjour

    J'ai un catalogue dans lequel les utilisateurs peuvent ajouter articles (texte + image)

    Je voudrai contrôler le poids des images ajouter afin que le catalogue reste avec un volume optimal.
    Pour cela j'ai écrit une séquence qui copie la photo mise à l'écran par l'utilisateur dans le catalogue en mettant à la taille voulue et en compressant l'image

    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
    For Each sh In creatH.Shapes
        If sh.Type = msoPicture Then
            If sh.TopLeftCell.Address = "$L$6" Then ' photo écran
                With creatH.Pictures(sh.Name)  
                    .ShapeRange.LockAspectRatio = msoFalse
                    .Height = 300
                    .Width = 400
                End With
                creatH.Shapes(sh.Name).Copy
                pH.Range("C" & freeLig).Select  ' position photo Catalogue
                pH.Paste
                Application.SendKeys "%jym{TAB}{TAB}{UP}~"
                Application.CommandBars.ExecuteMso "PicturesCompress"
                GoTo suite
            End If
        End If
    Next
    Je voudrai maintenant écrire une macro qui balaye toutes les images de la feuille en alertant celles qui dépassent par exemple 100Ko

    Peut-on récupérer le poids d'une image ?

  2. #2
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 251
    Par défaut
    Hello,
    Citation Envoyé par retraite83 Voir le message
    Je voudrai maintenant écrire une macro qui balaye toutes les images de la feuille en alertant celles qui dépassent par exemple 100Ko

    Peut-on récupérer le poids d'une image ?
    Je ne crois pas qu'il y ait de solutions simples pour effectuer cette tâche ( A confirmer ?) :
    Voici différentes solutions possibles mais genre usine à gaz :
    1 - Copier l'image dans le presse papier Créer une chart temporaire, coller l'image dedans , faire un export image à partir de cette chart, relever la taille du fichier créé. Supprimer le fichier, supprimer la chart temporaire. Il n'est pas certain que le poids relevé soit le poids exact à l'intérieur du classeur.
    2 - Utiliser le presse-papier et regarder (si c'est possible ) le poids de ce qui est stocké dedans.
    3- Extraire les images qui se trouvent dans le fichier classeur, relever les poids puis les détruire. Cela oblige à travailler sur un classeur non ouvert et la correspondance entre les fichiers et les images dans le classeur n'est pas connue.

    Ami calmant, J.P

  3. #3
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 251
    Par défaut
    Hello,
    j'ai trouvé une solution mais il faut installer le Open XML SDK 2.5 et utiliser une dll que j'ai fabriqué qui contient une fonction qui lit les infos des images d'un classeur Excel. Comme on ne peut pas lire le fichier du classeur quand on l'utilise, l'astuce consiste à copier le classeur dans un répertoire temporaire et à le supprimer à la fin de l'utilisation.
    Voici ce que cela donne du point de vue code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Declare Function CreateImageExcelClass Lib "D:\Tmp\ClassesCsharpJP.dll" () As Object
    Sub LireInfosImages()
    Dim ImagesInfos As Object
    ActiveWorkbook.SaveCopyAs "D:\TMP\temp.xlsm"
    Set ImagesInfos = CreateImageExcelClass()
    ImagesInfos.IterateThruImages "D:\TMP\temp.xlsm"
    Debug.Print ImagesInfos.ImagesInfos
    Kill "D:\TMP\temp.xlsm"
    End Sub

    Résultat obtenu pour un classeur avec 3 images sur 2 feuilles :
    ==== Feuil2 ====
    rId1 : 14933 Octets -> image/png - coord (0:0)


    ==== Feuil1 ====
    rId2 : 3646 Octets -> image/jpeg - coord (26:28)
    rId1 : 364850 Octets -> image/jpeg - coord (23:2)
    coord représente la cellule haute gauche de l'image en num ligne : num colonne ex : (0:0) --> A1

    Ami calmant, J.P

  4. #4
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 291
    Par défaut
    Hello,

    je vais essayer ça dès que j'ai un moment

    Open XML SDK 2.5 : ça s'installe où?

    la ddl je la mets dans un module ?

  5. #5
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 251
    Par défaut
    Pour l' OpenXML SDK c'est un fichier msi (OpenXMLSDKV25.msi) donc ça s'installe tout seul. Pour la dll il faut la mettre dans un répertoire accessible et la déclarer en tête d'un module VBA (voir mon code dans mon message précédent). Et la version d'Excel 32 bits ou 64 bits ?

  6. #6
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 291
    Par défaut
    Excel 365 je pense 64 bits

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

Discussions similaires

  1. [XL-2010] Récupérer les dates des Vendredi dans une matrice
    Par Grosjul dans le forum Excel
    Réponses: 5
    Dernier message: 25/03/2017, 16h32
  2. Réponses: 11
    Dernier message: 25/02/2016, 20h19
  3. [XL-2003] Enregistrer les données des textbox dans une feuille excel
    Par monichou86 dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 06/01/2010, 15h24
  4. Récupérer les noms des champs dans une requête
    Par Nerziel dans le forum Général Python
    Réponses: 1
    Dernier message: 14/09/2009, 11h29
  5. [MySQL] récupérer les dimensions des images dans une boucle while
    Par Navyel dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 26/08/2007, 11h09

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