Images intelligentes dans Excel

Résolu/Fermé
Flou - 23 févr. 2012 à 22:21
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 - 29 févr. 2012 à 07:12
Bonjour!

Voila mon problème....

J'ai un tableau que j'importe de Access qui liste quelques centaines de composants.
L'idée est de pouvoir imbriquer l'image .jpg de chaque composant sur la meme ligne, sachant que le nom du composant est identique au nom du fichier .jpg, je suis convaincu qu'il y'a une formule pour atteindre le fichier et l'insérer dans ma feuille.

De nouveaux composants ou photos peuvent s'ajouter ou se retirer, c'est pourquoi j'aimerais que mon fichier excel ce mette a jour tout seul, afin d'avoir une feuille style "catalogue" toujours à jour.

Je cherche désespérément sur le net, la meilleur façon de faire...
Avec une formule? une macro? du VBA? ou j'abandonne tout simplement?


Merci de votre aide!
A voir également:

8 réponses

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
23 févr. 2012 à 22:28
bonjour,

Regardes la démarche d'Éric qui devrait t'aider.

Si problème par rapport à la résolution n'hésites pas à continuer ici.
1
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 24/02/2012 à 04:03
Bonjour tout le monde,

J'ajoute que tu peux lire tout le fil (en le triant par date pour faciliter la lecture) car des évolutions ont eu lieu en fonction de demandes d'utilisateurs.
Mais surtout dans ton cas, comme la macro sera lancée plusieurs fois, il faudra supprimer toutes les images avant de la relancer. Sinon les images vont se superposer et alourdir le fichier inutilement..

eric
0
Merci beaucoup pour vos réponses!
Éric, ton programme semble être parfait pour mes besoins... je te lève mon chapeau pour ce petit bijou.
0
Je n'ai pas encore tester la macro... mais je suis optimiste.

La résolution des images pourrait effectivement causer des problèmes, car j'aimerais que le fichier Excel soit le plus léger possible afin de le distribuer facilement.. Il y'a peut-etre une manip dans excel qui permet de réduire la taille des images... ou dans le pire des cas je vais réduire les images à la source.

Mais évidemment, si quelqu'un a une solution plus pratique, vous avez toute mon attention.


Merci!!
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
24 févr. 2012 à 16:01
Re,

Je pense que tu n'as guère le choix, il faut diminuer leur résolution avant. Le changement de taille par excel ne change pas leur poids.
Il y a des logiciels qui te permettent de faire cela en masse. N'étant pas chez moi je n'ai pas de nom à te fournir.

Pour la même raison j'aurais du mal à t'aider à adapter, que gb n'hésite pas à intervenir...
Merci gb ;-)

eric
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
24 févr. 2012 à 16:29
Bonjour tout le monde,

Il y a peut être une solution de "retouche" d'images sous VBA. Je ne peux malheureusement pas la tester, étant au boulot, il m'est impossible de télécharger la library Windows Image Acquisition, et donc de tester.
Cependant, vous pourrez trouver de quoi retoucher une image sous excel et notamment il y est question de rogner, compresser etc...
A voir ici..... ou pas!
0
Je confirme que la macro de Éric fonctionne très très bien pour moi...
Maintenant mon problème est que je tente de sauvegarder les image avec le fichier excel (je suis sous la version 2010).

J'ai vu sur le topique ou Éric explique son programme, que quelqu'un à résolue ce problème en sauvegardant le fichier sous " Excel 5.0/95 Workbook". Je ne vois pas cette option dans mon Excel... et j'ai tenté toute les version qui me sont proposé... et a chaque fois, les images ne sont pas inclu dans le fichier, du coup il est difficile de le partager.

Pour ce qui est de la taille des images, Excel a une option pour compresser les image, peut-être que cela va être suffisant dans mon cas, mais tant que je n'arrive pas a sauvegarder "avec" les images, il est difficile de prévoir la taille du fichier au final.

Je vous tient au courant...


Merci
0
Ok, j'ai réussi a sauvegarder sous " Excel 5.0/95 Workbook"... oui les images suivent... mais la mise en forme a perdu les filtres, et je misais sur ceux-ci pour faciliter la recherche...

Je ne peux pas croire que Excel 2010 ne permette pas de sauvegarder avec les images....

Ayayaye, si proche du but.
0
Raymond PENTIER Messages postés 58396 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 25 avril 2024 17 094
24 févr. 2012 à 23:56
Bonjour Flou.

Il y a quelque chose qui m'a échappé dans la finalité de ton travail : Tu as d'une part un fichier Excel sans image, mais désormais avec une macro qui te permet d'aller chercher certaines images dans un dossier "convaincu qu'il y'a une formule pour atteindre le fichier et l'insérer dans ma feuille".
Tu as d'autre part ce dossier contenant plein d'images, dont certaines seront appelées par la macro.
Ton but est en effet de pouvoir tenir à jour ton catalogue "De nouveaux composants ou photos peuvent s'ajouter ou se retirer, c'est pourquoi j'aimerais que mon fichier excel ce mette a jour tout seul".
Je ne vois donc pas pourquoi tu voudrais sauvegarder la feuille excel contenant déjà les images "j'ai réussi a sauvegarder sous " Excel 5.0/95 Workbook"... oui les images suivent... mais la mise en forme a perdu les filtres ... Je ne peux pas croire que Excel 2010 ne permette pas de sauvegarder avec les images".
En toute logique, tu devrais, dans un dossier, sauvegarder côte à côte le fichier (classeur) excel et les images jpeg ! à moins que j'aie mal interprété ton souhait "je tente de sauvegarder les image avec le fichier excel" ... ?
0
Bonjour Raymond,

En fait pour mon utilisation personnel, cela ne cause aucun problème, par contre le but du catalogue est d'être distribué par email... Il serait donc beaucoup plus pratique que ce catalogue ne comporte qu'un seul fichier.

Dans Access nous avons le choix que les images soit liés ou intégrés, dans mon classeur Excel, les images sont vraisemblablement liés, mais comment les intégrés?
Voilà la question.

Flou
0

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

Posez votre question
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
27 févr. 2012 à 17:18
Bonjour tout le monde,

Ma macro a été réalisée sur excel 2003 et je t'avoue que j'étais persuadé que les images étaient intégrées.
Etant hospitalisé et mal équipé je ne peux contrôler qu'elles le sont réellement sur 2003, et que c'est une particularité sur 2010 (je ne me rappelle pas avoir vu le post que tu cites signalant ce pb).
A tout hasard fouille dans les options, sur 2010 ils ont fait peut-être comme sur word où tu choisis...

Je ne pourrais pas t'aider plus actuellement.

eric
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
28 févr. 2012 à 08:21
Salut Eriiic,

De passage par ici je te souhaite un prompt rétablissement.

Bon courage à toi
A+
Franck
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
28 févr. 2012 à 09:49
Salut pijaku,

Merci pour tes voeux :-)
Si tu as excel 2010 et des idées n'hésites pas à intervenir ;-)

Bonne journée à toi
eric
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
28 févr. 2012 à 09:51
Je n'ai pas 2010, mais rien ne m'empêche d'y regarder...

Bonne journée à toi.

Franck
0
J'ai remplacer la ligne de code:
ActiveSheet.Pictures.Insert(fich).Select
par :
ActiveSheet.Shapes.AddPicture(fich, False, True, ActiveCell.Left, ActiveCell.Top, largeur, hauteur).Select

Les images sont maintenant sauvegarder avec Excel.
Pour réduire la taille des images... au moment de la sauvegarde, dans "outils/compressions d'images", utiliser l'option "Utiliser la résolution du document".

Je copie ici le code retoucher... par contre je suis débutant dans le VBA donc le code n'est probablement pas optimiser pour la fonction "ActiveSheet.Shapes.AddPicture".
Je cherche actuellement à régler le ratio de l'image qui n'est plus proportionnelle a l'originale.

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 = "Q:\Parts\Catalog\Photos\not_available.jpg" ' 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
            
'À partir d'ici le code demande une révision.. mais fonctionne tout de meme
            
            ActiveSheet.Shapes.AddPicture(fich, False, True, ActiveCell.Left, ActiveCell.Top, largeur, hauteur).Select 'ouverture image
            With Selection.ShapeRange
                .LockAspectRatio = True 'conserver les proportions
                .Height = h - 4 'hauteur de l'image = hauteur des lignes - 4
                .Left = c.Offset(0, h).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, h).ColumnWidth = lmax + 4
            End With
        End If
    Next c
    Exit Sub
errfich:
    fich = imgDefaut
    Resume Next
End Sub
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
27 févr. 2012 à 18:01
Maintenant que tu le dis je me rappelle d'un autre bug sur 2010 où la solution passait déjà par l'intégration des images en fond d'une forme.
Si gb passe par là je lui laisse la main pour t'aider à améliorer le code, là je ne peux pas...

eric
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
Modifié par pijaku le 28/02/2012 à 10:57
Bonjour,

Conserver le ratio d'une image équivaut à multiplier la hauteur et la largeur de cette image par le même rapport.
Dans ton cas, on connait la hauteur souhaitée : h.
Il faut donc calculer ce rapport en faisant : h / hauteur de l'image
Ensuite, on peux avec une petite fonction personnalisée, mettre notre image à la bonne échelle. Suffit de mettre, en paramètre à cette fonction deux choses : notre objet image et le rapport.
La fonction :
Function AjusterImage(Imag As Object, Rapport As Single) 
Dim Largeur As Single 
Dim Hauteur As Single 

Largeur = Imag.Width 
Hauteur = Imag.Height 
Largeur = Largeur * Rapport 
Hauteur = Hauteur * Rapport 
Imag.Width = Largeur 
Imag.Height = Hauteur 
End Function

L'appel de cette fonction :
Dim h As Long, Rapport As Single 
Const hDefaut = 75 
h = InputBox("Hauteur des lignes :", "Choix hauteur", hDefaut) 
h = h - 4 
With Selection.ShapeRange 
    Rapport = h / Selection.Height 
    AjusterImage Selection, Rapport 
End With

L'appel de la fonction adapté dans ton code :

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 = "Q:\Parts\Catalog\Photos\not_available.jpg" ' 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, Rapport As Single 
    Dim c As Range, numfich As Integer 
    Dim fich 

'bla bla bla ICI TON DEBUT DE CODE

With Selection.ShapeRange 
    Rapport = h / .Height 
    AjusterImage Selection, Rapport 
    .Left = c.Offset(0, h).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, h).ColumnWidth = lmax + 4 
 End With 

' bla bla bla ICI LA FIN DE TON CODE 


Cordialement,
Franck P
0
Merci beaucoup pour voitre aide!

Vous êtes des pros!

(Résolu)
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
29 févr. 2012 à 07:12
Re,
n'oublie pas de supprimer les images avant de les rafraichir...
eric
0