Importer les photos d’un dossier vers un tableau Excel

sitede_Admin

Publié le :

importer-des-photos-dans-excel

une question posée par mail : comment importer des photos dans Excel !

Dans un fichier Excel, la colonne E nommée “Nom des Photos”, contient 50 textes alphanumériques avec l’extension .jpg (ex : PUkQ5O7Ew.jpg) correspondant au nom de 50 photos qui se trouve dans un autre dossier. Dans cet autre dossier nommé “Photos”, il y a les 50 photos correspondantes, nommées de la même façon que dans la colonne E “Nom des Photos”.

Comment faire pour que chaque photo du dossier “Photos” soit importée automatiquement dans la colonne F “Photos” en face du nom qui lui correspond (colonne E) ?

importer-des-photos

Pour associer chaque photo de votre dossier avec son nom correspondant dans la colonne “Photos” de la feuille de calcul Excel, vous pouvez suivre ces étapes :

  1. Insérer des images via une macro VBA :
    • Ouvrez votre classeur Excel et appuyez sur Alt + F11 pour ouvrir l’éditeur VBA.
    • Allez dans Insertion > Module pour créer un nouveau module.
    • Copiez et collez le code suivant dans le module :
Sub InsertPhotos()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim photoPath As String
    Dim photoName As String
    Dim photoFullName As String
    Dim currentRow As Long
    
    ' Modifier avec le chemin du dossier contenant vos photos
    photoPath = "C:\Chemin\Dossier\Photos\"
    
    Set ws = ThisWorkbook.Sheets("NomDeLaFeuille") ' Remplacer par le nom réel de votre feuille
    lastRow = ws.Cells(ws.Rows.Count, "J").End(xlUp).Row
    
    For currentRow = 2 To lastRow ' Commence à la ligne 2 pour ignorer l'en-tête de colonne
        photoName = ws.Cells(currentRow, "E").Value ' Nom de la photo dans la colonne J
        photoFullName = photoPath & photoName
        
        If Dir(photoFullName) <> "" Then ' Vérifie que la photo existe
            With ws.Pictures.Insert(photoFullName)
                .ShapeRange.LockAspectRatio = msoFalse
                .Width = ws.Columns("K").Width ' Ajustez si nécessaire
                .Height = ws.Rows(currentRow).Height ' Ajustez si nécessaire
                .Top = ws.Rows(currentRow).Top
                .Left = ws.Cells(currentRow, "F").Left
                .Placement = xlMoveAndSize
            End With
        End If
    Next currentRow
End Sub
  • Modifiez C:\Chemin\Dossier\Photos\ avec le chemin d’accès de votre dossier contenant les photos.
  • Changez "NomDeLaFeuille" par le nom réel de la feuille dans laquelle vous voulez insérer les images.
  • Ajustez les propriétés .Width et .Height si vous voulez redimensionner les images pour qu’elles s’adaptent aux cellules.
  • Exécutez la macro en appuyant sur F5 ou via Exécuter > Exécuter Sub/UserForm.
  1. Sécurité des macros :
    • Assurez-vous que les paramètres de sécurité des macros sont réglés pour permettre l’exécution des macros. Cela se trouve dans Outils > Options > Centre de gestion de la confidentialité > Paramètres du Centre de gestion de la confidentialité > Paramètres des macros.
  2. Images liées à des cellules :
    • Les images insérées seront liées aux cellules de la colonne “K”, ce qui signifie qu’elles se déplaceront et changeront de taille avec les cellules.
  3. Sauvegarde et tests :
    • Avant de lancer la macro, il est conseillé de sauvegarder votre fichier. Testez d’abord la macro sur quelques images pour vous assurer que tout fonctionne comme prévu.

N’oubliez pas que l’exécution de macros, surtout celles téléchargées ou copiées d’Internet, peut présenter des risques de sécurité. Assurez-vous de comprendre ce que fait le code ou faites-le vérifier par quelqu’un qui le comprend avant de l’exécuter.

Le fichier doit-il rester ouvert ou fermé pour exécuter la macro VBA ?

Vous devez garder le fichier Excel ouvert pour exécuter la macro VBA. La macro agira directement sur le classeur ouvert pour insérer les photos dans la feuille de calcul spécifiée. Voici les étapes à suivre une fois que vous avez le fichier ouvert :

  1. Appuyez sur Alt + F11 pour ouvrir l’éditeur VBA.
  2. Insérez un nouveau module si vous n’avez pas déjà le code prêt.
  3. Copiez et collez ou écrivez votre macro dans le module.
  4. Fermez l’éditeur VBA et revenez à Excel.
  5. Assurez-vous que la sécurité des macros est configurée pour permettre l’exécution des macros.
  6. Exécutez la macro en appuyant sur Alt + F8, en sélectionnant la macro, puis en cliquant sur “Exécuter”.

Si vous suivez ces étapes avec le fichier Excel ouvert, la macro devrait fonctionner correctement. Assurez-vous d’avoir sauvegardé vos données avant d’exécuter la macro, au cas où vous auriez besoin de revenir à une version précédente de votre fichier.

Comment ajuster les propriétés .Width et .Height ?

Les propriétés .Width et .Height dans le code VBA déterminent la largeur et la hauteur de l’image insérée. Voici comment vous pouvez les ajuster :

  1. Pour ajuster à la taille de la cellule : Si vous souhaitez que l’image s’ajuste exactement à la taille de la cellule, vous pouvez définir la largeur et la hauteur de l’image pour qu’elles soient égales à la largeur et à la hauteur de la cellule, respectivement.
.Width = ws.Columns("K").Width ' Ajustez la largeur à celle de la colonne K
.Height = ws.Rows(currentRow).Height ' Ajustez la hauteur à celle de la ligne
  1. Pour ajuster proportionnellement : Si vous souhaitez maintenir le rapport largeur/hauteur original de l’image tout en s’assurant qu’elle s’insère dans la cellule :

With ws.Pictures.Insert(photoFullName)
    ' Maintenir le rapport hauteur/largeur
    .ShapeRange.LockAspectRatio = msoTrue
    
    ' Calculer le ratio de la cellule
    Dim cellWidth As Double, cellHeight As Double, ratio As Double
    cellWidth = ws.Columns("K").Width
    cellHeight = ws.Rows(currentRow).Height
    ratio = cellWidth / cellHeight
    
    ' Ajuster l'image
    If .Width > cellWidth Then .Width = cellWidth
    If .Height > cellHeight Then .Height = cellHeight
    
    ' Ajuster si l'image est trop grande pour la cellule après le premier ajustement
    If .Width / .Height > ratio Then
        .Width = cellHeight * ratio
    Else
        .Height = cellWidth / ratio
    End If
    
    ' Positionner l'image dans la cellule
    .Top = ws.Rows(currentRow).Top
    .Left = ws.Cells(currentRow, "K").Left
    .Placement = xlMoveAndSize
End With

Dans le code ci-dessus, l’image est d’abord ajustée pour s’assurer qu’elle n’est pas plus grande que la largeur ou la hauteur de la cellule Excel. Ensuite, un second ajustement est fait pour maintenir le ratio en vérifiant si l’image dépasse la cellule après le premier ajustement.

  1. Pour ajuster avec des valeurs spécifiques : Si vous avez des dimensions spécifiques en pixels, vous pouvez les attribuer directement :
.Width = 100 ' Mettez ici la largeur souhaitée en points
.Height = 50 ' Mettez ici la hauteur souhaitée en points

Gardez à l’esprit que les dimensions sont en points, pas en pixels, et que le nombre de points par pouce (ppi) dans Excel est normalement de 72. Cela signifie que si vous voulez une image de, par exemple, 100 pixels de large, et que votre affichage est à 96 ppi, vous devriez définir .Width à 100 * 72 / 96.