XL 2019 Coller une image dans une UserForm

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Solution
Désolé. J'ai sans doute mal utilisé cjoint... Mais sur tu fais un click droit sur le le nom du ficher (juste après "Document joint :", tu choisis l'option "Enregistrer la cible du lien" et il sera télécharger.
oui j'ai vu après
mais comme j'ai bloqué certaines partie de ce menu j'ai du le remettre pour le faire
et après test ce fichier comme je te l'ai dis l'image a bien été extraite
avec mon code de base et tout mes autres méthodes fonctionnent aussi
ce code date d'il y a 7 ans il ne m'a jamais fait défaut
VB:
Sub extract_image_In_File()
    Dim OBJstream, BB() As Byte, b As Long, bytTemp(0 To 1) As Byte, tablo, by As Byte
    Dim filetoopen As Variant
     filetoopen = Application.GetOpenFilename("jpeg Files...
Bonjour Marc, Patrick,

J'ai eu la même approche avec ChatGPT, Bard et Aria. Les trois donnent du code ... que je ne suis pas arrivé à faire marcher. 😓
Par contre j'ai trouvé MP3Tag ( Lien ) . Petit utilitaire qui donne les tags et la pochette des MP3, et on peut charger la pochette.
... avec deux bémols bien sur 🙂 :
1- Je ne suis pas arrivé à automatiser le chargement des pochettes, seulement une par une.
2- Les fichiers générés sont en png.
Mais on peut facilement les convertir en jpg.
Au cas où ça vous intéresse ...
Bonjour Sylvanu.
Je connais bien (et même très bien) Mp3Tag. C'est un logiciel surpuissant pour les tags et c'est avec lui que je mets à jours tous mes tags, y compris les pochettes) et j'exporte mes fichiers musicaux au format .csv pour les récupérer en Excel.
Pour les pochettes, il faut sélectionner l'ensemble des morceaux d'un même cd, coller ou charger le fichier image (click droit sur la zone image) et choisir l'option voulue.
Pour avoir le format jpg, click droit sur l'image, option "ajuster". Cela permet d'avoir réduire le volume si l'image est trop grand (et prend ainsi beaucoup de place au sein du mp3) et de choisir le format (de mémoire, c'est png, jpg ou bmp.
C'est un programme que j'utilise (presque) tous les jours.
Si tu as un besoin spécifique, n'hésite pas à me contacter.
Voici quelques liens pour des infos utiles :
 
Désolé. J'ai sans doute mal utilisé cjoint... Mais sur tu fais un click droit sur le le nom du ficher (juste après "Document joint :", tu choisis l'option "Enregistrer la cible du lien" et il sera télécharger.
oui j'ai vu après
mais comme j'ai bloqué certaines partie de ce menu j'ai du le remettre pour le faire
et après test ce fichier comme je te l'ai dis l'image a bien été extraite
avec mon code de base et tout mes autres méthodes fonctionnent aussi
ce code date d'il y a 7 ans il ne m'a jamais fait défaut
VB:
Sub extract_image_In_File()
    Dim OBJstream, BB() As Byte, b As Long, bytTemp(0 To 1) As Byte, tablo, by As Byte
    Dim filetoopen As Variant
     filetoopen = Application.GetOpenFilename("jpeg Files (*.jpg;*.mp3), *.jpg;*.mp3", 1, "ouvrir une image")
    If filetoopen = False Then Exit Sub
  
    Set OBJstream = CreateObject("ADODB.Stream")    'object utilisé ADODB stream
    OBJstream.Open: OBJstream.Type = 1    ' open with no arguments makes the stream an empty container
    OBJstream.LoadFromFile (filetoopen)    'on load le fichier dans l'object
    BB = OBJstream.Read()    ' on prend directement tout le paquet
    '**************************************
    ReDim tablo(UBound(BB))
    For i = 0 To UBound(BB): tablo(i) = BB(i): Next
    code = "255,216" & Split(Split(Join(tablo, ","), "255,216")(1), "255,217")(0) & "255,217"
   Debug.Print code
   tablo = Split(code, ",")
    jpegFile = FreeFile
    Open Environ("userprofile") & "\Desktop\imagetemp.jpg" For Binary Access Write Lock Write As jpegFile
    For i = 0 To UBound(tablo)
        If IsNumeric(tablo(i)) Then by = tablo(i): Put jpegFile, , by
    Next i
    Close jpegFile
End Sub
 
oui j'ai vu après
mais comme j'ai bloqué certaines partie de ce menu j'ai du le remettre pour le faire
et après test ce fichier comme je te l'ai dis l'image a bien été extraite
avec mon code de base et tout mes autres méthodes fonctionnent aussi
ce code date d'il y a 7 ans il ne m'a jamais fait défaut
VB:
Sub extract_image_In_File()
    Dim OBJstream, BB() As Byte, b As Long, bytTemp(0 To 1) As Byte, tablo, by As Byte
    Dim filetoopen As Variant
     filetoopen = Application.GetOpenFilename("jpeg Files (*.jpg;*.mp3), *.jpg;*.mp3", 1, "ouvrir une image")
    If filetoopen = False Then Exit Sub
 
    Set OBJstream = CreateObject("ADODB.Stream")    'object utilisé ADODB stream
    OBJstream.Open: OBJstream.Type = 1    ' open with no arguments makes the stream an empty container
    OBJstream.LoadFromFile (filetoopen)    'on load le fichier dans l'object
    BB = OBJstream.Read()    ' on prend directement tout le paquet
    '**************************************
    ReDim tablo(UBound(BB))
    For i = 0 To UBound(BB): tablo(i) = BB(i): Next
    code = "255,216" & Split(Split(Join(tablo, ","), "255,216")(1), "255,217")(0) & "255,217"
   Debug.Print code
   tablo = Split(code, ",")
    jpegFile = FreeFile
    Open Environ("userprofile") & "\Desktop\imagetemp.jpg" For Binary Access Write Lock Write As jpegFile
    For i = 0 To UBound(tablo)
        If IsNumeric(tablo(i)) Then by = tablo(i): Put jpegFile, , by
    Next i
    Close jpegFile
End Sub
Je crois savoir pourquoi. Un Mp3 permet d'avoir plusieurs images (Front Cover, Back cover, other...)
Dans le fichier "Optimisme" il y avait 3 images. Je les ai supprimées et remplacée par une seule image. J'ai essayé avec ton code et... ça marche !
 
du genre comme ça par exemple
VB:
Sub extractImageTest()
    Dim by As Byte, jpegFile&, TbL
    Dim filetoopen As Variant
    filetoopen = Application.GetOpenFilename("jpeg Files (*.jpg;*.mp3), *.jpg;*.mp3", 1, "ouvrir une image")
    If filetoopen = False Then Exit Sub
    TbL = GetBinaryArrayJpg_OnFile(filetoopen)
    If Not IsArray(TbL) Then MsgBox "Un problème dans l'extraction c'est produit": Exit Sub
    jpegFile = FreeFile
    Open Environ("userprofile") & "\Desktop\imagetemp.jpg" For Binary Access Write Lock Write As jpegFile
    For i = 0 To UBound(TbL)
        If IsNumeric(TbL(i)) Then by = TbL(i): Put jpegFile, , by
    Next i
    Close jpegFile

End Sub

'cette fonction récupère juste l'array de bits concernant le jpg
Function GetBinaryArrayJpg_OnFile(Fichier)
    Dim OBJstream, BB() As Byte, b As Long, tablo
    Set OBJstream = CreateObject("ADODB.Stream")
    OBJstream.Open: OBJstream.Type = 1
    OBJstream.LoadFromFile (Fichier)
    BB = OBJstream.Read()
    ReDim tablo(UBound(BB))
    For i = 0 To UBound(BB): tablo(i) = BB(i): Next
    code = "255,216" & Split(Split(Join(tablo, ","), "255,216")(1), "255,217")(0) & ",255,217"
    GetBinaryArrayJpg_OnFile = Split(code, ",")
End Function
 
du genre comme ça par exemple
VB:
Sub extractImageTest()
    Dim by As Byte, jpegFile&, TbL
    Dim filetoopen As Variant
    filetoopen = Application.GetOpenFilename("jpeg Files (*.jpg;*.mp3), *.jpg;*.mp3", 1, "ouvrir une image")
    If filetoopen = False Then Exit Sub
    TbL = GetBinaryArrayJpg_OnFile(filetoopen)
    If Not IsArray(TbL) Then MsgBox "Un problème dans l'extraction c'est produit": Exit Sub
    jpegFile = FreeFile
    Open Environ("userprofile") & "\Desktop\imagetemp.jpg" For Binary Access Write Lock Write As jpegFile
    For i = 0 To UBound(TbL)
        If IsNumeric(TbL(i)) Then by = TbL(i): Put jpegFile, , by
    Next i
    Close jpegFile

End Sub

'cette fonction récupère juste l'array de bits concernant le jpg
Function GetBinaryArrayJpg_OnFile(Fichier)
    Dim OBJstream, BB() As Byte, b As Long, tablo
    Set OBJstream = CreateObject("ADODB.Stream")
    OBJstream.Open: OBJstream.Type = 1
    OBJstream.LoadFromFile (Fichier)
    BB = OBJstream.Read()
    ReDim tablo(UBound(BB))
    For i = 0 To UBound(BB): tablo(i) = BB(i): Next
    code = "255,216" & Split(Split(Join(tablo, ","), "255,216")(1), "255,217")(0) & ",255,217"
    GetBinaryArrayJpg_OnFile = Split(code, ",")
End Function
Grâce à ton code, j'ai enfin ce que je voulais. Je travaille maintenant à intégrer tout ça à mon programme de gestion de MP3. Je pense que, demain dans la journée, ce sera fait.
Je l'ai déjà intégrer dans feuille test et ça marche parfaitement.
Je la joint en annexe. Il suffit maintenant de mettre le chemin complet dans la cellule K1 et cliquer sur le bouton. L'image s'affiche dans une userform.
Encore merci car, sans toi, je n'y serais jamais arrivé.
Bonne soirée.
Marc
 

Pièces jointes

je viens de passer je ne sais combien de temps sur chatgpt
je lui ai demander de faire mieux que moi plus ortodoxe bref
il m'en a sorti des trucs
rien qui fonctionne

and the winner is patricktoulon!!! 🤣 🤣
C'est exactement la même scénario que j'ai eu avec ChatGpt, des morceaux de code qui génèrent des erreur à n'en plus finir, des tentatives de corrections aussi lourdes les une que les autres mais qui jamais ne fonctionnent, etc.. Bon. Si on lui demande : X+X = 4 Que vaut X ? Il répondra correctement. (Voir image !)
Fortiche, hein ?🙄🙄🙄
Là-dessus, je vais me coucher.
Bonne nuit!
 

Pièces jointes

  • 2x.png
    2x.png
    13.5 KB · Affichages: 6
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
14
Affichages
426
Réponses
5
Affichages
695
Réponses
2
Affichages
257
Retour