Microsoft 365 Insérer une image DANS une cellule

Thomi

XLDnaute Nouveau
Bonjour à tous. J'ai un souci pour lequel je ne trouve aucune info sur internet.

Je veux pouvoir utiliser la fonctionnalité d'Excel 'insérer une image dans la cellule' afin d'intégrer pour une serie de code la photo correspondante. Je passe donc par VBA pour le faire à 'grande échelle'.

En utilisant l'enregistreur de macro pour voir la formule vba de cette fonctionnalité j'obtiens ceci (j'ai remplace le chemin de la photo) :

VB:
Selection.InsertPictureInCell (cheminPhoto)

Or quand je l'applique betement dans un tableau simple via ce code ci (la vraie destination de dossierPhotos a été changé par souci de confidentialité) :
VB:
Sub InsererPhotos()
    Dim ws As Worksheet
    Dim dossierPhotos As String
    Dim codeMF As String
    Dim cheminPhoto As String
    Dim derniereLigne As Long
    Dim cell As Range
  
    Dim fso As Object
    
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    
    ' Définir le nom de la feuille et le dossier contenant les photos
    Set ws = ThisWorkbook.Sheets("Trame")
    dossierPhotos = "chemindelaphoto" ' Modifiez ce chemin vers le dossier de vos photos
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    ws.Activate
     ws.Columns("BF").Clear
    ' Trouver la dernière ligne avec des données dans la colonne Code MF
    derniereLigne = ws.Cells(ws.Rows.Count, "G").End(xlUp).Row ' La colonne G contient mon code article
    
    ' Boucle à travers toutes les cellules dans la colonne Code MF
    For Each cell In ws.Range("G2:G" & derniereLigne)
        codeMF = cell.Value
        cheminPhoto = dossierPhotos & codeMF & ".jpg"
        
        ws.Cells(cell.Row, "BF").Select
        
        ' Insérer la photo dans la colonne BF
        
        If fso.FileExists(cheminPhoto) Then
        On Error Resume Next
        On Error GoTo 0
        Selection.InsertPictureInCell (cheminPhoto)
        
        Else
      
        End If
        Next cell
        Application.ScreenUpdating = True
        Application.DisplayAlerts = True
End Sub

J'ai le message suivant qui apparait :

Erreur d'exécution'-2147467259 (80004005)': La méthode 'InsertPictureInCell' de l'objet 'Range' a échoué

Je n'arrive pas a comprendre d'ou provient le problème en sachant que j'ai bien des codes en colonne G et que j'ai bien les photos qui vont avec dans mon dossier .

Je vous remercie de votre réponse
 
Solution
Bonjour à tous, en effet je n'ai cherché que sur les forums français (idiot de ma part). Sur les forums anglophones d'autres personnes ont le meme problème et personne ne semble avoir trouvé une solution fiable. Il semblerait que ce soit un probleme Microsoft directement. Merci pour vos autres propositions de macro mais elles n'agissent pas exactement comme je le souhaiterais. Je vous remercie

Thomi

XLDnaute Nouveau
bonjour
es tu certain que les photos existent bien?
pour vérifier, supprimes les lignes "on error resume next" et "on error goto 0"
et execute en pas à pas
merci de ta réponse,

Oui les photos existent bel et bien, je ne sais pour quelle raison la macro a réussie a se lancer une fois, j'ai donc bien eu mes visuels mais a chaque fois que je relance plop le meme message d'erreur. J'ai réouvert le fichier sorti et remis les photos, rien a faire. Comme si la fonction InsertPictureInCell n'etait pas comprise par l'editeur VBA
 

vgendron

XLDnaute Barbatruc
euh.. pas clair..
tu dis que la macro a fonctionné une fois ==> Donc la fonction InsertPictureInCell est reconnue par l'éditeur..
si tu relances que ca ne fonctionne plus, peut etre qu'il y a un problème d'initialisation..
la fonction InsertPictureInCell a peut etre besoin d'une cellule vide avant d'y mettre une image..?
 

Thomi

XLDnaute Nouveau
euh.. pas clair..
tu dis que la macro a fonctionné une fois ==> Donc la fonction InsertPictureInCell est reconnue par l'éditeur..
si tu relances que ca ne fonctionne plus, peut etre qu'il y a un problème d'initialisation..
la fonction InsertPictureInCell a peut etre besoin d'une cellule vide avant d'y mettre une image..?
J'ai supprimé mon code puis je l'ai recollé apres avoir ferme et reouvert le fichier. Bingo la macro s'est effectuée, j'ai donc relancé la macro voir si tout etait ok mais non le message est revenu. J'ai fermé et réouvert et toujours pareil message d'erreur. J'ai essayé avec les cellules vides, les cellules avec le chemin, rien a faire
 

Dudu2

XLDnaute Barbatruc
Bonjour,
Sans avoir lu l'historique et peut-être trop tard, il y a une ressource qui pourrait être utile...
 

patricktoulon

XLDnaute Barbatruc
Bonjour il suffit de taper " Selection.InsertPictureInCell " sur google
et ce mon(goolien) te sort une palanqué d'appel à l'aide
à l'ancienne et sans select en plus


demo1.gif

comme tu nous "a pa"s donné de fic<hier j'ai fait au mieux pour recréer le contexte
VB:
Sub test()
    dossierPhotos = "H:\"
    Set ws = ActiveSheet
    ws.Activate
    ws.Columns("BF").Clear
    'prevoir ici de supprimer les eventuelles shapes existantes dans la colonne BF
   
    ' Trouver la dernière ligne avec des données dans la colonne Code MF
    derniereLigne = ws.Cells(ws.Rows.Count, "G").End(xlUp).Row ' La colonne G contient mon code article

    'on teste d'abords le dossier
    If Right(dossierPhotos, 1) = Application.PathSeparator Then
        dossierPhotos = Mid(dossierPhotos, 1, Len(dossierPhotos) - 1)
    End If
    If Dir(dossierPhotos, vbDirectory) = "" Then MsgBox "le dossier n'a pas été trouvé": Exit Sub



    For Each cell In ws.Range("G2:G" & derniereLigne)

        codeMF = cell.Value
        cheminphoto = dossierPhotos & Application.PathSeparator & codeMF & ".jpg"
       
        If Dir(cheminphoto) <> "" Then
            ' Insérer la photo dans la colonne BF
            Set shap = ws.Shapes.AddPicture(cheminphoto, True, 0, 0, 0, True, True)
            With shap
                .Top = Cells(cell.Row, "BF").Top
                .Left = Cells(cell.Row, "Bf").Left
            .Height = Cells(cell.Row, "Bf").Height
            End With
        Else
            msg = msg & "ligne " & cell.Row & "  " & cell.Value & vbCrLf
        End If
    Next cell
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
   If msg <> "" Then MsgBox "les images ci dessous n'ont pas pu êtres intégrées" & vbCrLf & msg
 
End Sub
et si l'on doit inséré centré et au prorata en gardant l'aspect ratio
 
Dernière édition:

Thomi

XLDnaute Nouveau
Bonjour à tous, en effet je n'ai cherché que sur les forums français (idiot de ma part). Sur les forums anglophones d'autres personnes ont le meme problème et personne ne semble avoir trouvé une solution fiable. Il semblerait que ce soit un probleme Microsoft directement. Merci pour vos autres propositions de macro mais elles n'agissent pas exactement comme je le souhaiterais. Je vous remercie
 

Discussions similaires

Statistiques des forums

Discussions
313 769
Messages
2 102 234
Membres
108 181
dernier inscrit
Chr1sD