Aide pour dérouler des cellules avec image dynamiques

Anthonymctm

XLDnaute Occasionnel
Bonjour,

J'ai besoin d'aide sur Excel 2016 dernière version.

Après avoir regarder plusieurs tuto concernant les images dynamiques et l'outil appareil photo, je suis parvenu à extraire une image issue d'une liste d'images mais je cherche à pouvoir étendre cette extraction (avec selection/glisser ou copier/coller) et c'est là que je sèche.

Explication :

Sur un onglet j'ai une liste de produit avec plusieurs caractéristiques dont une image associée.
Sur un autre onglet je souhaite générer les étiquettes associées à ces produits.
Sur ces étiquettes il y a plusieurs champs de la liste des produits de l'onglet 1 qui revient. Ça je le gère facilement en indiquant le numéro de la ligne associé et en utilisant la recherche V.
Mais pour l'image c'est une autre paire de manche.

Je suis donc parvenu a copier l'image associée au numéro de la ligne avec appareil photo, recherche V, fonction indirect et gestion des noms.
Mais quand je duplique mon étiquette tous les champs s'adaptent sauf l'image puisque elle ne change pas de nom puisque l'emplacement du nom doit être verrouillé avec des $. Quand je change manuelle le numéro de ligne, l'image change mais je veux pouvoir voir toutes les étiquettes (pas seulement une par une).

Vous trouverez le fichier épuré en pièce jointe.

En vous remerciant pour votre aide !!

Anthony
 

Pièces jointes

  • Stock Test.xlsx
    119.1 KB · Affichages: 25

Anthonymctm

XLDnaute Occasionnel
Bonjour Job75 et la communauté !

Je reviens sur ce topic pour vous demander s'il est possible pour moi d'ajuster la taille des images ? (sans les modifier une par une sur ma liste)

L'image est en C5 on pourrait imaginer qu'elle prenne le maximum de place entre C5:D5 en gardant son ratio initial et en se limitant à la direction la plus limitante (si j'arrive au maximum de ma hauteur je stoppe).

Sinon l'utilisation d'un zoom serait déjà pas mal ! :)

Je vous joins mon fichier actualisé si vous souhaitez m'aider sur ça
 

Pièces jointes

  • Stock test.xlsm
    1.2 MB · Affichages: 3
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour Anthonymctm,

Fichier joint avec ce code à la fin de la macro 'Actualiser' :
VB:
'---dimensions et positions des images---
For Each pic In Pictures
    Shapes(pic.Name).LockAspectRatio = msoTrue
    pic.Height = pic.TopLeftCell.Height
    If pic.Width > Columns("C:D").Width - 10 Then pic.Width = Columns("C:D").Width - 10
    pic.Top = pic.TopLeftCell.Top
    pic.Left = Columns("C").Left
Next
Il augmente notablement la durée d'exécution.

A+
 

Pièces jointes

  • Stock test(1).xlsm
    1.2 MB · Affichages: 6

Anthonymctm

XLDnaute Occasionnel
Super de mieux en mieux.

J'ai l'impression que cette partie ne fonctionne pas sur quelques images. Sur mon Excel le EC0303 ne se redimensionne pas alors que sur le votre c'est le EC0303 et EC1101.

Aussi, j'ai essayé de modifier le code pour que ce soit le coté droit de l'image qui se colle au coté droit de la colonne D, j'ai fait
pic.Right = Columns("D").Right mais ça n'a pas fonctionné :(

Aussi, j'aurai aimé faire que toutes les images soient en arrière plan, que les lignes et le code barre passe par dessus si jamais elles dépassent. (moins important)
 

job75

XLDnaute Barbatruc
Le non-dimensionnement des images pour EC0303 et EC1101 était dû à une mauvaise numérotation des images.

Il faut donc d'abord les renommer correctement, voyez le fichier (2) avec ce code :
VB:
'---les images sont renommées---
For i = 1 To Pictures.Count
    Pictures(i).Name = "µ" & i 'nom provisoire
Next
For i = 1 To Pictures.Count
    Pictures(i).Name = "P" & i 'nom définitif
Next
Pour l'alignement à droite des images il suffit d'utiliser :
VB:
    pic.Left = Columns("E").Left - 10 - pic.Width 'alignement à droite avec marge de 10 points
Perso je trouve que c'est moins bien qu'avec l'alignement à gauche...
 

Pièces jointes

  • Stock test(2).xlsm
    1.2 MB · Affichages: 17

Anthonymctm

XLDnaute Occasionnel
Oui finalement, en jouant sur la largeur des colonnes je préfère aussi à gauche.

Au moins je sais comment faire si j'aurais d'autres macro du même types à faire.

Encore un grand merci, j'aurais jamais pu trouver tout ça tout seul ! :oops:

Ca me donne envie d'en apprendre davantage sur le VBA
 

Anthonymctm

XLDnaute Occasionnel
ok, alors je viens de tenter :
VB:
pic.Left = Columns("D").Left + (pic.TopLeftCell.Width - pic.Width) / 2

puis
VB:
pic.Left = Columns("D").Left + (pic.TopLeftCell.Width - pic.Width)

puis
VB:
pic.Left = Columns("D").Left - (pic.TopLeftCell.Width - pic.Width) / 2

pour finalement comrpendre qu'il fallait faire
VB:
pic.Left = Columns("D").Left - (pic.Width / 2)
 

Discussions similaires

Réponses
1
Affichages
529

Statistiques des forums

Discussions
312 203
Messages
2 086 181
Membres
103 152
dernier inscrit
Karibu