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