XL 2021 Extraction images depuis commentaire de cellule vers dossier.

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

jeff1494

XLDnaute Occasionnel
Bonjour à toutes et tous;

J'ai un fichier contenant plusieurs feuilles, dont une nommée "INVENDUS" qui contient une liste d'objets.
Une ligne par objet, et en colonne 2 j'ai la description de l'objet qui contient en commentaire une photo de l'objet.

Je voudrais par macro , pour chaque ligne pouvoir extraire la photo contenue en colonne 2, et la sauvegarder dans un dossier que je nomme "JPG_INV", avec comme nom la valeur de la cellule A de la ligne, et une extension ".jpg".

Pour ce faire j'ai récupéré une macro donnée par @patricktoulon sur un autre forum dans un message dont voici le lien (message #15).
Je l'ai placé dans un module nommé "Export_Images".

J'ai juste adapté le code pour correspondre à mes besoins, à priori rien qui ne puisse changer le fonctionnement de la macro.

Le résultat de l'exécution de cette macro, est que je crée bien les images dans le répertoire défini, mais juste la première images qui est affichée comme un carré blanc dans l'explorateur de Windows.

Donc si jamais @patricktoulon passait par là, je lui serais reconnaissant de bien vouloir m'aider à comprendre pourquoi la première image reste comme un carré blanc, alors que les suivantes sont correctement créées. Mais si une autre personne a une idée du pourquoi du comment je suis preneur.

A toutes fins utiles je vous joins un exemple du fichier que j'utilise.

D'avance je remercie tous ceux ou celles qui voudront bien perdre un peu de leur temps pour m'aider.
Bonne journée à toutes et tous.
 

Pièces jointes

Solution
Bonsoir @jeff1494

"Il manquait cela : .Activate"

Pour comprendre ici en Poste #38 : https://excel-downloads.com/threads/export-dimages-renommer-celles-ci.20034890/post-20674531

VB:
Option Explicit

Sub Export_Photos()
    Dim i As Long
    On Error Resume Next
    MkDir ThisWorkbook.Path & "\JPG_INV"
    Err.Clear
'    Sheets.Add After:=Sheets(Sheets.Count)
    Sheets.Add(After:=Sheets("INVENDUS")).Name = "Feuille_Transit"
    
    With Sheets("Feuille_Transit").ChartObjects.Add(0, 0, 100, 100).Chart
        .Parent.Name = "calque"
    End With
    For i = 2 To Sheets("INVENDUS").Cells(Rows.Count, 2).End(xlUp).Row
        If Sheets("INVENDUS").Cells(i, 2).Comment.Shape.Fill.Type = 6 Then
        save_comment_fichier_jpg...
Pour jurassik pork;
Lorsque je clic sur le lien de la pièce jointe que tu m'a donné le résultat est "La page demandée est introuvable. ".
Peut-être qu'il faut procéder autrement pour l'atteindre ?

Capture d’écran 2025-01-29 120145.jpg



Je pense que si les résultats sont probants, je me fendrais d'une documentation pour l'installation.
Bonne journée.
 
Voilà j'ai fait un guide d'installation Word du complément vite fait sur le gaz (en pièce jointe)
Ne pas faire attention à la version dans la copie d'écran car la version 0.3 n'est pas encore disponible (en attente d'approbation). La version en cours est la 0.2
 

Pièces jointes

Super ton document, je vais probablement m'appuyer dessus pour documenter cela pour la personne à qui je destine cette petite application.
Merci pour le lien du complément pas de soucis je l'ai téléchargé et je vais voir tout cela cet après-midi.
Encore merci pour ton aide.
A+
 
@jurassic pork ;
Je viens de tester ta solution.
J'ai installé ton complément, et testé. Tout a bien commencé mais au bout de quelques images j'ai reçu un message d'erreur

BUG.jpg

Cela se produit sur la ligne suivante :

Erreur.jpg


Le traitement s'est effectué sur 29 images et a planté à la 30ème. J'ai essayé de voir si il y avait une différence quelconque entre la photo 29 et la 30 mais je n'ai rien trouvé.
Après le plantage quand je regarde la feuille de départ de la copie, la miniature qui ne doit s'afficher qu'au survol de la souris, reste affichée en permanence. Je pense que c'est à cause du plantage.

Je suis à ta disposition si tu as besoin de plus d'informations. En attendant je vais essayer de voir ce que je peux comprendre à ce message d'erreur.
Mon fichier est trop gros pour le mettre ici, mais si tu le veux je pourrais le mettre à ta disposition sur un site de téléchargement, dont je te communiquerais l'adresse en MP.

Bonne journée à toi.
 
Je m’apprêtais à le faire je te tiens au courant dans quelques minutes.
Je viens de tester, et là je plante sur une autre image beaucoup plus loin. 1er essai blocage image N° 30, maintenant blocage sur image N° 274.
Par contre la ligne sur laquelle je plante n'est pas la même.
Je vais essayer de comprendre.

2ème plantage.jpg
 
Dernière édition:
Je m’apprêtais à le faire je te tiens au courant dans quelques minutes.
Je viens de tester, et là je plante sur une autre image beaucoup plus loin. 1er essai blocage image N° 30, maintenant blocage sur image N° 274.
Par contre la ligne sur laquelle je plante n'est pas la même.
Je vais essayer de comprendre.

Regarde la pièce jointe 1211939
j'ai fait une boucle de 100 sur ce bout de code et moi aussi j'arrive à planter , j'ai une idée d'où cela provient, je te tiens au courant.
 
Super que tu aies une idée d’où cela peut provenir car ton système de complément serait parfait pour mon cas.
En mettant une temporisation de 20ms entre le CopyPicture et le saveImage cela n'a plus l'air de planter chez moi ( 5000 boucles sans plantage) .
Dans mon complément dans la classe Utils il y a un Sleep qui permet de faire des temporisations.
Voici le code
VB:
Sub save_comment_fichier_jpgJP(x)
    Dim pp As Object, utils As Object
    Set pp = CreateObject("XlDnaLibJP.PressePapier")
    Set utils = CreateObject("XlDnaLibJP.Utils")
    Application.ScreenUpdating = False
    With Sheets("INVENDUS").Cells(x, 2)
        If Not .Comment Is Nothing Then
            .Comment.Visible = True
            .Comment.Shape.CopyPicture xlScreen, xlBitmap
            utils.Sleep 20
            pp.SaveImage ThisWorkbook.Path & "\JPG_INV\" & Sheets("INVENDUS").Cells(x, 1) & ".jpg", 1
            .Comment.Visible = False
            pp.Clear
        End If
    End With
    Application.ScreenUpdating = True
End Sub
Cela va ralentir l'extraction et la temporisation est peut-être à ajuster car cela peut dépendre de la puissance CPU de l'ordinateur.
[EDIT] Attention je viens de rééditer le code car j'avais laissé ma boucle de test
 
En mettant une temporisation de 20ms entre le CopyPicture et le saveImage cela n'a plus l'air de planter chez moi ( 5000 boucles sans plantage) .
Dans mon complément dans la classe Utils il y a un Sleep qui permet de faire des temporisations.
Voici le code
VB:
Sub save_comment_fichier_jpgJP(x)
    Dim pp As Object, utils As Object, data As Object
    Set pp = CreateObject("XlDnaLibJP.PressePapier")
    Set utils = CreateObject("XlDnaLibJP.Utils")
    Application.ScreenUpdating = False
    With Sheets("INVENDUS").Cells(x, 2)
        If Not .Comment Is Nothing Then
            .Comment.Visible = True
            .Comment.Shape.CopyPicture xlScreen, xlBitmap
            utils.Sleep 20
            pp.SaveImage ThisWorkbook.Path & "\JPG_INV\" & Sheets("INVENDUS").Cells(x, 1) & ".jpg", 1
            .Comment.Visible = False
            pp.Clear
        End If
    End With
    Application.ScreenUpdating = True
End Sub
Cela va ralentir l'extraction et la temporisation est peut-être à ajuster car cela peut dépendre de la puissance CPU de l'ordinateur.
Un grand merci je vais tester cela dès maintenant, et je te tiens au courant.
En fait même plantage que le précédent.
Je vais jouer avec la temporisation et je te tiens au courant.
 
Un grand merci je vais tester cela dès maintenant, et je te tiens au courant.
En fait même plantage que le précédent.
Je vais jouer avec la temporisation et je te tiens au courant.
si ça plante sur le copyPicture c'est peut être que le commentaire n'est pas encore totalement visible . Essaie de mette un DoEvents ou un autre Sleep entre le commentaire visible et le copyPicture et cela ne vient pas de l'autre sleep qui n'empêche que le plantage du saveImage. Et c'était quoi le message d'erreur sur la ligne du copyPicture ?
 
Dernière édition:
Apparemment j'ai passé le sleep à une valeur de 40, et tout a fonctionné correctement.
Comme c'est une opération qui sera effectuée seulement une seule fois lors de la première ouverture du fichier, la notion de quelques millisecondes ne me gêne pas. Au total on ne parle que de quelques secondes au total.
En tous cas je te remercie grandement pour ton aide. Tu m'as enlevé une grosse épine du pied.
Bonne soirée à toi.
 
Apparemment j'ai passé le sleep à une valeur de 40, et tout a fonctionné correctement.
Comme c'est une opération qui sera effectuée seulement une seule fois lors de la première ouverture du fichier, la notion de quelques millisecondes ne me gêne pas. Au total on ne parle que de quelques secondes au total.
En tous cas je te remercie grandement pour ton aide. Tu m'as enlevé une grosse épine du pied.
Bonne soirée à toi.
Sinon j'ai une arme contre ce type d'erreur , c'est ma fonction retryMethod qui permet de réessayer une fonction quand elle est en erreur jusqu'à temps qu'elle réussisse et c'est justement sur un copyPicture que je l'avais essayé.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
153
Réponses
19
Affichages
472
Retour