Insertion automatique d'images sous excel

Résolu/Fermé
luseve - 16 sept. 2007 à 14:14
 jujulaglu33 - 10 août 2015 à 15:27
bonjour a tous

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 ...

42 réponses

eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
18 janv. 2008 à 06:56
Bonjour aussi
0
Bonjour, juste pour remercier le coder qui à fait ce code ,c'est exactement ce que je cherchais et étant dans le métier (mais commercial pour une SSII), je dois juste le féliciter pour le boulot !!

Bravo et merci pour l'engagement !

@+
Vincent
0
Bonjour,

ç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
0
Slt,

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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Re

en 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

...
0
là il vient de bloquer sur un image existante 8-)
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
16 juin 2008 à 19:14
Bonsoir,

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
0
Bonjour,

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
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
17 juin 2008 à 18:29
Ah ben si y'a plus d'problème tout va bien alors ;-)
0
Oui vraiement, bravo et merci pour ton code !!
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
6 août 2008 à 12:26
de rien et merci.
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
0
salut... je viens de voir votre dialogue; cela m'interesse... j'ai essayé de le faire avec un fichier excel, mais pas de reussite! est-ce que les liens peuvent venir de http.//www...?
merci pour tout aide!
anna
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
3 nov. 2008 à 19:20
Bonsoir,

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
0
Merci Eric pour votre aide... malheureusement cela n'as pas marché; je recois un erreur 400; (mon connection internete marche...)
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
0
Bonjour Eriic,

Un immense merci pour ton code qui m'a permis de créer un catalogue depuis un fichier CSV avec les photos (en ligne), pour info ce code ne fonctionnait pas sous excel 2011 (sur mac) mais très bien sur Excel 2010 pro sur PC,

Merci encore et bonne continuation
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
3 nov. 2008 à 22:31
Dans le fichier exemple clique sur le bouton 'test', choisis la hauteur de ligne, et clique sur 'annule' pour mettre les images à droite du lien (je n'ai pas fait de formulaire vba avec les bons noms sur les boutons pour que ce soit utilisable avec le code seul, vu que les fichiers ne sont accessibles qu'un mois).
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...
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
3 nov. 2008 à 22:41
et ça marche sur ton fichier si tu y colles le code dans un module...
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.
0
Salut Eric,
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
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
4 nov. 2008 à 20:22
Bonsoir,

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
0
Merci Eric! Ca me rassure quand meme que je n'arrivais guere a le faire!!
Je vais voir si je peux trouver un excel 2003 pour le tester du coup en attendant!!

Merci encore!
0
Bonjour Eriiic,

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.
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
14 avril 2011 à 19:05
Bonjour,

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
0
Si je sauve le fichier sous " Excel 5.0/95 Workbook", les images restent presentes meme si je sauve le fichier dans un autre repertoire. MERCI !!!!!
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
28 janv. 2010 à 18:45
Nouvelle version avec un bug corrigé et la possibilité de centrer les images dans la cellule en changeant une constante du programme : AffImages.xls
eric
0
seul les liens images avec url fonctionne sous mac, pas les repertoires
0
oursmili Messages postés 5 Date d'inscription vendredi 10 octobre 2014 Statut Membre Dernière intervention 14 octobre 2014
10 oct. 2014 à 16:39
Bonjour eriiic,
Ton programme correspond tout a fait à mon besoin, mais je n'arrive pas à le récupérer , y a t'il une procédure particulières ?
Merci d'avance
0
Bonjour eriiic,

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
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
Modifié par eriiic le 5/05/2010 à 11:06
Bonjour,

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
0
merci beaucoup
0
Bonjour 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
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
15 sept. 2010 à 10:32
Bonjour,

Le programme n'est pas conçu pour fonctionner ainsi.
Le plus simple est, lorsque tu modifies ton lien, de supprimer l'image et de la recréer.
eric
0
ok Eric.

merci de ta réponse. je vais essayer de gérer ça comme ça.
0
Bonjour,

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...)
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
14 oct. 2010 à 18:47
Bonjour,

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
0
Liberta 69004
31 janv. 2014 à 20:30
Bonjour,

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.
0