Insérer des images à partir de leurs noms Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
R
Renaud Dugas
Membre fidèle
Membre fidèle
Messages : 255
Inscrit le : 4 août 2011
Version d'Excel : 2007 FR

Message par Renaud Dugas » 25 janvier 2019, 14:47

Bonjour à tous,

J'apprécierais qu'on m'aide à concevoir une macro qui insère une image dans une cellule à partir de son nom (sans son extension).

J'ai un fichier (Exemple.xlsm) qui contient 6 espaces réservés à des images. En cliquant une seule fois sur un des rectangles, le répertoire contenant les images s'ouvre. Je peux alors sélectionner l'image désirée et celle-ci est collée à l'endroit désigné, dimensionnée selon les critères définis dans le code VBA (' Macro & instructions pour coller une photo et le nom de celle-ci (B11)....) et le nom du fichier est indiqué en haut à gauche de l'image. Les images sont de format JPG et leur préfixe commence par 001, 002, 003,....999, 1000.

Mon problème est le suivant : j'aimerais pouvoir également copier les images automatiquement en conservant les dimensions prédéfinis en tapant le nom de l'image. Par exemple : cadre B11 @ E17, je tape en "B10", le numéro : 032 suivi de "Entrée" et automatiquement la photo 032.jpg sera collée dans le cadre B11 @ E17 et ainsi de suite pour les 5 autres espaces réservés aux images. Afin d'éviter l'ouverture du répertoire contenant les images après l'appui sur la touche "Entrée", il faudra modifier le code VBA (' Macro & instructions pour coller une photo et le nom de celle-ci (B11)....) pour activer un rectangle avec un double-clic au lieu d'un simple clic (cas actuel).

En vous remerciant par avance pour votre précieuse aide.

Salutations,

Renaud D.
Exemple.xlsm
(261.37 Kio) Téléchargé 15 fois
G
GVIALLES
Membre dévoué
Membre dévoué
Messages : 660
Appréciations reçues : 51
Inscrit le : 28 novembre 2017
Version d'Excel : 2016
Téléchargements : Mes applications

Message par GVIALLES » 26 janvier 2019, 12:31

Bonjour Renaud,

Whaou!!! Ton code c'est Beyrouth! Un peu de ménage de serait pas inutile pour qu'on s'y retrouve...
Cordialement,

Gérard
R
Renaud Dugas
Membre fidèle
Membre fidèle
Messages : 255
Inscrit le : 4 août 2011
Version d'Excel : 2007 FR

Message par Renaud Dugas » 26 janvier 2019, 13:16

Bonjour GVIALLES,

Malheureusement, je ne suis pas un programmeur en code VBA.

J'ai fait un peu de ménage dans mon code et c'est le mieux que je peux faire (voir pièce jointe).

Je suis désolé.

Salutations,

Renaud D.
Exemple 2.xlsm
(248.12 Kio) Téléchargé 10 fois
G
GVIALLES
Membre dévoué
Membre dévoué
Messages : 660
Appréciations reçues : 51
Inscrit le : 28 novembre 2017
Version d'Excel : 2016
Téléchargements : Mes applications

Message par GVIALLES » 27 janvier 2019, 21:48

Bonsoir Renaud,

En P.J. une proposition.

J'ai dénommé chaque cadre d'image (shape) de la façon suivante : "Imgxxx" avec xxx= coordonnées de la cellule liée : par exemple pour la figure liée à la valeur de la cellule B10, le nom du cadre d'image est "ImgB10".

De plus, j'ai défini la plage nommée "Codes_Images" contenant toutes les cellules devant contenir le nom des images (B10, G10, B26...).

Le code VBA qui affiche les images est :
Option Explicit
Const cPath = "E:\EXCEL_PRATIQUE\RENAUD_DUGAS\Images" 'A modifier suivant le repertoire contenant les images
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim oCellsCodesImages As Name
    Dim oFS As Object
    Dim oShape As Shape
    
    Dim lTop As Double
    Dim lWidth As Double
    Dim lHeight As Double
    Dim lLeft As Double
   
    Dim sImageFileName As String, sCadreImageName As String
    
    Set oFS = CreateObject("Scripting.FileSystemObject")
    
    'On s'assure que la cellule modifiée est une cellule de la plage "Codes_Images"
    Set oCellsCodesImages = ThisWorkbook.Names("Codes_Images")
    If InStr(1, oCellsCodesImages.RefersTo, Target.Address) > 0 Then
        'Récupération du nom de l'image
        sImageFileName = cPath & "\" & Target.Value & ".jpg"
        'On s'assure que le fichier existe
        If oFS.Fileexists(sImageFileName) Then
            'On charge l'image dans la boite voulue
            sCadreImageName = "img" & Replace(Target.Address, "$", "")
            On Error Resume Next
            Set oShape = ActiveSheet.Shapes(sCadreImageName)
            If Not oShape Is Nothing Then
                'On sauvegarde les propriétés de la shape
                lLeft = oShape.Left
                lTop = oShape.Top
                lWidth = oShape.Width
                lHeight = oShape.Height
                'On supprime l'ancienne shape
                oShape.Delete
                'On créé une nouvelle shape au même emplacement et aux mêmes dimensions et portant le même nom
                Set oShape = ActiveSheet.Shapes.AddPicture(sImageFileName, msoFalse, msoTrue, lLeft, lTop, lWidth, lHeight)
                oShape.Name = sCadreImageName
            Else
                MsgBox "Cadre d'image " & sCadreImageName & " non trouvé!"
            End If
            On Error GoTo 0
        End If
    End If
    
End Sub
Exemple 2_GVS.xlsm
(338.64 Kio) Téléchargé 9 fois
Cordialement,

Gérard
R
Renaud Dugas
Membre fidèle
Membre fidèle
Messages : 255
Inscrit le : 4 août 2011
Version d'Excel : 2007 FR

Message par Renaud Dugas » 28 janvier 2019, 18:09

Bonjour GVIALLES,

Merci d'avoir répondu à ma demande d'aide.

J'ai regardé le fichier joint "Exemple2_GVS.xlsm" que vous m'avez transmis mais je ne peux pas ouvrir une image dans un répertoire image.

Il faut que je puisse utiliser les deux méthodes et celles-ci doivent coexister. Le répertoire image n'a de nom prédéfini (répertoire par défaut).

1ère méthode :
* Ouvrir une image en cliquant sur les cadres B11 ou B19 ou B27 ou G11 ou G19 ou E27 et y apposer le nom du fichier (sans son extension) en haut à gauche de l'image comme dans l'exemple du fichier joint "Exemple2.xlsm". La position et la dimension des images doivent être celles définies dans la macro de l'exemple "Exemple2.xlsm". Les dimensions en B11 ne sont pas le mêmes qu'en B19 ou B27 ou G11 ou G19 ou E27.

2ème méthode
La deuxième méthode effectue le processus inverse de la première méthode.
Par exemple, pour la cellule B10, je tape "001", suivi d'entrée. Le curseur se déplace à droite de "B10" en "C10" et non en "B11"et la photo "001" est insérée dans la cellule "B11" selon la position et la dimension définies dans la macro de l'exemple "Exemple2.xlsm. Idem pour "B18", B26, G10, G18 et E26.

J'espère de tout coeur que vous pourrez m'aider à réaliser cette macro.

Cordiales salutations,

Renaud D.
G
GVIALLES
Membre dévoué
Membre dévoué
Messages : 660
Appréciations reçues : 51
Inscrit le : 28 novembre 2017
Version d'Excel : 2016
Téléchargements : Mes applications

Message par GVIALLES » 30 janvier 2019, 13:21

Bonjour Renaud,

Tu écris :
Il faut que je puisse utiliser les deux méthodes et celles-ci doivent coexister. Le répertoire image n'a de nom prédéfini (répertoire par défaut)
Cela signifie-t-il que pour la méthode 2 (c'est cette méthode que j'utilise dans ma proposition), tu désires que le système demande le répertoire dans lequel trouver l'image?
Cordialement,

Gérard
R
Renaud Dugas
Membre fidèle
Membre fidèle
Messages : 255
Inscrit le : 4 août 2011
Version d'Excel : 2007 FR

Message par Renaud Dugas » 30 janvier 2019, 15:12

Bonjour GVIALLES,

Effectivement, lorsqu'on insère une image pour la première fois, nous devons définir un répertoire dans lequel Excel ira puiser ses images.

Avec la première méthode, je dois initialement définir le répertoire images par défaut en sélectionnant le répertoire et l'image désirée.

Avec la deuxième méthode, le répertoire images par défaut n'est pas nécessairement celui désiré. On devra donc le définir au début en le sectionnant à l'aide de l'explorateur. Il sera probablement pertinent de poser la question au début. Est-ce que le répertoire images par défaut est le bon? Dans l'affirmative, l'insertion des images se fera à partir du répertoire par défaut. Dans la négative, l'utilisateur devra choisir à l'aide de l'explorateur, le répertoire par défaut qu'il désire. La question ne lui sera plus posée par la suite.

Merci de l'intérêt que vous portez à mon problème.

Sincères salutations,

Renaud D.
G
GVIALLES
Membre dévoué
Membre dévoué
Messages : 660
Appréciations reçues : 51
Inscrit le : 28 novembre 2017
Version d'Excel : 2016
Téléchargements : Mes applications

Message par GVIALLES » 30 janvier 2019, 20:01

Bonsoir Renaud,

En P.J. une nouvelle proposition...en espérant avoir répondu à tes attentes...
Cordialement,

Gérard
R
Renaud Dugas
Membre fidèle
Membre fidèle
Messages : 255
Inscrit le : 4 août 2011
Version d'Excel : 2007 FR

Message par Renaud Dugas » 30 janvier 2019, 20:11

Bonsoir CVIALLES,

Malheureusement, je n'est pas reçu votre pièce jointe.

Salutations,

Renaud D.
G
GVIALLES
Membre dévoué
Membre dévoué
Messages : 660
Appréciations reçues : 51
Inscrit le : 28 novembre 2017
Version d'Excel : 2016
Téléchargements : Mes applications

Message par GVIALLES » 30 janvier 2019, 20:44

Oups pour la P.J...
Exemple 3_GVS.xlsm
(341.2 Kio) Téléchargé 19 fois
Cordialement,

Gérard
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message