Rechercher : dans
Par :

Insertion automatique d'images sous excel

Dernière réponse le 20 nov 2009 à 10:35:00 luseve, le 16 sep 2007 à 14:14:26 
 Signaler ce message aux modérateurs

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

Configuration: Windows Vista
Internet Explorer 7.0

Meilleures réponses pour « Insertion automatique d'images sous excel » dans :
Insérer une image dans un mail Gmail en cours de composition VoirVoici une excellente méthode pour insérer des images dans vos e-mails Gmail. Résultat garanti ! Vu que vous avez un compte Gmail (puisque vous vous posez cette question) vous avez nécessairement accès à Google Documents. C'est le même compte...
[CommentçaMarche] Insérer une image dans la FAQ VoirPour insérer une image dans une FAQ Insérer des captures d'écran peut aider à la compréhension d'une explication. Voici comment procéder pour améliorer les Astuces de CommentçaMarche (les FAQ). Il y a deux manière d'insérer une image: Soit une...
Insérer une image de fond sous la grille Excel VoirVous souhaitez insérer un logo sous JPEG ou autre, sous votre grille Excel : FORMAT / FEUILLE / ARRIERE PLAN s'ouvre un panneau vous présentant vos images pour sélection.... choisissez, validez. Pour le supprimer : même procédure FORMAT /...
LaTeX - Insertion d'images VoirStyle LaTeX permet d'insérer des images de différents formats. Le plus simple est d'insérer des fichiers de type eps (Encapsuled Postscript) : Il suffit d'insérer dans le préambule la ligne suivante : \usepackage{graphicx} Puis d'insérer...

1

popie1976, le 20 sep 2007 à 22:10:59
  • +1

Bonsoir,

Désolée pour cette réponse, mais je crains que ce que tu souhaites ne soit pas possible.

Déjà qu'en faisait un simple copier coller de par exemple word, excel ne le mets pas sur la cellule spécifiée, alors là...

Bon courage !

Répondre à popie1976

2

luseve, le 21 sep 2007 à 06:53:16

Bonjour, je pense que c'est possible avec notamment la fonction activeSheet.Pictures.Insert (chemin du fichier)
ce que je n'arrive pas a faire : c'est indiqué dans chemin du fichier, que le chemin est indiqué dans la cellule B1.

autre probleme quand on insere plusieus activesheet.pictures.insert, les images se superposent sur une meme cellule.

Je rapelle le but de la maneouvre : B1 donne le lien url d une image, en A1 s'affiche l image. et ainsi de suite.

J'ai cherche sur pas mal de forums, mais personne ne semble savoir repondre. Je vais encore chercher ...

Merci à popie1976 pour ses encouragements ....

Répondre à luseve

3

eriiic, le 21 sep 2007 à 08:13:02

Bonjour,


Definis déjà une même hauteur pour toutes les lignes ( ici 75)
en B3 le chemin du fichier "C:\Documents and Settings\All Users\Documents\Mes images\Échantillons d'images\Collines.jpg"
(je n'ai pas testé avec un URL)


Sub test()
fich = [B3].Value 'recup nom fichier
ligne = [B3].Row 'en quelle ligne ?
ActiveSheet.Pictures.Insert(fich).Select 'ouverture image
ligne = 3
With Selection.ShapeRange
.LockAspectRatio = msoTrue 'conserver les proportion
.Height = 72 'hauteur de l'image - un tit qcq chose pour qu'elle soient séparée
.Left = 0 'à gauche colonne A (sinon tu calcules avec la largeur de colonne des colonnes
.Top = 75 * (ligne - 1) 'et positionner verticalement
End With
End Sub

si les hauteurs de ligne et largeur de colonne ne sont pas fixes tu peux recuperer leur valeurs pour calculer .top et .left mais c'est plus lourd à gérer

J'espère t'avoir guidé là il fallait
eric

Répondre à eriiic

36

popeye, le 31 jui 2008 à 15:39:08
  • +1

Salut je me heurte au meme problème!!!

Tu proposes de taper des lignes de code mais je ne sais pas ou pourrais-tu me dire s'il te plait?

Un grand merci d'avance

Répondre à popeye

4

luseve, le 21 sep 2007 à 13:46:03

Merci eriiic, je progresse ... cela correspond a ce que je veux faire, mais peut on automatiser tout ca ?

voila ce que j'ai ecrit pour voir s'afficher le resultat de 3 liens : (ci dessous) - on peut certainement eviter de devoir copier coller et manuellement de modifier le champs [B2] ... [B3] .... est ce possible de realiser une boucle ? n liens correspond à n affichages

au fait, cela marche avec une url !!! grand merci !!!


Sub test()
fich = [B1].Value 'recup nom fichier
ligne = [B1].Row 'en quelle ligne ?
ActiveSheet.Pictures.Insert(fich).Select 'ouverture image
ligne = 1
With Selection.ShapeRange
.LockAspectRatio = msoTrue 'conserver les proportion
.Height = 72 'hauteur de l'image - un tit qcq chose pour qu'elle soient séparée
.Left = 0 'à gauche colonne A (sinon tu calcules avec la largeur de colonne des colonnes
.Top = 75 * (ligne - 1) 'et positionner verticalement
End With

fich = [B2].Value 'recup nom fichier
ligne = [B2].Row 'en quelle ligne ?
ActiveSheet.Pictures.Insert(fich).Select 'ouverture image
ligne = 2
With Selection.ShapeRange
.LockAspectRatio = msoTrue 'conserver les proportion
.Height = 72 'hauteur de l'image - un tit qcq chose pour qu'elle soient séparée
.Left = 0 'à gauche colonne A (sinon tu calcules avec la largeur de colonne des colonnes
.Top = 75 * (ligne - 1) 'et positionner verticalement
End With

fich = [B3].Value 'recup nom fichier
ligne = [B3].Row 'en quelle ligne ?
ActiveSheet.Pictures.Insert(fich).Select 'ouverture image
ligne = 3
With Selection.ShapeRange
.LockAspectRatio = msoTrue 'conserver les proportion
.Height = 72 'hauteur de l'image - un tit qcq chose pour qu'elle soient séparée
.Left = 0 'à gauche colonne A (sinon tu calcules avec la largeur de colonne des colonnes
.Top = 75 * (ligne - 1) 'et positionner verticalement
End With

End Sub

Répondre à luseve

5

eriiic, le 21 sep 2007 à 16:54:41

Ah ben oui, c'était juste en exemple pour montrer comment placer une image où on veut mais il ne faut pas le copier 823 fois.
(d'ailleurs je viens de voir que ' ligne = 1' est superflu car ensuite j'avais ajouté la récupération du numéro de ligne à partir des references d'une cellule avec 'ligne = [B1].Row ')

tu pourrais faire qcq chose comme ça :

sub machin()
for each c in selection
fich = c.offset(0,1).value
ligne = c.row
ActiveSheet.Pictures.Insert(fich).Select 'ouverture image
With Selection.ShapeRange
.LockAspectRatio = msoTrue 'conserver les proportion
.Height = 72 'hauteur de l'image - un tit qcq chose pour qu'elle soient séparée
.Left = 0 'à gauche colonne A (sinon tu calcules avec la largeur de colonne des colonnes
.Top = 75 * (ligne - 1) 'et positionner verticalement
End With
next c
end sub

pour l'utiliser tu selectionnes en colonne A toutes les cellules où tu veux mettre l'image dont l'adresse est en colonne B puis tu appelles la macro.
Bon, pas sûr que tout marche car là je ne peux tester
eric

Répondre à eriiic

6

luseve, le 22 sep 2007 à 02:31:53

Merci beaucoup !!!
cela fonctionne à merveilles ...

je n'ose pas poussez le bouchon ... mais n'y a t il pas un moyen d'ajuster au mieux les cellules. car au bout d'une 15aine de photos, bien qu'elles soit proporionnées, il y a un decalage du certainement à des approximations ...

en tout cas Eriiic , chapeau bas ... merci encore ...

Répondre à luseve

37

popeye, le 31 jui 2008 à 15:59:33
  • +1

Salut luceve franchement tu as exactement le même problème que moi sauf que je suis une merde en info, je sais même pas ou taper le programme que l'on t'as conseiller!!!!

S'il te plait pourrait tu m'en dir une peu plus voir me transmettre ton fichier ou un truc comme ca pour que je me débrouille par analogie




salut!!!!!!

Répondre à popeye

7

eriiic, le 22 sep 2007 à 11:26:49

Bonjour luseve,

peux-tu m'expliquer ce que tu appelles ajuster et comment est ce décalage...
je viens de tester et je n'ai pas ce décalage, sans doute parce que j'utilise tjs la même et encore je ne me l'explique pas
si tu pouvais mettre ton fichier ici via www.cijoint.com ça serait mieux
eric

PS: si tu le désires on peut aussi les centrer horizontalement et regler automatiquement la largeur de la colonne A en fonction de la plus grande ou d'autres trucs si tu as des idées.
eric

Répondre à eriiic

8

eriiic, le 22 sep 2007 à 15:02:22

Une amélioration qui résoudra sans doute ton pb:
remplace .Top = 75 * (ligne - 1) par c.top

si c'est ok tes lignes pourront avoir n'importe quelle hauteur mais il faudra quand même que leur hauteur ne change plus après ajout de photos. Il faudrait une autre petite macro pour adapter leur position sur cet evenement
eric

Répondre à eriiic

9

siwomyel, le 7 nov 2007 à 16:50:07

Bonjour!

je souhaiterais inserer des images dans une colonne (par exple une image en C1,une autre en C2, ..., une autre en Cn)
puis-utiliser la formule preconisee, si oui ou et comment l'inserer?

Merci davance

SiwomYel

Répondre à siwomyel

10

luseve, le 7 nov 2007 à 17:12:25

Bonjour,
il faut creer une macro
et taper ceci :

sub machin()
for each c in selection
fich = c.offset(0,1).value
ligne = c.row
ActiveSheet.Pictures.Insert(fich).Select 'ouverture image
With Selection.ShapeRange
.LockAspectRatio = msoTrue 'conserver les proportion
.Height = 72 'hauteur de l'image - un tit qcq chose pour qu'elle soient séparée
.Left = 0 'à gauche colonne A (sinon tu calcules avec la largeur de colonne des colonnes
.Top = 75 * (ligne - 1) 'et positionner verticalement
End With
next c
end sub
merci à eriic, chez moi cela fonctionne !

donner en B1 le chemin ou se trouve la photo , ainsi de suite (...) Bn, puis selectionner B1 à Bn, lancer la macro, les photos s'affichent en A1 (...) An, pour afficher le resultat en C1 (...) Cn il faut modifier .left= la valeur souhaitée correspondant à la position du debut de la colonne C.

C'est tout !

Répondre à luseve

11

eriiic, le 7 nov 2007 à 17:45:47

Bonjour tout le monde,

Faites quand même la modif que j'avais préconisé en 8
cad. remplacer .Top = 75 * (ligne - 1) par c.top
(juste avant le end with)

Comme ça on se cale vraiment sur la cellule même si la hauteur des lignes précédente a été modifiée.

eric

Répondre à eriiic

12

siwomyel, le 7 nov 2007 à 17:51:31

Merci beaucoup, mais je n'ai jamais creer de macros avant, dc comment ca marche.

concretement, dans le menu Macros, j'ai ouvert Visual basic editor (par hasard) ensuite j'ai creerun nouveau fichier, mais je pense qu'il y a des phrases a changer ou a supprimer car je n'y arrive tjrs pas en recopiant simplement la reponse ke tu m'a donnee.

Donc comment on fait concretement, que dois je ouvrir, recopier supprimer changer...

Desolee pr toutes ces questions mais quand on debute c pas evident!

Encore merci pr vos reponses!

Répondre à siwomyel

13

eriiic, le 7 nov 2007 à 23:16:23

Bonsoir,

Tu fais un clic-droit sur le nom de l'onglet de ta feuille et tu choisis 'Visualiser le code'
Tu colles:

Sub AffImage()
For Each c In Selection
Dim c As Range
fich = c.Offset(0, 1).Value
ligne = c.Row
ActiveSheet.Pictures.Insert(fich).Select 'ouverture image
With Selection.ShapeRange
.LockAspectRatio = msoTrue 'conserver les proportion
.Height = 73 'hauteur de l'image = hauteur des lignes - 2
.Left = 1 'à gauche colonne A (sinon tu calcules avec la largeur de colonne des colonnes
.Top = c.Top + 1 'et positionner verticalement
End With
Next c
End Sub

dans la fenetre de droite.
Tu retournes sur ta feuille, tu saisis le lien d'une image en B1 et tu mets la hauteur de ligne à 75.
Tu sélectionne A1 (destination de l'image), ensuite Alt+F8, tu sélectionnes Feuil1.AffImage et executer.
Ca devrait s'afficher.
Quand j'aurai un peu de temps je reprendrai la macro pour la rendre parametrable plus facilement dans le choix des colonnes.
Actuellement il faut jouer sur le 1 de fich = c.Offset(0, 1).Value

Bon courage
eric

Répondre à eriiic

14

eriiic, le 8 nov 2007 à 10:28:15

Si le lien est en colonne A, pour avoir les images en colonne B remplacer fich = c.Offset(0, 1).Value par
fich = c.Offset(0, -1).Value
Sélectionner toutes les cellules devant recevoir une image en colonne B et lancer la macro
pas testé, me dire si pb
eric

Répondre à eriiic

15

siwomyel, le 15 nov 2007 à 12:41:09

Bonjour,

Eric G essayer en vain je n'y arrive pas
je bloque quand il faut ajouter le lien de l'image en A1. Pourquoi ajouter un lien d'image ici alors que je veux voir apparettre le nom de mon produit en A1 avec sa foto en B1. pour cette partie je fais clic droit ajouter un hyperlien est ce que c bien comme ca qu'il faut faire?
ensuite quand je sélectionne A1 (destination de l'image), ensuite Alt+F8, puis sélection Feuil1.AffImage et executer.
Ca ne s'afficher pas.

px tu s'il te plait me reeexpliquer desolee si je te derange.

SiWoMyel

Répondre à siwomyel

16

luseve, le 15 nov 2007 à 14:20:49

Bonjour,
il faut tout de meme indiquer à Excel ou se trouvent vos images ! c'est pour cela que vous devez creer une colonne avec vos liens
vers ces photos (quelles soient sur votre disque dur ou sur internet (peut importe la colonne que vous choississez, pensez à modifier l'offset en fonction de la colonne choisie)
en colonne A mettez vos Titre , en B vos liens, en C les photos s'affichent (pensez à masquer le colonne B, afin de ne pas visualiser la colonne b)

Répondre à luseve

17

eriiic, le 15 nov 2007 à 19:23:08

Bonsoir,

Je pense que luseve t'a répondu.
Je vais modifier un peu la macro pour lui donner un peu de souplesse mais ça sera un peu plus tard.
Sinon dans le code précédent je viens de voir qu'il faut inverser ces 2 lignes:
For Each c In Selection
Dim c As Range

donc mettre
Dim c As Range
For Each c In Selection

C'est peut-être ça qui te genait
eric

Répondre à eriiic

23

Divu, le 3 avr 2008 à 18:05:57

Bonjour

J ai vu ton code que j'utilise pour visualiser des images mais je rencontre un porbleme lorsque la cellule est vide
Comment lui indiquer de ne pas tenir compte des cellules vides ou de passer a la ligne suivante

merci de ton aide

Répondre à Divu

24

eriiic, le 3 avr 2008 à 18:48:05

Bonsoir,

normalement la macro en tient compte avec

 If fich <> "" Then

Il faudrait que tu sois plus précis, et éventuellement déposer ton fichier sur cijoint.fr et coller le lien ici
eric

Répondre à eriiic

25

Divu, le 4 avr 2008 à 11:22:42

Bonjour

Voila le lien http://www.cijoint.fr/cjlink.php?file=cj200804/cije8DiQBd.xl­s.

Comme tu peux le constater certaines lignes sont vides ( pas de photos pas de lchemin) et je pense que c est a ce niveau que ca bloque

merci de ton aide

Répondre à Divu

18

eriiic, le 15 nov 2007 à 21:49:21
  • +1

Re,

Bon, j'ai refait un peu la macro.
Maintenant sélectionner les cellules où sont les liens pointant sur une image.
En répondant à la 1ère boite de dialogue par 'oui', 'non' ou 'annuler' l'image s'affichera dans la colonne à gauche, ou dans celle du lien ou dans celle de droite (en fait bouton de gauche affiche à gauche etc).
Puis la 2nde boite de dialogue permet de choisir la hauteur des ligne (donc des image). La hauteur par défaut (75) peut être changé en début de code en changeant la valeur de la constante hDefaut.

Sub AffImage2()
    ' Sélectionner les cellules contenant un lien vers une image
    ' AffImage les affichera sur le lien ou dans la colonne de gauche ou de droite
    Const hDefaut = 75
    Dim msg As String, r As Long, h As Long
    Dim c As Range
    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
        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 proportion
                .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 des colonnes
                .Top = c.Top + 2 'et positionner verticalement
            End With
        End If
    Next c
End Sub


eric

Répondre à eriiic

48

Kirilov, le 20 aoû 2009 à 17:07:51
  • +1

Bonjour,

Pour mon boulot je souhaite utiliser votre petit programme... Mais je n'y arrive pas ! Pour une raison que je n'arrive pas à résoudre, une fois lancé le programme affiche une seule et même image. Si vous pouvez m'expliquer...

Merci beaucoup

Kirilov

Répondre à Kirilov

49

eriiic, le 20 aoû 2009 à 19:26:27

Bonjour,

Tu n'as peut -être pas eu le courage de lire tout le fil pour savoir le principe...
Tes liens vers des images sont dans une colonne, il faut sélectionner toutes ces cellules avant de lancer la macro. Là tu choisis si tu les veux à gauche, sur, ou à droite de ces cellules.
Il faut savoir que sur excel 2007 un bug fait que ça ne fonctionne que pour des images sur le disque dur (et pas pour une image sur http://....)
Et je te conseille de prendre la dernière version au post 41 vers la fin de cette discussion
Si tu penses tout faire correctement précise les conditions
eric

Répondre à eriiic

50

Kirilov, le 21 aoû 2009 à 14:05:42

Bonjour,

J'ai repris le modèle du post 41 et modifié mes liens : j'utilisais la fonction "concaténer" qui posait apparemment problème. Désormais, ça marche. Merci de votre réponse.
Une autre question : est-il possible d'afficher les images non pas comme des objets mais "dans" la cellule de destination. Et, si oui, on pourrait alors imaginer que cette vignette soit elle-même un lien vers une version agrandie de l'image.

Cordialement,

Kirilov

Répondre à Kirilov

51

 Via Gum, le 20 nov 2009 à 10:35:00

Salut!!!

La formule fonctione super, mais!!!!

Dans mon cas je souhaite seulement jouer la largeur de l'image et non avec la hauteur.

Le seul hic c'est que je vois pas trop quel élément je dois modifier!!!

Un petit coupe de main serai le bien venu

Merci

Répondre à Via Gum

19

siwomyel, le 19 nov 2007 à 11:19:40

Bonjour,

hO!!!!!!!!!

MERCI BCP!!!!!!!!!!!!!! CA marche!!!!!!!!!!!!!!!!!!!!!

Cependant j'aurai une derniere petite requete. j'ai 900 image a ajouter, y a t-il une formule ou une technique pour ajouter mes liens automatiquement? c'est a dire sans avoir a cliquer droit, ajouter un hyperlink a chaque fois s'il te plait?

Merci d'avance!

SiWomYel

Répondre à siwomyel

20

eriiic, le 19 nov 2007 à 20:23:14

Bonsoir,

Content que tu aies pu mieux le tester.
Pour ta dernière demande, si ce sont des fichiers sur disque dur tu peux, dans une fenetre DOS, rediriger un DIR dans un fichier texte pour avoir les noms de fichiers (dans le répertoire concerné tu saisis DIR /D >> liste.txt), ou bien il doit y avoir des logiciel sous windows qui te le font.
Tu récupères cette liste dans excel, tu la remets un peu en forme pour avoir tes noms en colonne B par exemple. Tu saisis le chemin en A1 C:\tmp\ par exemple , et tu refabriques tout tes liens avec en C1: =$A$1 & B1 que tu étends vers le bas.
Même si ce ne sont pas des liens hypertextes ce n'est pas un problème, le tout est que l'adresse soit complète pour que ça fonctionne.
Pour des fichiers sur le net il y a peu de chance que tu puisses acceder au répertoire pour pouvoir extraire tous les noms de fichiers sinon le principe serait le même...

Bon courage
eric

Répondre à eriiic

21

Connyc, le 17 jan 2008 à 20:49:37

Petite question:

Je n'y connais pas grand chose en excel et j'apprend petit a petit en ce moment.

La question est la suivante:

Si je crée un colonne avec toutes les liens vers les photos et que je fais apparaître ces photos dans une celle spécifique de excel (exemple:
Lien en B1 et photo apparaît en A1) comme mentionné dans l'exemple de la macro.

Si par la suite dans mon fichier excelle je prend la cellule D1 et que j'y entre =B1

La photo ce répliquera-t-elle alors dans la cellule D1 ?

Je vais essayer de le faire mais si quelqu'un sait que de cette facon sa ne marchera pas mais qu'il y a une autre facon de le faire laisser le moi savoir !

Répondre à Connyc
Collection CommentÇaMarche.net