VBA macro - Afficher des photos avec hauteur & largeur fixe

Bonjour,

Est-ce que quelqu'un serait en mesure de modifier le code ci-dessous pour que les photos affiches soient proportionnel a l'image original et quelle soit maximum la hauteur de 3,57cm et largeur de 6,03cm svp

Sub ChargeTrombinoscope()
    Dim Chemin As String, Fichier As String
    Dim Nom, Prénom As String
    Dim splitArr() As String
    Dim Ligne As Integer
    Worksheets("Pix").Activate

    'Définit le répertoire contenant les fichiers
    Chemin = "C:\test-20160928\MyPH\"
    'Boucle sur tous les fichiers du répertoire (photos).
    Ligne = 3
    Fichier = Dir(Chemin & "*")
    Do While Len(Fichier) > 0
        'Extraction prénom
         splitArr = Split(Fichier, ".")
         Prénom = splitArr(0)
         Range("H" & Ligne).Value = Prénom
         'insertion de la photo dans la colonne C
          Largeur = ActiveSheet.Cells(Ligne, 11).Width
        Hauteur = ActiveSheet.Cells(Ligne, 11).Height
        GaucheI = ActiveSheet.Cells(Ligne, 11).Left
        HautI = ActiveSheet.Cells(Ligne, 11).Top
        ActiveSheet.Shapes.AddPicture Chemin & Fichier, False, True, GaucheI, HautI, Largeur, Hauteur
        'Fichier suivant
        Fichier = Dir()
        Ligne = Ligne + 1
    Loop
End Sub

Bonjour,

Avec des OLEObject type "Image" et définir sa propriété "PictureSizeMode" :

Sub ChargeTrombinoscope()

    Dim Obj As OLEObject
    Dim Img As MSForms.Image
    Dim Fe As Worksheet
    Dim largeur As Single
    Dim Hauteur As Single
    Dim HautI As Single
    Dim GaucheI As Single

    Dim Chemin As String, Fichier As String
    Dim Nom, Prénom As String
    Dim splitArr() As String
    Dim Ligne As Integer

    Set Fe = Worksheets("Pix")

    Fe.Activate

    'Définit le répertoire contenant les fichiers
    Chemin = "C:\test-20160928\MyPH\"

    'Boucle sur tous les fichiers du répertoire (photos).
    Ligne = 3
    Fichier = Dir(Chemin & "*")

    Do While Len(Fichier) > 0

        Extraction Prénom

        splitArr = Split(Fichier, ".")

        Prénom = splitArr(0)

        Range("H" & Ligne).Value = Prénom

        'insertion de la photo dans la colonne C
        largeur = ActiveSheet.Cells(Ligne, 11).Width
        Hauteur = ActiveSheet.Cells(Ligne, 11).Height
        GaucheI = ActiveSheet.Cells(Ligne, 11).Left
        HautI = ActiveSheet.Cells(Ligne, 11).Top

        'insère un objet "Image"
        Set Obj = Fe.OLEObjects.Add(ClassType:="Forms.Image.1", _
                                    Link:=False, _
                                    DisplayAsIcon:=False, _
                                    Left:=GaucheI, _
                                    Top:=HautI, _
                                    Width:=largeur, _
                                    Height:=Hauteur)

        'récupère l'objet dans la variable afin d'utiliser les propriétés qui lui sont propres
        Set Img = Obj.Object

        Img.Picture = LoadPicture(Chemin & Fichier)
        Img.PictureSizeMode = fmPictureSizeModeStretch

        'Fichier suivant
        Fichier = Dir()
        Ligne = Ligne + 1

    Loop

End Sub

C'est pas tres rapide et ça gèle, surtout avec 1400 photos! Ton code fonctionne, mais il n'est pas tres adapté pour mes besoins

J'utilise ce code ici-bas

Sub ChargeTrombinoscope()
Dim Chemin As String, Fichier As String
Dim Nom, Prénom As String
Dim splitArr() As String
Dim Ligne As Integer

Worksheets("Pix").Activate

  'Définit le répertoire contenant les fichiers
Chemin = "C:\test-20160928\MyPH\"

  'Boucle sur tous les fichiers du répertoire (photos).
Ligne = 3
Columns("K:K").ColumnWidth = 172  ' défini la largeur de la colonne

Fichier = Dir(Chemin & "*")
Do While Len(Fichier) > 0
  'Extraction prénom
  splitArr = Split(Fichier, ".")
  Prénom = splitArr(0)
  Range("H" & Ligne).Value = Prénom
  'insertion de la photo dans la colonne K
  Range("K" & Ligne).Select

  ActiveSheet.Pictures.Insert(Chemin & Fichier).Select
  ActiveCell.RowHeight = 100  ' ajuste la hauteur de la ligne : 1 point = 0,035 cm
  With Selection.ShapeRange
  .Left = ActiveCell.Left
  .Top = ActiveCell.Top
  .Height = 100  ' ajuster la hauteur : 1 point = 0,035 cm
'  .Width = 150  ' ou la largeur
  .LockAspectRatio = msoTrue  ' conserve le proportion de l'image
  End With
  Range("H3").Select

  'Fichier suivant
  Fichier = Dir()
  Ligne = Ligne + 1
Loop
End Sub

Par contre, dans un autre onglet je selectionne le nom de l'image et elle apparait dans la zone recep. Lorsque je supprime le numéro de l'image la photo disparait. Maintenant avec ce code, la photo reste dans la zone recep et ce même si je supprime le numéro de l'image. Est-ce qu'il y a moyen de faire en sorte que lorsque je supprimer le numéro de produits l'image disparait de la zone recep, comme avant?

PTI le code de cette onglet est ci-dessous

Private Sub Worksheet_Change(ByVal Target As Range)
Dim ZoneRecep As Range
Dim Cel As Range
Dim Sh As Shape
Dim PosX As Double, PosY As Double

  If Target.Count > 1 Then Exit Sub
  If Target.Row Mod 7 <> 0 Then Exit Sub                  ' Lignes 7, 14, 21, 28 ....
  If InStr(1, "159", Trim(Str(ActiveCell.Column))) Then   ' Colonnes A E I
    Set ZoneRecep = Cells(Target.Row - 3, Target.Column)
    With Application
      .ScreenUpdating = False
      '.EnableEvents = False
    End With

    ' Recherche dans les images si une est présente dans la zone recep
    For Each Sh In ActiveSheet.Shapes
      If Sh.Type = msoPicture Then
        If Sh.TopLeftCell.Row = ZoneRecep.Row Then   ' Même ligne : 1er filtre
          If Sh.TopLeftCell.Column >= ZoneRecep.Column And Sh.TopLeftCell.Column < ZoneRecep.Offset(0, 1).Column Then
            Sh.Delete
            Exit For
          End If
        End If
      End If
    Next Sh

    If Target = "" Then Exit Sub    ' Aucun numéro on quitte

    ' C'est la macro qui fera la recherche
    Set Cel = Sheets("Pix").Columns("B").Find(what:=Target, LookIn:=xlValues, lookat:=xlWhole)
    If Not Cel Is Nothing Then
      Set Sh = Sheets("Pix").Shapes(Cel.Offset(0, 1))
      PosX = ZoneRecep.Left + ((ZoneRecep.Offset(0, 1).Left - ZoneRecep.Left) / 2) - Sh.Width / 2
      PosY = ZoneRecep.Top + ((ZoneRecep.Offset(1, 0).Top - ZoneRecep.Top) / 2) - Sh.Height / 2
      Sheets("Pix").Shapes(Cel.Offset(0, 1)).Copy
      ActiveSheet.Paste ZoneRecep
      With Selection                                      ' Pour 2007 et plus
      'With ActiveSheet.Shapes(ActiveSheet.Shapes.Count)  ' Pour 2003
        .Top = PosY
        .Left = PosX
      End With
      Target.Select
    Else
      MsgBox "No corresponding picture"
    End If
  End If
End Sub

En gros:

J'utilise un onglet Pix et un catalog. Dans l'onglet catalogue j'ai des cases avec des zone de recep et une cellule ou j'entre le numéro de photo (ou selectionne) et elle affiche dans la zone recep. Dans l'onglet Pix il y a tous les photos dans la colonne K, une par ligne et a gauche il y a le nom de la photo (qui est utilisé pour la recherche et l'affichage dans l'onglet catalog).

Est-ce qu'il y a moyen de faire en sorte que lorsque je supprimer le numéro de produits l'image disparait de la zone recep?

Merci de votre aide, c'est très apprécié!

J'ai joint le fichier

39test-20160928.zip (279.62 Ko)
Rechercher des sujets similaires à "vba macro afficher photos hauteur largeur fixe"