Option Explicit ' T'oblige à déclarer tes variables : excellente habitude à prendre
Private Sub Worksheet_Change(ByVal Target As Range) 'd'après JBoisgontier sur XLD : Toujours cité la source...
'et à chaque changement sur la feuille appliction du code
Dim Image, MonImage As Object 'Déclaration des variables, ici Image et MonImage sont des Objets
If Not Intersect(Target, Range("A2:B2")) Is Nothing Then 'S'il y a quelque chose en A2 et B2
ChDir ActiveWorkbook.Path 'Donne le chemin, ici pour les images donc dans le même répertoire
If [A2] = "Calecon" And [B2] <> "Ne pas Voir" Then Image = "Calecon.jpg" 'si A2 égale "Calecon" et B2 différent de "Ne pas voir" alors afficher "Calecon.jpg"
If [A2] = "Ecole" And [B2] <> "Ne pas Voir" Then Image = "Ecole.jpg"
If [A2] = "Muguet" And [B2] <> "Ne pas Voir" Then Image = "Muguet.gif"
If [A2] = "XLD" And [B2] <> "Ne pas Voir" Then Image = "XLD.bmp"
On Error Resume Next 'si VBA trouve une erreur on passe à la ligne suivante
ActiveSheet.Shapes("MonImage").Delete ' Effacement de l'image
Range("D2").Select 'Se positionner sur D2
MonImage = ActiveSheet.Pictures.Insert(Image).Select 'Détermination de l'image à insérer grâce à ligne If[xx]=...
Selection.Name = "MonImage" 'Donne le nom "MonImage" à la sélection et permet l'insertion
Target.Select 'Sélectionne la cellule D2 et place l'image
End If 'Fin de la condition
End Sub 'Fin de la macro