Insertion automatique d'images sous excel
Résolujujulaglu33 -
Sous excel 2003, je cherche à inserer des photos dans des cellules de la maniere suivante :
je dispose en B1, d'une adresse url du type http:/monsite.fr/maphoto.jpg
je souhaiterai de maniere automatique que la photo s'affiche en A1
et ainsi de suite, d'autres liens en B2,B3, .... Bn , automatiquement s'affichent en A2,A3, ... An
comment faire ? une macro ? j'y connais pas grand chose, si quelqu'un pourrait m'aiguiller ...
- Inserer une photo sur excel
- Google photo - Télécharger - Albums photo
- Insérer une vidéo sur powerpoint - Guide
- Insérer liste déroulante excel - Guide
- Insérer une signature sur word - Guide
- Déplacer une colonne excel - Guide
42 réponses
Le problème consiste à afficher automatiquement des images à partir d’URLs listées dans B1, B2, … pour les faire apparaître en A1, A2, … sous Excel 2003.
La solution propose une macro qui lit les liens sélectionnés et insère l’image correspondante, avec trois options d’emplacement (à gauche, sur la même colonne ou à droite) et une hauteur personnalisable.
L’usage est: sélectionner la plage de liens, lancer la macro (AffImage2), répondre aux boîtes de dialogue pour le positionnement et la hauteur, puis l’image est insérée et dimensionnée; une version améliorée gère aussi un chemin par défaut en cas d’erreur.
Des précautions pratiques incluent la suppression des images existantes pour éviter l’accumulation et le fait que certaines références peuvent déclencher des messages d’erreur si l’image n’est pas accessible.
Bravo et merci pour l'engagement !
@+
Vincent
ça fait un petit bout de tps que je cherche un tel code n'y connaissant pas grd chose, merci bien Eriiic :-).
est-il possible d'y ajouter une vérif si l'image existe sinon d'afficher une image par défaut, genre noimg.jpg
j'ai renseigné toutes mes lignes, en fait j'ai le nom d'une réf ex: 101 et son image associée 101.jpg , bref du coup quand il n'y a pas l'image il y a erreur et s'arrête.
Merci pour les infos
merci pour cette réponse rapide
l'affichage de l'image par défaut se fait mais une fois faite j'ai un message d'erreur " fichier introuvable"
une idée
Cute987
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionen fait c'est bizarre, parfois tout se passe bien, cad il affiche les images dont j'ai indiqué le chemin
et d'autres il bloque dès qu'il affiche l'image par défaut
...
Ce petit programme est prévu pour afficher des images dont l'adresse correcte est dans des cellules d'une sélection d'une seule zone avec éventuellement des cellules vides.
Dans ces conditions il fonctionne je pense correctement.
Comprend bien qu'il est hors de question de traiter les cas particuliers, l'ajout d'une image par défaut a peut-être ajouté des dysfonctionnements bien que mes tests ne le montrent pas.
Je ne suis pas avec TA feuille sur TON micro pour tout contrôler.
Si tu veux, donne moi un cas précis où il bugue à condition que ce soit reproductible, donc en décrivant bien la configuration de ta feuille et les manip à faire pour le reproduire.
Pour les tests je veux le chemin des images sur
c:\tmp\(y compris l'image par défaut), ta feuille, et les images en cause (tu peux mettre plusieurs liens avec la même image pour alléger)
eric
je resens une certaine tension ... :) don't worry
Cela ne vient pas de ton code a priori sinon cela serait qqchose de récurrent en outre les résultats diffèrent c'est que ça provient d'autre chose et je supçonne le format de mes chps ... que j'ai extrait d'une base mdb blablabla... pour 2 chps au même format numérique, il ne reconnait certaines données pourtant identique !
mais bon ça c'est autre chose
je ne souhaite pas d'embêter plus longtemps et te remercie
parmis toutes mes recherches ton code est le plus abouti
Merci Eric
Une version plus récente avec une meilleure gestion des erreurs :
Sub AffImage()
' Sélectionner les cellules contenant un lien vers une image et appeler la macro
' AffImage les affichera sur le lien ou dans la colonne de gauche ou de droite
Const hDefaut = 75 ' hauteur des images
Const imgDefaut = "" ' saisir chemin complet et le nom de l'image par défaut à afficher si erreur
Dim msg As String, r As Long, h As Long, lmax As Long
Dim c As Range, numfich As Integer
Dim fich
msg = "Oui : Afficher les images à gauche des liens sélectionnés" & vbCrLf
msg = msg & "Non : Afficher les images sur les liens sélectionnés" & vbCrLf
msg = msg & "Annuler : Afficher les images à droite des liens sélectionnés"
r = MsgBox(msg, vbYesNoCancel, "Cellules où mettre les images")
If r = vbYes Then
r = -1
ElseIf r = vbNo Then
r = 0
Else
r = 1
End If
h = InputBox("Hauteur des lignes :", "Choix hauteur", hDefaut)
For Each c In Selection
'c.ColumnWidth = 20
fich = c.Value
' test fichier
If fich <> "" Then
numfich = FreeFile()
On Error GoTo errfich
Open fich For Input As #numfich
Close #numfich
End If
'
If fich <> "" Then
c.RowHeight = h 'fixer la hauteur de ligne
ActiveSheet.Pictures.Insert(fich).Select 'ouverture image
With Selection.ShapeRange
.LockAspectRatio = msoTrue 'conserver les proportions
.Height = h - 4 'hauteur de l'image = hauteur des lignes - 4
.Left = c.Offset(0, r).Left + 2 'à gauche colonne A (sinon tu calcules avec la largeur de colonne)
.Top = c.Top + 2 'et positionner verticalement
If .Width > lmax Then lmax = .Width
' limitation largeur colonne
If lmax > 500 Then lmax = 500
c.Offset(0, r).ColumnWidth = lmax + 4
End With
End If
Next c
Exit Sub
errfich:
fich = imgDefaut
Resume Next
End Sub
eric
au départ non, maintenant oui en ajoutant ce qui est en gras :
Sub AffImage()
' Sélectionner les cellules contenant un lien vers une image et appeler la macro
' AffImage les affichera sur le lien ou dans la colonne de gauche ou de droite
Const hDefaut = 75 ' hauteur des images
Const imgDefaut = "" ' saisir chemin complet et le nom de l'image par défaut à afficher si erreur
Dim msg As String, r As Long, h As Long, lmax As Long
Dim c As Range, numfich As Integer
Dim fich
msg = "Oui : Afficher les images à gauche des liens sélectionnés" & vbCrLf
msg = msg & "Non : Afficher les images sur les liens sélectionnés" & vbCrLf
msg = msg & "Annuler : Afficher les images à droite des liens sélectionnés"
r = MsgBox(msg, vbYesNoCancel, "Cellules où mettre les images")
If r = vbYes Then
r = -1
ElseIf r = vbNo Then
r = 0
Else
r = 1
End If
h = InputBox("Hauteur des lignes :", "Choix hauteur", hDefaut)
For Each c In Selection
'c.ColumnWidth = 20
fich = c.Value
' test fichier
If fich <> "" Then
If Left(fich, 7) = "http://" Then
' on conserve le lien sur le net
Else
numfich = FreeFile()
On Error GoTo errfich
Open fich For Input As #numfich
Close #numfich
End If
End If
'
If fich <> "" Then
c.RowHeight = h 'fixer la hauteur de ligne
ActiveSheet.Pictures.Insert(fich).Select 'ouverture image
With Selection.ShapeRange
.LockAspectRatio = msoTrue 'conserver les proportions
.Height = h - 4 'hauteur de l'image = hauteur des lignes - 4
.Left = c.Offset(0, r).Left + 2 'à gauche colonne A (sinon tu calcules avec la largeur de colonne)
.Top = c.Top + 2 'et positionner verticalement
If .Width > lmax Then lmax = .Width
' limitation largeur colonne
If lmax > 500 Then lmax = 500
c.Offset(0, r).ColumnWidth = lmax + 4
End With
End If
Next c
Exit Sub
errfich:
fich = imgDefaut
Resume Next
End Sub
J'en profite pour remettre un fichier exemple à jour : AffImages.xls
Et tu peux aller voir cette discussion qui t'interessera peut-être aussi : inserer une image dans un commentaire
eric
et j'ai essayé sur votre lien le test, rien se passe : (
j'ai la version 2007...
mon fichier est comme ca: http://www.cijoint.fr/cjlink.php?file=cj200811/cijVXl5TLZ.xls
merci encore!
anna
Les images fichiers ne s'afficheront bien sûr que si tu mets des chemins d'images qui existent sur ton micro, la 4ème (lien image sur ccmdoit s'afficher).
Je regarde ton fichier...
Il faut sélectionner la plage où tu as tes liens avant d'appeler la macro AffImage.
Je t'ai ajouté un bouton 'test' qui sélectionne L2:L9 et appelle la macro
http://www.cijoint.fr/cjlink.php?file=cj200811/cijKhSbc6v.xls
eric
PS: j'ajoute que si tu fais plusieurs fois la manip les images vont s'empiler et prendre de la place pour rien dans le fichier. Supprimer les images avant de les re-telecharger.
il commence bien en selectionnant le L2:L9 mais il s'arrete avec un erreur: erreur d'execution '1004': Impossible de lire la propriété Insert de la classe Pictures
Le macro, je fais simplement copy & paste, non? ou je dois changer qq chose dedans? et les images devrait s'afficher a la colonne que je choisis a coté, non?
En appuyant sur le macro, il agrandit la ligne a 75, et puis le message erreur... Au Secours!
merci, Anna
Je viens de tester sur 2007 et effectivement il refuse d'insérer une image qui ne soit pas sur le disque dur...
Et en enregistrement de macro pour voir s'il y avait de nouvelles méthodes il n'enregistre rien.
Je vais continuer de chercher un peu mais pour l'instant je n'ai pas de réponse
eric
Tout d' abord, un GRAND MERCI pour cette super macro qui marchait magnifiquement bien tant que j' etais sous excel 2003.
Mais je viens de passer sous excel 2010 et les choses se compliquent un peu...
La macro fonctionne toujours tres bien, mais a condition que le document excel reste dans le meme repertoire que les images.
Si je le sauve dans un autre repertoire, les images disparaissent et sont remplacees par un carre blanc contenant le message d' erreur suivant : " The linked image cannot be displayed. The file may have been moved, renamed or deleted. Verify that the link points to the correct file and location" .
Y a t' il un moyen de " figer" les images dans le fichier excel apres avoir utilise la macro ?
Ou de corriger la macro ?
Un grand merci d' avance !
AD.
Alors là tu m'apprends qcq chose.
J'ignorais que 2010 ne stockait que le lien et non l'image elle même intégrée dans le fichier comme sur 2003...
Ca a l'air d'être ça vu ta description du problème.
Si tu n'utilises pas les nouvelles fonctionnalités de 2010 sur ce fichier tu peux toujours tenter de l'enregistrer au format 2003 (.xls).
Mais si le nouveau format 2007-2010 stocke les images à l'extérieur du fichier tu n'as d'autres choix que de les laisser là où excel les a mises et des les déplacer en même temps.
Là pour l'instant je n'ai pas les moyens de tester sur 2010
eric
eric
Super pour ta macro, elle a résolu une grande partie de mes pbs.
J'ai questions:
- dans le dernier fichier Affimages.xls, je n'arrive pas à trouver comment faire pour centrer les photo dans la cellule.
- Sais-tu comment faire pour que je puisse transformer ce fichier excel obtenu en fichier word avec une page word par ligne excel. J'ai réussi grace au publipostage et à la fusion à créer ce que je voulais sauf que je ne sais pas comment insérer automatiquement la photo.
Merci
C'est une constante en début de programme à modifier :
Const centrerHz As Boolean = False ' = True pour centrer horizontalement dans la cellule
tu remplaces False par True et c'est tout
Pour le 2° ce n'est pas du tout mon rayon, démarre une nouvelle discussion il y a des bons dans ce domaine sur le forum ;-)
eric
J'ai un petit soucis.
je m'explique:
j'ai une cellule que j'ai paramétré pour quelle change son contenu (lien image sur mon disque dur), le probleme est que je voudrai que le lien et donc l'image associé à ce lien change lorsque ce fameux lien change lui aussi.
en gros:
1 lien qui change (car cellule paramétré) ==> une image a chaque fois que le lien change.
Vous pensez que c'est fesable?
merci par avance.
Julien
tout d'abord eriic, un grand merci, ton programme m'a fait gagner énormément de temps!
Par contre, je désire centrer mon image dans la cellule, est-ce possible?
j'avais cru qu'en utilisant les commandes
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
ça aurait marché, mais apparement pas (NB je n'y connais pas grand chose en VBA, en fait il y a 1 h je ne savais pas que ça existait...)
J'en parle dans le post #54
Et pour le centrage vertical vu les images sont redimensionnées à la hauteur de ligne-4, elles sont centrée automatiquement.
eric
J'ai intégré la macro Affimage qui fonctionne très bien mais effectivement avec EXCEL 2010, l'image n'est pas stockée dans le fichier mais simplement rappelée à chaque ouverture.
Pour éviter cela, il faut faire couper/coller image jpeg sur chaque image.
Serait-il possible d'ajouter le petit code permettant d'effectuer cela automatique : après insertion de chaque image, avant de passer au r suivant.
Merci d'avance.