afficher une image selon son chemin

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!
 

maxboss1984

XLDnaute Nouveau
Re : afficher une image selon son chemin

voila ;)

merci d'avance
 

Pièces jointes

  • logo.jpg
    logo.jpg
    33.3 KB · Affichages: 110
  • test.xls
    176.5 KB · Affichages: 164
  • logo.jpg
    logo.jpg
    33.3 KB · Affichages: 119
  • test.xls
    176.5 KB · Affichages: 173
  • logo.jpg
    logo.jpg
    33.3 KB · Affichages: 114
  • test.xls
    176.5 KB · Affichages: 184
G

Guest

Guest
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:

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
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

  • CopieTest.zip
    67.4 KB · Affichages: 107
  • Copie de test3.xls
    178 KB · Affichages: 141
  • Copie de test4.xls
    180 KB · Affichages: 136
Dernière édition:

maxboss1984

XLDnaute Nouveau
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!
 
G

Guest

Guest
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+
 

Discussions similaires

Statistiques des forums

Discussions
312 169
Messages
2 085 924
Membres
103 042
dernier inscrit
slfjs