Afficher une image en fonction de la valeur d'une cellule.

JBOBO

XLDnaute Accro
Bonjour le forum,

Je cherche à afficher/masquer une image dans un fichier selon la valeur d'une cellule. (issu d'une formule).
J'ai expliqué un peu mieux mon souhait dans le fichier joint, après reflexion, le 2ème cas ayant ma préférence, mais je ne voudrais pas paraitre exigeant, alors une solution quelqu'elle soit, sera la bienvenue.

Merci à tous !
J.Ch.
 

Pièces jointes

  • affiche image xld.xlsm
    254.7 KB · Affichages: 200

job75

XLDnaute Barbatruc
Re : Afficher une image en fonction de la valeur d'une cellule.

Bonjour JBOBO,

Dans le fichier joint voir comment j'ai renommé les images.

Et ces 2 macros dans le code de la feuille :

Code:
Private Sub WorkSheet_Change(ByVal Target As Range)
If Target.Address = "$B$8" Then Affiche Target.Offset(, 1).Text, 1
If Target.Address = "$G$13" Then Affiche Target.Text, 2
End Sub

Sub Affiche(t As String, n As Byte)
Dim p As Object
For Each p In Me.Pictures
  If p.Name Like "*" & n Then
    p.Visible = False
    If p.Name = t & n Then p.Visible = True
  End If
Next
End Sub
Faire les choix dans les listes en B8 et G13.

Les images sont dans la feuille et empilées les unes sur les autres aux 2 endroits.

A+
 

Pièces jointes

  • affiche image xld(1).xls
    293.5 KB · Affichages: 258

job75

XLDnaute Barbatruc
Re : Afficher une image en fonction de la valeur d'une cellule.

Re,

Une autre solution qui copie les images de la feuille Images.

La macro est nettement moins élégante :

Code:
Private Sub WorkSheet_Change(ByVal Target As Range)
If Target.Address <> "$G$7" Then Exit Sub
Dim p As Object, n As Variant
For Each p In Me.Pictures 'supprime toute image
  p.Delete
Next
With Sheets("Images")
  n = Application.Match(Target, .[A2:A6], 0)
  If IsError(n) Then Exit Sub
  Application.ScreenUpdating = False
  .Activate
  .Pictures("Picture " & n).Select
  Selection.Copy 'met la sélection dans le presse-papier
  ActiveCell.Activate 'désactive l'objet
End With
Me.Activate
[D9].Select 'cellule du collage
Me.Paste 'collage
Target.Select
[A1].Copy [A1] 'vide le presse-papier
End Sub
Il n'y a jamais plus d'une image dans la feuille rapport.

Fichier joint.

A+
 

Pièces jointes

  • Copie et affiche image xld(1).xls
    290 KB · Affichages: 166

job75

XLDnaute Barbatruc
Re : Afficher une image en fonction de la valeur d'une cellule.

Bonjour Habitude,

Cette simplification est valable s'il n'y a qu'une cellule contrôlée.

Et dans ce cas n n'est plus nécessaire.

Mais dans le cas de mon fichier du post #2 il y a deux cellules contrôlées (B8 et G13).

Et l'activation de l'une effacerait les images de l'autre...

A+
 

JBOBO

XLDnaute Accro
Re : Afficher une image en fonction de la valeur d'une cellule.

Bonjour Job75, Habitude,

Un grand merci pour vos réponses, malheureusement je n'arrive pas à ce que je souhaite. Job75, Je ne parviens pas à adapter ton 1er exemple. Quand je selectionne une valeur dans ma liste déroulante, toutes les images s'effacent. Je n'arrive pas à comprendre pourquoi, j'ai pourtant renommer mes images en mettant un 1 à la fin mais rien n'y fait.

Pour ce qui est de ton 2eme exemple, ça fonctionne presque. J'entends par là que si le nom de l'image est dans ma liste déroulante, ça fonctionne. Malheureusement je n'ai pas le nom des images dans cette liste. ils apparaissent dans une autre cellule.

En gros, j'ai une liste déroulante en O36, qui me permet d'obtenir par formule en O40, le nom de l'image à afficher.
mais du coup si je fais référence à O40 dans la macro.

Je rejoins un bout de fichier.

Merci encore de bien vouloir aider "le boulet de la macro"

J.Ch.
 

Pièces jointes

  • exemple image 2.xls
    282.5 KB · Affichages: 130

job75

XLDnaute Barbatruc
Re : Afficher une image en fonction de la valeur d'une cellule.

Re,

Je préfère de loin la 1ère solution que j'ai proposée (images dans la feuille).

Et bien sûr comme il n'y a qu'une seule cellule à contrôler (donc une seule série d'images) le code est très simple :

Code:
Private Sub WorkSheet_Change(ByVal Target As Range)
If Target.Address <> "$O$36" Then Exit Sub
Dim p As Object
For Each p In Me.Pictures
    p.Visible = [O40] = p.Name
Next
End Sub
Fichier joint.

A+
 

Pièces jointes

  • exemple image 2(1).xls
    280 KB · Affichages: 213

JBOBO

XLDnaute Accro
Re : Afficher une image en fonction de la valeur d'une cellule.

re,
Merci job75. Tout simplement genial.
En plus Je crois avoir compris la macro.
Neanmoins je n'ai pas encore fini mon projet et je ne sais pas si je n'aurais pas par la suite, une deuxieme liste déroulante qui permettra d'afficher le nom d'une autre image dans une autre cellule mais dans la meme feuille (en fait, exactement la même chose, mais une deuxieme fois, pour d'autres images).
j'imagine que je ne peux pas faire un simple copier/coller de ton code ne remplaçant les adresses O36 et O40 par de nouvelles adresses.
Mais je n'en suis pas là et tu m'as super bien aidé.

Merci encore !
J.Ch.
 

job75

XLDnaute Barbatruc
Re : Afficher une image en fonction de la valeur d'une cellule.

Bonjour JBOBO,

S'il y a plusieurs listes déroulantes ce sont les 2 macros de mon post #2 qu'il faut utiliser.

Même si les séries d'images sont différentes, il faudra mettre un indice n (qui caractérise la série) après le nom de chaque image.

A+
 

Discussions similaires

Statistiques des forums

Discussions
311 707
Messages
2 081 734
Membres
101 809
dernier inscrit
HADER2024