XL 2016 Export d'images + renommer celles-ci !

fougeron

XLDnaute Nouveau
Bonjour à tous,

Je suis novice en Excel et j'essaie de trouver mon bonheur pour réussir à trouver une solution à mon problème. J'ai un fichier avec en colonne A des noms et en colonne B des images (photos) qui correspondent aux noms de la colonne A. J'essaie de faire un export des images qui seraient nommées par le nom qui correspond à chaque image en colonne A.

J'ai trouvé des macros sur ce forum qui arrivent à me faire un export et à renommer mais chaque images est vierge (blanche) ! Donc, ça ne fonctionne pas. En cherchant sur internet j'ai trouvé cette macro !

Sub ExtractionImagesFeuille()
Dim Pict As Picture
Dim Nb As Byte
Dim ChartObj As ChartObject

For Each Pict In ActiveSheet.Pictures
Pict.CopyPicture 'copie l'image
Set ChartObj = ActiveSheet.ChartObjects.Add(0, 0, Pict.Width, Pict.Height)
ChartObj.Activate
ChartObj.Chart.Paste 'colle l'image dans un graphique temporaire
ChartObj.Chart.Export "C:\Users\m.fougeron\downloads\" & Pict.Name & ".jpg", "jpg" 'Sauvegarde au format image, dans le même répertoire que ce classeur.
Nb = ActiveSheet.ChartObjects.Count
ActiveSheet.ChartObjects(Nb).Delete 'Supprime le graphique
Next Pict

End Sub

Elle fonctionne parfaitement ! Elle me fait un export des photos. Par contre j'ai de modifier ça pour que cette Macro me renomme les photos avec les noms de la colonne A mais je n'y arrive pas... Je commence à désespérer !

De plus, cette macro exporte les photos par rapport à leurs tailles dans le fichier excel ! est-il possible d'avoir un export à la taille réelle de l'image avant l'intégration dans excel ?

Je vous joins un exemple en pièce jointe ! La macro est déjà intégrée dedans.

Si à tout hasard l'un de vous peut m'expliquer comment faire, ce serait top.

Merci à vous d'avoir pris le temps de me lire.
 

Pièces jointes

  • Fichier_TEST_MACRO.xlsm
    262 KB · Affichages: 15

fougeron

XLDnaute Nouveau
Re

Alors continuons les investigations ;)
Lances ces deux macros
VB:
Sub testImages1()
Dim Pict As Picture, NomIMG As String
    For Each Pict In ActiveSheet.Pictures
    NomIMG = Pict.TopLeftCell.Offset(, -1)
    Range(Pict.BottomRightCell.Offset(, 1).Address) = NomIMG
    Next Pict
End Sub
Sub testImages2()
MsgBox ActiveSheet.Pictures.Count
End Sub
A TESTER sur une copie
1) Avec la macro 1, tu dois avoir une valeur pour chaque image qui sera inscrite en colonne C.
Est-ce bien le cas? Il n'y aucune cellule vide après l’exécution de la macro?

2) La macro 2 te donne le nombre d'images présentes sur ta feuille.
Qu'affiche la MsgBox ?

Je rectifie... La macro 1 fonctionne sur C23... Puis de C35 à C62... C67, C68, C83, C84, C87 et C88. Pour le reste, rien en colonne C.
 

fougeron

XLDnaute Nouveau
Re

C'est à toi de voir ce qui différent dans les cellules incriminées.

Comment sont insérées les images?
Manuellement?
Par macro?
Ce sont tous des *.jpg?

les images ont été ajoutées via Insertion/Images... Par contre je pense que toutes ne sont pas en jpeg mais certaines en png.

Je vais faire des tests avec tout ce que tu m'as envoyé et surtout faire du ménage dans mon tableau... En ce qui concerne les photos par contre aucune idée comment faire pour déterminée lesquelles étaient en jpeg et lesquelles étaient en png. ça doit avoir une incidence je pense.
 

Staple1600

XLDnaute Barbatruc
Re

Logiquement JPG on PNG, à partir du moment où VBA les considère comme des Picture
Je viens de faire le test, j'ai ajouté un PNG dans ton fichier exemple, et la macro 2 affiche bien: 4
(donc 4 images présentes sur la feuille active)

C'est une bonne idée de faire le ménage ;)
Mais si tu pars d'un classeur tout propre, ca veut que tu vas insérer à la main 1938 images ? ;)
(si on en croit le message#6)
Bon courage et attention aux crampes de doigt ;)
 

fougeron

XLDnaute Nouveau
Re

Logiquement JPG on PNG, à partir du moment où VBA les considère comme des Picture
Je viens de faire le test, j'ai ajouté un PNG dans ton fichier exemple, et la macro 2 affiche bien: 4
(donc 4 images présentes sur la feuille active)

C'est une bonne idée de faire le ménage ;)
Mais si tu pars d'un classeur tout propre, ca veut que tu vas insérer à la main 1938 images ? ;)
(si on en croit le message#6)
Bon courage et attention aux crampes de doigt ;)

Oui oui 1938 images ! Je suis dans une m**** ! Merci beaucoup en tout cas pour ton aide ! je vais tenter de trouver une solution avec toutes tes indications. Merci 1000 fois... M'enfin... Merci 1938 fois du coup !
 

patricktoulon

XLDnaute Barbatruc
bonjour
De plus, cette macro exporte les photos par rapport à leurs tailles dans le fichier excel ! est-il possible d'avoir un export à la taille réelle de l'image avant l'intégration dans excel ?
a moins de ne pas les avoir modifiés lors de leurs insertion ca N'EST PAS POSSIBLE!!!!!

TOUT SIMPLEMENT PARCE QUE L'MAGE QUE TU VOIS DANS LE SHEETS EST UN BITMAP DE L'IMAGE INSEREE

elle n'a donc ABSOLUMENT!!!!!!!!!! PLUS RIEN AVOIR AVEC LE FICHIER IMAGE ORIGINAL!!!!!!!

si tu veux garder les propriétés de l'image originale tu dois te servir de controls activX image pour inséer et savepicture
 

Staple1600

XLDnaute Barbatruc
Re

fougeron
Heureusement il est possible d'importer tous les fichiers "image" d'un répertoire donné par le biais d'une macro VBA
De nombreux exemples de la chose sont disponibles dans les archives du forum.
Je voudrais pas que tu risques une luxation de deux ou trois phalanges ;)

EDITION: Bonsoir patricktoulon
Comme disait l'autre, jadis: Pourquoi tu tousses ? ;)
Mais merci pour l'info, tu viens de m'enlever une épine du pied.
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
pour l'export avec un chart on en a rien fout'tt que ce soit des png,tiff,gif,jpget même des wmf
du moment que tu fait un copypicture et non un simple copy
maintenant on est sur un autre problème avec les VERSIONS SUP A 2007
et j'ai répondu sur un autre forum
ICI
EN effet il y a une latence plus importance pour que le clipboard digère les informations
ce qui fait que soit tu a des images blanches soit carrément un plantage
j'ai bien quelques piste au sujet de ce petit bug mais c'est pas bien précis faut dire que microsoft ne m'a pas aidé sur ce point
bref bonne lecture ;)
 

Staple1600

XLDnaute Barbatruc
Re

fougeron
Donc pour éviter le tube d'Arnigel ;)
Une macro basique pour importer tes fichiers images
VB:
Sub Importer_JPG()
Dim strFolder$, strFileName$
Dim objPic As Picture, Plg As Range
strFolder = "C:\Users\STAPLE\Img_Test" ' adapter le chemin et le le nom du dossier

If Right(strFolder, 1) <> "\" Then
    strFolder = strFolder & "\"
End If

Set Plg = Cells(2)
strFileName = Dir(strFolder & "*.jpg", vbNormal)
Do While Len(strFileName) > 0
    Set objPic = ActiveSheet.Pictures.Insert(strFolder & strFileName)
      With objPic
      '.ShapeRange.LockAspectRatio = True
        .Left = Plg.Left: .Top = Plg.Top
        .Height = Plg.RowHeight
        .Placement = xlMoveAndSize
      End With
Plg.Offset(, -1) = strFileName
Set Plg = Plg.Offset(1, 0)
strFileName = Dir
Loop
End Sub
NB: Vaudrait mieux une version moins basique, qui s'occuperait "correctement" de la taille des images.
Mais au moins, cela t'évites 1988 importations manuelles ;)
 

patricktoulon

XLDnaute Barbatruc
j'avoue etre perdu la
png,jpeg,etc.. quel rapport avec l'export
de toute les manière le fichier image exporté par par un chart et de type gif(1frame)/jpeg en terme de structure de fichier image
copypicture copie en hmetafile; paste sur chart et export devient gif/jpeg
perso j'insert meme des ".ico" et les sauve avec le chart en jpg c'est pas un soucis
le problème c'est que les images dans le sheets si elles ont été redimensionnées les cimentions originales sont perdu
comme je disais donc soit il utilise des oleobjects image pour l'insertion et savepicture pour l'export
soit il mémorise les dims quelque part et se sert de pictures pour l'insertion
comme visiblement il y a divers conteneurs(jpg,png,etc...) sa seule solution c'est la memo des dimensions
sans ca !! c'est perdu ;)
 

Staple1600

XLDnaute Barbatruc
Re

Pour être précis, fougeron disait qu'il voulait nettoyer son classeur et donc ré-importer manuellement
ses 1938 images.
Donc je lui propose juste une macro pour éviter cette tache fastidieuse.
Ma dernière macro est donc juste un petit bonus
Mais ce n'est pas une réponse à la question qui suivait la question initiale:
exporter les images avec leur taille d'origine.
 

Staple1600

XLDnaute Barbatruc
Re

Une idée vient de me traverser l'esprit
Les images avec leur taille normale sont un dossier puis importées dans Excel (actuellement manuellement)
Ensuite une macro les exporte en leur donnant le nom présent en colonne A.
Donc au lieu de faire l'export, il suffirait de renommer les images du dossier avec la valeur de la colonne A
Comme cela plus de problème de taille d'image
Pour résumer l'idée
1) Import des images dans Excel par macro
(en incluant le nom original de l'image dans la colonne C)
2) Renommage des images en se basant sur les valeurs en colonne A correspondant aux valeurs en colonne C

NB: Par sécurité, on fera le renommage sur une copie du dossier
 

patricktoulon

XLDnaute Barbatruc
re ok
ajoute alors le memo des dims avant le replacement des images dans la cellules ou est sensé aller l'image pourquoi pas

pour l'export ce sera plus simple il prendra les dims dans le topleftcell.value

ne pas oublier aussi le poids que peut engendrer 1938 images sur le fichier global

un passage moulinette WIA serait le bien venu me semble t-il

si le cœur lui en dis je donnerais volontiers la fonction de réduction de poids lors de l'importation (librairie WIA)
 

Discussions similaires

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16