Private Sub Worksheet_Change(ByVal Target As Range)
Dim im As Shape 'déclare la variable im (IMage)
If Target.Address <> "$A$1" Then Exit Sub 'si le chan gement a lieu ailleurs qu'en A1, sort de la procédure
Application.ScreenUpdating = False 'masques les rafraîchissements d'écran
If Target.Value = "" Then 'condition : si A1 est effacé
For Each im In ActiveSheet.Shapes 'boucle sur toutes les objets Shape de l'onglet actif
im.Visible = False 'masque l'objet
Range("F1").Value = im.Name
Next im 'prochain objet de la boucle
End If 'fin de la condition
If Target.Value = "tout" Then 'condition : si A1 est effacé
For Each im In ActiveSheet.Shapes 'boucle sur toutes les objets Shape de l'onglet actif
im.Visible = True 'masque l'objet
Range("F1").Value = im.Name
Next im 'prochain objet de la boucle
Exit Sub
End If 'fin de la condition
For Each im In ActiveSheet.Shapes 'boucle sur toutes les objets Shape de l'onglet actif
If im.Name = CStr(Target.Value) Then 'condition : si le nom de l'objet est egal à la valeur de la cellule A1 (convertie en texte)
'taille de l'image
im.Width = Range("C2").Width 'définit la largeur de l'image
If im.Height > Range("C2").Height Then im.Height = Range("C2").Height 'si la hauteur de l'image est supérieure à la hauteur de C2, redéfinit la hauteur de l'image
'centrage de l'image
im.Top = Range("C2").Top + ((Range("C2").Height - im.Height) / 2) 'définit le haut de l'image (au centre vertical de C2)
im.Left = Range("C2").Left + ((Range("c2").Width - im.Width) / 2) 'définit la position gauche de l'image (au centre horizontal de C2)
'affichage de l'image
im.Visible = True 'affiche l'objet im
Else 'sinon
im.Visible = False 'masque l'objet im
End If 'fin de la condition
Next im
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
End Sub