Afficher une image externe au fichier xls

Afficher une image suivant le contenu d'une case ou en cliquant dessus

But: on veut afficher une image différente suivant le contenu de la case A1 et aussi obtenir une possibilité de changement lorsque l'on clique sur l'image donc obtenir ceci :

1er Cas : Sur une Feuille

Pour atteindre le but, nous avons besoin de macros que voici :
La première réagit sur l'événement "Worksheet_Change(ByVal Target As Range)"; ce qui correspond en fait à n'importe quel changement dans une cellule de la feuille. On y définit alors que l'on ne s'intéresse qu'à la case A1; on transforme le contenu de A1 en majuscule pour éviter les déconvenues si l'utilisateur ne respecte pas la casse et un petit "select case" nous permet de charger l'image que l'on désire

Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range, Maj As String
'on fait une boucle car on pourrait ajouter
'des tests sur différentes cases
For Each c In Range("A1")
 'on place le contenu de la case A1 en majuscule
 'on ne se préoccupe pas ainsi de la manière
 'dont c'est écrit Marie, MaRiE,etc ...sont bons
Maj = UCase(Range("A1"))
'on va charger l'image adéquate
Select Case Maj
Case Is = "JULIE"
Feuil1.Image1.Picture = LoadPicture("c:\temp\01.jpg")
Case Is = "MARIE"
Feuil1.Image1.Picture = LoadPicture("c:\temp\02.jpg")
End Select
Next
End Sub

La seconde procédure réagit lorsque l'on clique sur l'image, elle appelle un module qui fera ouvrir une inputbox que l'on doit ici remplir avec "A" ou "B", il est certain que l'on peut définir ce que l'on veut, on aurait pu redemander à entrer "marie" et "julie"

Private Sub Image1_Click() 
 Call image 'appel d'une autre procédure 
End Sub
'Code du module
Option Explicit
Sub image()
 Dim im As image
 Dim reponse As String
 reponse = InputBox("Quelle image ?", "Répondre A-B-C-D ou E")
 Select Case reponse
  Case "B"
    Feuil1.Image1.Picture = LoadPicture("c:\temp\01.jpg")
  Case "A"
    Feuil1.Image1.Picture = LoadPicture("c:\temp\02.jpg")
  Case "C"
    Feuil1.Image1.Picture = LoadPicture("c:\temp\03.jpg")
  Case "D"
    Feuil1.Image1.Picture = LoadPicture("c:\temp\04.jpg")
  Case "E"
    Feuil1.Image1.Picture = LoadPicture("c:\temp\05.jpg")
 End Select
End Sub

2ème Cas : Sur un UserForm

Créer le formulaire en posant un contrôle combobox et un contrôle image (traits rouges)

Dans les propriétés du contrôle image, modifiez son mode d'affichage pour que l'image se redimensionne automatiquement à la taille du contrôle

Entrez ensuite le code suivant pour les contrôles respectifs - initialisation du formulaire et remplissage automatique de la combobox

Option Explicit
'***** le contenu de la combobox vient complèter
'***** le nom du fichier - image qui est en jpg
Private Sub ComboBox1_Change()
  UserForm1.Image1.Picture = LoadPicture("C:\temp\" & 
ComboBox1 & ".jpg")
End Sub

'**** Remplir la combobox ******
Private Sub UserForm_Initialize()
  Dim c As Range
  ComboBox1.Clear
  For Each c In Range("A1:A5")
    ComboBox1.AddItem c
  Next
End Sub

Voici ce que vous devez obtenir après la première sélection


Placez des images dans le dossier c:/temp/ et renommez les 01.jpg; 02.jpg. Plus un fichier MARIE.jpg et JULIE.jpg. 

Téléchargez le fichier exemple AfficherUneImage

FIN