Image résulta d'une cellule

feuille1 qui contient deux images, un chat et un chien, en A1 et A2
en feuilles2 j’ai la cellule A1 qui génère des nombres aléatoires entre 1 et 10
avec le résulta de cette cellule A1 dans la feuille2, je voudrais afficher les images contenues en feuille1
si le résulta et 1, l’image du chat s’affiche dans la feuille2
si le résulta et 2, l’image du chien s’affiche dans la feuille2
si le résulta et de 3 à 10 ne pas afficher d’images

À mon avis, il sera nécessaire de passer par des macros.

Voici un exemple qui fonctionne :

  • J’ai deux feuilles : “Feuille1” et “Feuille2”
  • Sur la Feuille1, j’ai 3 images : “imgCat”, “imgDog” et “imgUnknown”
  • Sur la Feuille2, j’ai une image : “imgResult” et une formule dans la cellule [0;0] =ALEA.ENTRE.BORNES(1;10)

J’ai ensuite ajouté les macros suivantes :

' ******************************  BASIC
OPTION EXPLICIT

' ******************************  DECLARATIONS
' Emplacement de la cellule contenant la valeur à vérifier
Global Const RAND_NUMBER_COL As Integer = 0
Global Const RAND_NUMBER_ROW As Integer = 0

' Nom de la feuille contenant les images
Global Const IMAGES_SHEET As String = "Feuille1"
Global Const RESULT_SHEET As String = "Feuille2"

' Nom des images
Global Const IMAGE_CAT     As String = "imgCat"
Global Const IMAGE_DOG     As String = "imgDog"
Global Const IMAGE_UNKNOWN As String = "imgUnknown"
Global Const IMAGE_RESULT  As String = "imgResult"

' La feuille contenant les images stockées
Global oDrawPageImage As Object

' La feuille affichant le résultat
Global oDrawPageResult As Object

' Les images
Global oImgCat     As Object
Global oImgDog   As Object
Global oImgUnknown As Object
Global oImgResult As Object

' ******************************  OUVERTURE DU DOCUMENT
' Récupération des images uniquement à l'ouverture du fichier
'
' Outils → Macros → Gérer les macros → Basic...
' Sélectionner 'Main' et l'assigner à l'événement [Ouvrir le document]
Sub main
	Dim x
	
	' On récupère les feuilles dessinées, pour avoir accès aux images
	oDrawPageResult = ThisComponent.getSheets().getByName(RESULT_SHEET).getDrawPage()
	oDrawPageImage  = ThisComponent.getSheets().getByName(IMAGES_SHEET).getDrawPage()

	' On parcour tous les éléments dessinés, à la recherche du nom de chaque image
	' Chaque image sera stockée dans une variable qui sera réutilisée plus tard
	for x = 0 to (oDrawPageImage.Count - 1)
		If oDrawPageImage.getByIndex(x).Name = IMAGE_CAT     Then oImgCat     = oDrawPageImage.getByIndex(x)
		If oDrawPageImage.getByIndex(x).Name = IMAGE_DOG     Then oImgDog   = oDrawPageImage.getByIndex(x)
		If oDrawPageImage.getByIndex(x).Name = IMAGE_UNKNOWN Then oImgUnknown = oDrawPageImage.getByIndex(x)
	Next x
	
	' On fait de même pour la deuxième page (la ou sera affiché l'image du résultat)
	for x = 0 to (oDrawPageResult.Count - 1)
		If oDrawPageResult.getByIndex(x).Name = IMAGE_RESULT Then oImgResult = oDrawPageResult.getByIndex(x)
	Next x
		
End Sub


' ******************************  LORS DU CHANGEMENT DE LA VALEUR
' Attribuer une nouvelle valeur à l'image "résultat" suivant la valeur du nombre
'
' Clic-droit sur le titre de la feuille2
' Événements de la feuille... → Formules calculées → Assigner Macro... → "onFormulasCalculation"
Sub onFormulasCalculation
	Dim iNumber 

	' Récupération de la nouvelle valeur aléatoire
	iNumber = ThisComponent.getSheets().getByName(RESULT_SHEET).getCellByPosition(RAND_NUMBER_COL,RAND_NUMBER_ROW).Value
	
	' On peut demander de rendre visible/invisible l'image du résultat ou afficher une autre image
	oImgResult.Visible = 1
	Select Case iNumber
	    case 1 'Si la valeur=1, on affiche l'image "imgCat"
			oImgResult.GraphicURL = oImgCat.GraphicURL
	    case 2
			oImgResult.GraphicURL = oImgDog.GraphicURL
	    case 8 to 10 'Si la valeur se trouve entre 8 et 10, on masque l'image
			oImgResult.Visible = 0
	    case else
	    	oImgResult.GraphicURL = oImgUnknown.GraphicURL
	End Select

End Sub

2021-10-14_17-58-22

j’ai pas vraiment compris , mais je sais que c’est la solution que je cherche , si vous pouvais m’expliquer plus , je suis novice