afficher une image selon son chemin

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 !

maxboss1984

XLDnaute Nouveau
Bonjour,

Je vous expose mon problème:

J'ai un excel contenant plusieurs onglets.

Sur le premier, il s'agit d'une liste de lignes contenant des informations (par exemple, nom, prenom, adresse, etc).

Sur le second, on affiche ces infos sous la forme d'une fiche, qui ramène toutes les infos selon le numéro de fiche choisi via un RECHERCHEV sur l'onglet précédent.
J'aimerais rajouter dans cette "fiche", l'affichage d'une image.

J'ai donc rajouté une colonne "image" dans le premier onglet, où l'on peut rajouter le chemin d'une image.
Dans le second, je n'arrive pas à afficher l'image correspondant au chemin saisi dans le premier onglet..
J'ai tenté des solutions via des macros trouvées sur le net, mais rien n'y fait...
Comment faire svp?

(je suis désolé, je ne peux pas vous transmettre le fichier, ce sont des données confidentielles...)

Merci d'avance!
 
Re : afficher une image selon son chemin

Re,

Qu'est-ce que tu veux redimensionner?
Adapter le contrôle image pour qu'il prenne la dimenssion de l'image(sur disque)?
Adapter l'image sur disque aux dimensions du contrôle? (plus compliqué)

A+
 
Dernière modification par un modérateur:
Re : afficher une image selon son chemin

Bonjour,

Exemple:

http://boisgontierjacques.free.fr/fichiers/Images/ChoixImage3b.xls

Les proportions sont respectées mais la taille du contrôle n'est pas adaptée:


Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address = "$A$2" And Target.Count = 1 Then
    RépertoirePhoto = "c:\mesdoc\"    ' adapter
    nf = RépertoirePhoto & "\" & Target & ".jpg"
    If Dir(nf) <> "" Then
       Me.Image1.Picture = LoadPicture(nf)
       Me.Image1.PictureSizeMode = fmPictureSizeModeZoom
    Else
      Me.Image1.Picture = Nothing
    End If
  End If
End Sub


Sur cet exemple, on impose la hauteur du contrôle. La largeur du contrôle est adaptée à la taille de l'image.


Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address = "$A$2" And Target.Count = 1 Then
    RépertoirePhoto = "c:\mesdoc\"    ' adapter
    nf = RépertoirePhoto & "\" & Target & ".jpg"
    If Dir(nf) <> "" Then
       taille = TaillePixelsImage(RépertoirePhoto, Target & ".jpg")
       rap = Val(Split(taille, "x")(0)) / Val(Split(taille, "x")(1))
       Me.Image1.Height = 100             ' on fixe la hauteur
       Me.Image1.Width = Me.Image1.Height * rap
       Me.Image1.Picture = LoadPicture(nf)
       Me.Image1.PictureSizeMode = fmPictureSizeModeZoom
    Else
      Me.Image1.Picture = Nothing
    End If
  End If
End Sub

Function TaillePixelsImage(repertoire, fichier)
  Set myShell = CreateObject("Shell.Application")
  Set myFolder = myShell.Namespace(repertoire)
  Set myFile = myFolder.Items.Item(fichier)
  TaillePixelsImage = myFolder.GetDetailsOf(myFile, 26)
End Function

Version avec insertion directe de l'image sans contrôle image


Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address = "$K$3" And Target.Count = 1 Then
    RépertoirePhoto = "c:\mesdoc\"       ' adapter
    nomphoto = Application.VLookup([K3], [Enjeux], 26, False)
    On Error Resume Next
    Shapes("MonImage").Delete
    nf = RépertoirePhoto & "\" & nomphoto
    If Dir(nf) <> "" Then
      Set img = ActiveSheet.Pictures.Insert(nf)
      img.Name = "MonImage"
      img.Left = [I20].Left
      img.Top = [I20].Top
    End If
   End If
End Sub


JB
 

Pièces jointes

Dernière édition:
Re : afficher une image selon son chemin

merci à vous pour ces infos,

je cherche à adapter l'image aux dimensions du contrôle.

J'ai tenté la méthode dans l'excel de JB, mais VB me sort "l'indice n'appartient pas à la sélection" sur la ligne rap = Val(Split(taille, "x")(0)) / Val(Split(taille, "x")(1)).

D'où cela peut-il venir svp? (Je vous copie mon code)

Private Sub Worksheet_Calculate()
Dim rap As Integer
If Not IsError(Range("B17")) And Range("B17") <> 0 And Dir(ThisWorkbook.Path & "\" & Range("B17")) <> "" Then
If Range("B17") <> ImageEnCours Then
ImageEnCours = Range("B17")

taille = TaillePixelsImage(ThisWorkbook.Path & "\", ImageEnCours)
rap = Val(Split(taille, "x")(0)) / Val(Split(taille, "x")(1))
Image1.Height = 100 ' on fixe la hauteur
Image1.Width = Me.Image1.Height * rap
Image1.Picture = LoadPicture(ThisWorkbook.Path & "\" & ImageEnCours)
Image1.PictureSizeMode = fmPictureSizeModeZoom
End If
Else
'image par défaut
ImageEnCours = "photo-defaut-100.bmp"
Image1.Picture = LoadPicture(ThisWorkbook.Path & "\" & ImageEnCours)
End If
End Sub

Function TaillePixelsImage(repertoire, fichier)
Dim myShell As Shell
Dim myFolder As Folder
Dim myFile As FolderItem
Set myShell = CreateObject("Shell.Application")
Set myFolder = myShell.Namespace(repertoire)
Set myFile = myFolder.Items.Item(fichier)

TaillePixelsImage = myFolder.GetDetailsOf(myFile, 26)
If TaillePixelsImage = "" Then
TaillePixelsImage = 100
End If
End Function

Merci d'avance!
 
Re : afficher une image selon son chemin

Bonjour

Pour adapter l'image à la taille du contrôle:
Onglet/Développeur/Cliquer sur le bouton "Mode création"
Cliquer sur le contrôle images pour le sélectionner
Onglet/Développeur/cliquer sur le bouton "Propriétés"

Dans la fenêtre des propriétés repérer la propriété PictureSizeMode et la mette à 3 - fmPictureSizeModeZoom

C'est tout.
P.S. toujours sous 2010 pour afficher l'onglet Développeur voir dans Fichier/Option/Personnaliser le ruban
A+
 
- 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

Réponses
1
Affichages
493
Retour