XL 2013 Recherchev image

  • Initiateur de la discussion Initiateur de la discussion WTF
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

WTF

XLDnaute Impliqué
Bonjour le forum,
JE cherche à faire une recherchev dont le résultat serait une image.
J'ai déjà trouvé pas mal de chose sur le forum et essayé de l'adapter à mon cas.

La solution que j'ai trouvée consiste à inclure dans des champs des formules indirect pour chaque ligne.
Le résultat correspond à ce que je veux, mais n'est pas très souple et ne me semble pas optimal.

Si l'un d'entre vous a une idée.
Je vous mets en PJ le fichier, c'est souvent beaucoup plus clair que des grandes phrases...

Merci à tous
 

Pièces jointes

Re : Recherchev image

Bonjour,

Une piste en VBA.
J'ai viré tous les Names de l'espace de noms et réorganisé les images dans une seule feuille (voir la pièce jointe).

1) Copiez le code suivant dans un module Standard
Code:
'### Constante à adapter ###
Const FEUILLE_IMAGES As String = "images"
'###########################

Public boolSelectionChange As Boolean

Sub GetImage(Cible As Range, Titre As String)
Dim S As Worksheet
Dim R As Range
Dim C As Range
Dim SH As Shape
Dim PIC As Excel.Picture
Dim nbCol&
Dim j&
Dim var
Dim bool As Boolean
'---
Application.ScreenUpdating = False
'--- Supprime l'image existante ---
On Error Resume Next
ActiveSheet.Shapes(Cible.Address).Delete
Err.Clear
'---
On Error GoTo Erreur
If Cible = "" Then Err.Raise 65000
'--- Recherche la correspondance ---
Set S = Sheets(FEUILLE_IMAGES)
S.Activate
var = S.[a1].CurrentRegion
'--- La bonne colonne ---
nbCol& = UBound(var, 2)
For j& = 1 To nbCol&
  If var(1, j&) = Titre Then
    Set R = S.Range(S.Cells(2, j&), S.Cells(UBound(var, 1), j&))
    Exit For
  End If
Next j&
'--- La bonne cellule ---
For Each C In R
  If C = Cible Then
    bool = True
    Exit For
  End If
Next C
'/////////////////////
'--- Si on a trouvé la bonne cellule ---
If bool Then
  '--- La bonne image ---
  For Each SH In S.Shapes
    If SH.TopLeftCell.Address = C.Address Then
      SH.Copy
      Exit For
    End If
  Next SH
  '--- Colle l'image dans la feuille appelante ---
  Application.EnableEvents = False
  Set S = Cible.Parent
  S.Activate
  Cible.PasteSpecial
  '--- Propriétés de l'image collée ---
  Set PIC = Selection '.OLEFormat.Object
  PIC.Name = Cible.Address
  PIC.Top = Cible.Top + 5
  PIC.Left = Cible.Left + 10
      '°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
      '°°° "BidonClic" est absolument nécessaire °°°
      '°°° pour éviter la sélection des images   °°°
  PIC.OnAction = "BidonClic"
      '°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
  Application.EnableEvents = True
  '---
  boolSelectionChange = True
Else
  Set S = Cible.Parent
  S.Activate
End If
'---
Erreur:
Application.ScreenUpdating = True
End Sub

Sub BidonClic()
'Cette procédure est vide mais est absolument
'nécessaire pour éviter la sélection des images
End Sub

2) Copiez le code suivant dans la fenêtre de code de la feuille concernée (Feuil1 dans cet exemple)
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("C4:E24,C27:E41")) Is Nothing Then
  Call GetImage(Target, Cells(2, Target.Column))
End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If boolSelectionChange Then
  Target.Select
  boolSelectionChange = False
End If
End Sub
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 Champs calculé TCD
Réponses
5
Affichages
183
Réponses
3
Affichages
223
Réponses
6
Affichages
494
Retour