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

3'203galiat.zip (93.23 Ko)

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

A essayer

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 dernire 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 Sub

les 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 Sub

Merci !

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.

Rechercher des sujets similaires à "inserer images fonction code"