Excel, insérer des images en fonction d'un code
Bonjour à tous,
Je viens vous voir, car j'aurai besoin d'aide pour excel. Une aide très précieuse. J'espère que je ne me suis pas trompé d'endroit pour poser ma question.
Alors, voiçi la question:
J'ai 2 colonnes, A et B. La colonne B contient environ 600 codes differents de produits.
Je possède dans un dossier stocké sur mon disque dur 600 photos, donc 1 photo par code. En d'autres termes, chaque code de la colonne B possède une photo en jpeg sur le disque dur dont le nom est identique .
J'aimerai pouvoir automatiser l'insertion de photo dans la colonne A, c'est à dire qu'il insère dans la colonne A la photo associé au code de la colonne B. J'aimerai aussi qu'il redimmensionne l'image en fonction de la taille de la cellule.
J'espère que vous avez compris mon petit problème. Insérer 600 photos une par une, c'est long. Et j'ai cru comprendre en parcourant internet qu'il existait une méthode plus rapide. Cependant, je n'ai jamais programmé en VBA ou fait de macro. Alors, j'ai du mal à comprendre les explications précedentes.
S'il est possible de faire un tel 'programme', et que vous avez le temps de m'aider, pourriez vous me décrire exactement la procédure à suivre, ainsi que le 'code' ?
Ah oui, j'oubliais, je n'ai pas forcément toutes les photos. Donc il faudrait que la 'macro' continue à la ligne suivante même s'il n'y a pas de photo.
Je vous remercie grandement par avance.
Galiat
PS: j'ai prioritairement excel 2003, mais aussi 2007. J'aimerai mieux une procédure sur 2003, mais 2007 me va parfaitement aussi.
Bonjour
Une adaptation d'un code fait pour un autre membre du forum
Le dossier et le fichier doivent être dans le même répertoire
Bonjour,
C'est exactement cela que je recherche. Mais comment fais je pour l'adapter à mon fichier ? comme souligner précedement, je n'y connais rien du tout en macro, etc.
Donc, 2 autres petites questions:
- Dans ma colonne B, il y a écrit 812312. Il n'y a pas le .jpeg. Ca posera un problème ? Edit: Bon, ca posera un problème, j'ai fait des tests. Mais il suffit de compléter le document chaque fin, ca devrait aller.
- Comment puis je transférer cette macro dans mon fichier ? Edit: j'ai tenter de modifier la macro, je vais peut être y arriver en tattonnant, car c'est très bien expliqué. Mais si vous pouvez m'aider quand même.
Je te remercie grandement pour m'avoir déjà apporté ce document.
Galiat
GROS EDIT: En fait, c'était simple, et ca marche très bien. Je vous remercie. Super réponse, et rapide.
Bonjour,
J'ai le même problème. J'ai pris le fichier que tu a fournis, et je pense avoir compris le "gros", et ai réussi à en refaire un, maintenant, le souci que j'ai, c'est que je veux faire ça à partir d'une cellule, c'est a dire, au lieu d'écrire dans "B" pour mettre l'image en "A", je souhaite mettre mon code en B12, et que mon image s'affiche en B13.
Comment puis-je faire ?
Salutations.
Jb.
Bonjour
Il faut préciser
code en B12, et que mon image s'affiche en B13.
Il n'y a plus qu'une image ?
Ou tu veux les noms en ligne 12 et les images en ligne 13 ?
A te lire
Désolé, en me relisant j'ai eu moi même du mal a me comprendre. Hum !!!
J'ai créé un dossier images, avec une cinquantaine d'images. Ce que je veux, c'est quand je tape par exemple: "image1.jpg" en cellule B12, je veux que l'image du même nom s'affiche en cellule B13. Et je souhaite faire ça jusqu'aux cellules F. Soit: B12; C12... F12.
Salutations.
Jb
Bonjour,
J'ai éssayé ton fichier. Tres bien, c'est exactement ce que je veux faire, mise a part la liste déroulante, maintenant, le souci, c'est que je ne comprends pas comment tu as fait, je ne vois aucune macro, aucune formule... Peux-tu éclairer ma lanterne
Salutations.
Jb
Bonjour
Tu as du code dans le code de la feuille
Clic droit sur l'onglet ---> Visualiser le code
Celui-ci sert à intercepter le changement dans la feuille (cellules B12 à F12) et ensuite appelle la macro Affiche_Image
cette macro est dans le module "Module1"
Double clic sur "module1" et tu verras le code
Bonne journée
Super, Merci beaucoup, ça fonctionne comme je le voulais.
Merci.
Bonne journée.
Jb.
Bonjour,
j'ai utilisé ce code avec succès, merci, pour insérer des milliers de photos.
Hélàs je dois porter ce fichier sur un mac (en plus de windows, les deux nécessaires pour le même fichier), et là, les images sont perdues...
Cela fonctionne si on copie colle chaque image dans une autre colonne, mais avec des milliers, je me vois pas faire ça à la mano..
Y aurait il un moyen de copier coller toutes les images ainsi d'un coup ? sans utiliser la fonction collage spécial sur la colonne, ' en tant qu'image' qui crée une seule image de toutes, ingérables..
ou une meilleure idée...
des milliers à la main, un vrai cauchemar..
merci de votre aide..
Bonjour
Je viens de voir le code et les images sont sensées être dans un répertoire précis
Pourquoi ne pas utiliser la même méthode pour le fichier Mac ?
Peut-être que tu veux le fichier Mac avec les photos déjà insérées ?
Si c'est cela il faut faire une macro qui parcourt toute les noms dans la (les) feuille(s) et qui insère la photo
Donnes des précisions et on peut essayer de trouver une solution
A suivre
Merci de votre réponse
Le problème c'est que les chemins sont différents sur Mac : des ":" a la place des \.
j'ai modifie ma macro dans ce style :
If Application.OperatingSystem Like "*Mac*" Then
Chemin = :
Else
Chemin = \
End if
(j'ai raccourci, il y a tout le chemin jusqu'à la cellule dans "chemin"
Les images n'apparaissent toujours pas, mais si on relance la macro sur le Mac, elles s'affichent, et en repassant le fichier sur le pc elles restent...Mais c'est lourdingue, et j'ai des doutes sur la fiabilité de la chose avec différentes versions excel Mac.
Une solution serait de transformer les images insérées en images collées dans la cellule.
Certes le fichier sera lourd, mais les macs l'ouvriront et plus besoin de l'enregistrer avec macro, ce qui pose pb a mon destinataire.
Y aurait pas une formule dans le genre insert picture and paste as Shape ? Dans l'idée...
Bonjour
Je ne comprends pas tout
emicoma a écrit :Les images n'apparaissent toujours pas, mais si on relance la macro sur le Mac, elles s'affichent
Il faut que tu lances la macro deux fois pour avoir un résultat sur le Mac ?
emicoma a écrit :et en repassant le fichier sur le pc elles restent.
Ce que j'ai compris, avec le Mac c'est que si tu sauves le fichier (une fois que les images sont insérées) elles ont disparues lorsque tu ré-ouvre le fichier tandis que la même opération avec le PC les images ne disparaissent pas
emicoma a écrit :Une solution serait de transformer les images insérées en images collées dans la cellule.
Je ne vois pas comment ?
Pour la partie PC je peux (en principe) t'aider mais côté Mac je jette l'éponge
Il faudrait que tu fournisses un exemple du fichier que tu as pour les deux machines et peut-être une solution sera trouvée
A suivre
J'ai finalement utilisé une autre formule :
With Ws.Shapes.AddPicture(Image, False, True, Left, Top, 112, 112)
qui permet de déterminer que les images ne sont pas liées (false) et enregistrées avec le fichier (true)
pour le left et le top :
Left = Ws.Cells(Lg, "B").Left + (Ws.Cells(Lg, "B").Width - 112) / 2
Top = Ws.Cells(Lg, "B").Top + (Ws.Cells(Lg, "B").Height - 112) / 2
mais je ne suis pas arrivée à fixer les dimensions de l'insertion en fonction de l'image, j'ai fixé à 112.
Code en entier :
Attribute VB_Name = "Module41"
Option Explicit
Sub ShapeAddPhoto()
Dim Ws As Worksheet ' Sert ˆ manipuler plus facilement l'objet feuille
Dim Image As String ' Contiendra le nom de l'image
Dim Lg As Long ' NumŽro de la dernire ligne colonne B
Dim Left As Double
Dim Top As Double
Dim Width As Double
Dim Height As Double
Set Ws = ActiveSheet ' Nom de la feuille
Application.ScreenUpdating = False ' Interdit le raffra”chissement d'Žcran
Efface_Images
With Ws
For Lg = 1 To .Range("I65536").End(xlUp).Row
' Parcourt de toute la colonne B
Left = Ws.Cells(Lg, "B").Left + (Ws.Cells(Lg, "B").Width - 112) / 2 ' Position gauche
Top = Ws.Cells(Lg, "B").Top + (Ws.Cells(Lg, "B").Height - 112) / 2
Image = "C:\Users\Administrateur\Desktop\myfolder\" & .Cells(Lg, "I")
On Error Resume Next ' On s'affranchit des erreurs
With Ws.Shapes.AddPicture(Image, False, True, Left, Top, 112, 112)
End With
If Err.Number > 0 Then ' Si une erreur (image non prŽsente)
MsgBox .Cells(Lg, "I") & vbCr & "Image inexistante" ' On le signale
End If
Next Lg
End With
End Subles images sont ainsi collées, enregistrées, et pas de problème pour les afficher sur le mac, et pas besoin de macron non plus sur le mac.
faudrait encore arriver à determiner width et height sans rentrer de valeur en dur, tu aurais une idée ?
Bonjour
Je ne sais pas mais en cherchant j'ai trouvé une macro qui récupère les dimensions de l'image
je l'ai adapté à ta macro
Ps: Evites d'utiliser des mots réservés (Left, Top, Height, Width) pour définir des variables (risques de confusion)
Option Explicit
Sub ShapeAddPhoto()
Dim Ws As Worksheet ' Sert à manipuler plus facilement l'objet feuille
Dim Image As String ' Contiendra le nom de l'image
Dim Lg As Long ' Numéro de la dernière ligne colonne B
Dim Gauche As Double
Dim Haut As Double
Dim Largeur As Double
Dim Hauteur As Double
Dim iPict As IPictureDisp
Set Ws = ActiveSheet ' Nom de la feuille
Application.ScreenUpdating = False ' Interdit le raffraîchissement d'écran
Efface_Images
With Ws
For Lg = 1 To .Range("I65536").End(xlUp).Row ' Parcourt de toute la colonne B
Image = "C:\Users\Administrateur\Desktop\myfolder\" & .Cells(Lg, "I")
Set iPict = LoadPicture(Image)
Largeur = Round((iPict.Width) / 21.16, 0)
Hauteur = Round((iPict.Height) / 21.16, 0)
Set iPict = Nothing
Gauche = Ws.Cells(Lg, "B").Left + (Ws.Cells(Lg, "B").Width - Largeur) / 2 ' Position gauche
Haut = Ws.Cells(Lg, "B").Top + (Ws.Cells(Lg, "B").Height - Hauteur) / 2
On Error Resume Next ' On s'affranchit des erreurs
Ws.Shapes.AddPicture Image, False, True, Gauche, Haut, Largeur, Hauteur
If Err.Number > 0 Then ' Si une erreur (image non présente)
MsgBox .Cells(Lg, "I") & vbCr & "Image inexistante" ' On le signale
End If
Next Lg
End With
End SubMerci !
J'ai testé, mais j'ai une erreur sur ligne :
Set iPict = LoadPicture(Image)
erreur 53, fichier introuvable.
Je regarderai ça mieux demain..
Bonjour,
Je cherche moi aussi à insérer automatiquement une image. Mais je débute en VBA....
Est-ce possible de le faire sans liste déroulante ?
C'est à dire, si je reprends vos exemples, je rentre "Voiture" dans la cellule et cela affiche l'image voulue.
Peut-on aussi récupérer les images dans un répertoire différent de celui du fichier ?
Merci
Bonjour
yoline a écrit :Mais je débute en VBA....
Tout ceux qui font du VBA sont passés par ce stade
yoline a écrit :Est-ce possible de le faire sans liste déroulante ?
Bien sur, une liste déroulante est un moyen d'éviter les erreurs de saisie
yoline a écrit :C'est à dire, si je reprends vos exemples, je rentre "Voiture" dans la cellule et cela affiche l'image voulue.
Si l'image existe au bon endroit (chemin à vérifier) pas de problème
je crois qu'il faut aussi marquer l'extension (mais il suffit de modifier la macro pour ne pas le faire)
yoline a écrit :Peut-on aussi récupérer les images dans un répertoire différent de celui du fichier ?
heureusement que oui
Une question: Quel fichier utilises tu ?
Moi je suis débutante avec un grand D, lol.
J'ai le code d'un composant (5A34 par exemple) dans une cellule, par exemple B4. L’idéal est de ne pas marquer l'extension.
La photo a pour nom : 5A34.jpg.
Merci pour ton aide.