Macro pour insertion automatisée d'une image à partir url
Bonjour,
je suis néophyte en macro et je me tourne vers vous afin d'avoir une solution à mon problème.
J'ai une feuille excel qui comporte dans une colonne des références d'url https pointant vers une image sur divers site.
Je désire avoir une macro qui rapatrie et affiche ces images dans la colonne d’à coté dans un format jpeg style 200*200.
est ce faisable ?
Merci de votre attention
Cordialement
re bonjour
j'ai trouvé un post qui en parle
https://forum.excel-pratique.com/viewtopic.php?f=2&t=92679
mais la macro ne fonctionne pas car mon lien est une url qui pointe sur une donnée public et non un fichier déclaré à l'avance type jgp bmp etc
mon url est du genre
https://site/image/publicj'ai donc une colonne remplie de ces url et je cherche comment faire une macro qui à partir de ce lien récupère l'image sur la page web la redimensionne et l'insère dans la colonne à coté sur la feuille excel.
Déjà pensez vous que c'est faisable ? Si oui pouvez vous m'aider car à partir de l'autre macro ....
Cordialement
Bonjour,
Une simple question (j'espère que cela ne sera pas mal interprété) :
En faisant ça si tu ne cite pas de sources ou si tu montre le fichier a quelqu'un d'autre que toi même tu fait obstacle a la propriété de l'image nah? ^^
Sinon avec un fichier joint ça serait mieux pour travailler s'il te plait? Je regarde ça ce soir
Bonjour et merci de ta réponse
Il s'agit d'un cadre professionnel et je ne ferai pas obstacle à la propriété de l'image. Il s'agit de lien ouvert au public. n'aie aucune crainte, je n'interprète pas mal ta question et la trouve même légitime au regard de ma demande.
Cordialement
Bonjour à tous,
Voici un exemple simple :
* L'adresse de l'image (ici l'avatar de mon blog) est en colonne B
* un clic sur le bouton importe le jpg dans un sous-répertoire (créé si besoin), et affiche le jpg en colonne C
Il suffit d'ajouter des url valides (et des n° en colonne A) pour importer d'autres jpg
Dans cet exemple les images s'affichent aux dimensions des cellules de la colonne C
Nb : je me suis inspiré de la méthode d'arkham46 pour l'import Jpg en binaire
Pierre
Ho ho grand merci pour ta macro elle fonctionne bien !
J'ai modifié le nom de l'image avec l'itération i car j'avais des url dont la chaine fournit empêchait le système la création du fichier.
Pour cette macro attention si on l'intègre dans plusieurs feuilles du même répertoire, l'image existant il ne recharge pas l'image donc affiche celle déjà présente. A voir si on peut mettre le nom du fichier excel en cours avec la colonne et la ligne de l url ?
Enfin , il faut au préalable avoir mis les lignes à la bonne hauteur et longueur car il colle l'image à la dimension de la cellule apparemment. A ton avis, serais t il possible d'intégrer une évolution du style si le buffer n'est pas vide intégré une image de taille 100*100 qui redimensionne la cellule automatiquement ?
En tout cas déjà un gros merci pour ce travail !
bien cordialement
Ok Fragorn
Si j'ai bien compris la demande :
* Pour re-télécharger systématiquement l'image, il suffit d'écrire Ok = DownloadJPG(Url, NDF)
* Pour redimensionner la hauteur de la ligne en fonction de l'image, il suffit de modifier comme suit :
Sub Import_Img()
Dim rep As String, Url As String, NDF As String
Dim Ok As Integer, lig As Long, i As Long
Dim Img As Object
rep = ThisWorkbook.Path & "\Img\"
If Not Exist_Rep(rep) Then MkDir rep
With ActiveSheet
lig = .Range("A" & Rows.Count).End(xlUp).Row
For i = 2 To lig
Url = ActiveSheet.Range("B" & i).Value
NDF = rep & Right(Url, InStr(1, StrReverse(Url), "/") - 1)
'If Not Exist_Fichier(NDF) Then Ok = DownloadJPG(Url, NDF)
Ok = DownloadJPG(Url, NDF)
If Ok = 0 Then
Set Img = CreateObject("WIA.ImageFile")
Img.LoadFile (NDF)
.Rows(i).RowHeight = Img.Height
With .Range("C" & i)
ActiveSheet.Shapes.AddPicture NDF, True, True, .Left, .Top, Img.Width, Img.Height
End With
End If
Next i
End With
Set Img = Nothing
End SubBon week-end
Pierre
Superbe !
ca marche merci bien.
J'ai du mal à comprendre la synthaxe du NDF. si j'ai bien compris sur la ligne :
NDF = rep & Right(Url, InStr(1, StrReverse(Url), "/") - 1)
tu déclares le nom du fichier crée pour importer l'image en lien c'est ca ? et tu lui précises que le nom de fichier sera la chaine de caractère des nombre de caractère derrière le dernier / -1 ?
Si je voulais donner le nom au fichier image de type : Nom_du_fichier_excel_en_cours_ColonneLigne_Horodatage je devrais écrire comme la ligne NDF ?
Encore merci pour ta dispo et ton travail !
Bon week end également
La ligne NDF = rep & Right(Url, InStr(1, StrReverse(Url), "/") - 1) récupère le nom du jpg de l'url pour nommer l'image importée.
On peut tout à fait nommer l'image comme on veut => NDF=rep & "commeonveut.jpg" par exemple à la place
Pierre
j'ai un léger souci avec la seconde macro, elle plante lors de l'insertion d'un fichier image non lisible alors que la premiere macro me mettait tout simplement dans la case "fichier image non lisible".
le message d'erreur est "erreur d'execution '-2147024809 (80070057)': paramètre incorrect"
Il s'agit d'un lien mort parmi les lignes mais la première macro ne s'arrêtait pas dessus.
Merci pour le nom de fichier de NDF et si je voulais mettre un nom avec une partie fixe et de la boucle i ca donnerai :
NDFNDF=rep & "commeonveut_colonne_B_ligne" & i ?
encore merci de ton aide
Edit
j'ai testé quelques trucs et A priori ( car je suis néophyte) c'est la ligne Img.LoadFile (NDF) qui fait tout planter quand elle ouvre le fichier image non lisible alors que la premiere macro passait l'erreur. remédiable ?
Merci de votre attention