Sub Affiche_Image() 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
Set Ws = Sheets("Bon de commande") ' Nom de la feuille
Application.ScreenUpdating = False ' Interdit le raffraîchissement d'écran
Efface_Images
With Ws
For Lg = 2 To .Range("B65536").End(xlUp).Row ' Parcourt de toute la colonne B
.LockAspectRatio = msoFalse ' On peut la redimmensionner comme on veut .Left = Ws.Cells(Lg, "B").Left ' Position gauche .Top = Ws.Cells(Lg, "B").Top ' Position Haut .Width = Ws.Cells(Lg, "B").Width ' Largeur .Height = Ws.Cells(Lg, "B").Height ' hauteur End With If Err.Number > 0 Then ' Si une erreur (image non présente) MsgBox .Cells(Lg, "A") & vbCr & "Image inexistante" ' On le signale End If Next Lg End With End Sub
Sub Efface_Images() Dim Ws As Worksheet ' Sert à manipuler plus facilement l'objet feuille Dim Sh As Shape ' Sert à manipuler les formes (images) déjà affichées
Set Ws = Sheets("Bon de commande") ' Nom de la feuille
With Ws
For Each Sh In .Shapes ' Parcourt de toute la collection formes (images) If Not Intersect(.Columns(1), Sh.TopLeftCell) Is Nothing Then ' si elle est dans la colonne 1 Sh.Delete ' On l'efface End If Next Sh End With
Donc en résumé, j'ai une colonne "A" ou je met le numéro d'article (en commencant par la ligne 2)
Et en colonne "B" L'image correspondant au numéro d'article s'affiche quand je clique sur le bouton (il y à 2 boutons avec la macro, un pour afficher les images un pour effacer)