XL 2019 Affichage automatique d'images

PoloTaz67

XLDnaute Junior
Bonjour
Dans une feuille de calcul, dans la cellule D3 par la formule =INDEX(B2:B13;ALEA.ENTRE.BORNES(2;NBVAL(B2:B13));1) lancée par la touche F9 j'obtiens aléatoirement la référence d'une image
Cette image stockée dans un dossier "Image" est identifiée par le nom issus du résultat de la formule (ex: Tournevis)
j'ai essayé par VBA de crée une macro applicable automatiquement .
Mais n'étant pas un spécialiste de code cela ne fonctionne pas.
Mes questions
  1. Quel code pourriez vous me donner pour que l'image "Tournevis" s'affiche dans la feuille de calcul en E3?
  2. Ou placer le code pour que cela fonctionne sans intervention autre que F9 qui lance le processus?
Merci
 

Dudu2

XLDnaute Barbatruc
Bonjour,
Voici un code que j'ai fait il y a un certain temps pour placer une image dans un range.
La fonction possède les paramètre suffisants pour l'import.
VB:
'-----------------------------------
'Importer une image dans une feuille
'-----------------------------------
'Parametres:
'----------
'- SourceImage                  Nom complet du fichier image ou de l'Objet Picture
'- TargetRange                  Cellule ou Plage où placer l'image
'- ClearRangeFirst              Efface prélablement toutes les Shapes présentes dans le TargetRange
'                               Défaut: True
'- ImportedObjectName           Nom imposé de l'Objet Image ou de la Shape après insertion
'                               Défaut: nom généré par Excel retourné par la fonction
'- msoShape                     Si l'image doit être placée dans une Shape,
'                               Type de Shape (https://docs.microsoft.com/en-us/office/vba/api/office.msoautoshapetype)
'                               Exemple: msoShapeRectangle
'                               Défaut: pas de Shape
'                               Fonctionne uniquement si SourceImage est de type fichier
'- msoShapeBorderWeight         Si une msoShape est spécifiée, l'épaisseur de ses bordures
'                               Défaut: 1 point
'- msoShapeBorderColor          Si une msoShape est spécifiée, la couleur de ses bordures'
'                               Défaut: 0 (noir)
'- InCell                       True place l'image dans la cellule / plage
'                               Défaut: True
'                               False place l'image en dehors de la cellule / plage
'- InCellHMarginPercentage      Si InCell = True, pourcentage de largeur de cellule / plage pour une marge horizontale droite et gauche
'                               Défaut: 0%
'- InCellVMarginPercentage      Si InCell = True, pourcentage de hauteur de cellule / plage pour une marge verticale haute et basse
'                               Défaut: 0%
'- Align                        Si InCell = True, position de l'image dans la cellule / plage
'                               - En gardant les proportions originales de l'image: "Top", "Bottom", "Left", "Right", "Centre"
'                               Défaut: "Centre"
'                               - En modifiant les proportions originales de l'image: "Cover"
'                               Si InCell = False, position de coin haut gauche de l'image par rapport à la cellule / plage
'                               - En gardant les proportions originales de l'image: "TopLeft", "TopRight", "BottomLeft", "BottomRight", "Centre"
'                               Défaut: "TopLeft"
' - ResizeRatio                 Si InCell = False, ratio de redimensionnement à appliquer à l'image
'                               Défaut: 1
'Return:
'------
'- Nom de l'Objet image ou Shape créé
'-----------------------------------
Function ImportImage(ByVal SourceImage As Variant, _
                     ByVal TargetRange As Range, _
                     Optional ByVal ClearRangeFirst As Boolean = True, _
                     Optional ByVal ImportedObjectName As String = vbNullString, _
                     Optional ByVal msoShape As String = vbNullString, _
                     Optional ByVal msoShapeBorderWeight As Single = 1, _
                     Optional ByVal msoShapeBorderColor As Long = 0, _
                     Optional ByVal InCell As Boolean = True, _
                     Optional ByVal InCellHMarginPercentage As Single = 0, _
                     Optional ByVal InCellVMarginPercentage As Single = 0, _
                     Optional ByVal Align As String = vbNullString, _
                     Optional ByVal ResizeRatio As Single = 1, _
                     Optional ByVal DeleteSourceImage As Boolean = False) As String
 

Pièces jointes

  • VBA Ajouter Insérer Importer une photo image dans une cellule ou une plage.xlsm
    51.5 KB · Affichages: 6

Dudu2

XLDnaute Barbatruc
Pour déclencher le chargement de l'image selon le contenu de la cellule, il n'y a pas de miracle.
- Soit tu fais un bouton.
- Soit tu gères un évènement comme Worksheet_Change() sur le Range des noms d'images. Et encore je suis pas sûr que ça fonctionne si le Change est via la formule.
Edit: en fait non, après test, ça marche pas. Donc sur Worksheet_SelectionChange() si ça fait sens.
Ne pas oublier de supprimer l'image précédente si elle existe.
 
Dernière édition:

PoloTaz67

XLDnaute Junior
Pour déclencher le chargement de l'image selon le contenu de la cellule, il n'y a pas de miracle.
- Soit tu fais un bouton.
- Soit tu gères un évènement comme Worksheet_Change() sur le Range des noms d'images. Et encore je suis pas sûr que ça fonctionne si le Change est via la formule.
Edit: en fait non, après test, ça marche pas. Donc sur Worksheet_SelectionChange() si ça fait sens.
Ne pas oublier de supprimer l'image précédente si elle existe.
Merci je vais essayer
Pas sur d'avoir tout compris dans le langage Range etc
 

Dudu2

XLDnaute Barbatruc
En fait, puisque c'est en D3 que se trouve le nom, c'est juste D3 qu'il faut considérer.

Selon ce que j'ai compris de ton énoncé, je ferais un bouton qui:
1 - ferait un Calculate (équivalent de F9) pour changer d'image
2 - supprimerait l'image existante si présente
3 - irait chercher l'image à afficher
 

Discussions similaires

Réponses
6
Affichages
632

Statistiques des forums

Discussions
315 103
Messages
2 116 238
Membres
112 695
dernier inscrit
ben44115