Macro pour agrandir une image quand on clique dessus

Bonjour à tous,
Je recherche pour libre office calc un code macro afin d’agrandir une image lorsque je clique dessus, le but étant de pouvoir les laisser en miniatures lorsque je n’ai pas besoin de les voir.
J’ai un code qui rempli parfaitement cette fonction, mais il ne fonctionne que sous excel, alors si une bonne âme pouvait m’aider à le rendre compatible, ce serait très gentil.
D’avance merci
Ludo

Ci-dessous le code excel :

Private Sub Agrandir_image()
    ActiveSheet.Shapes.Range(Array(Application.Caller)).Select
    Selection.ShapeRange.ScaleHeight 2, msoFalse
    Selection.ShapeRange.ScaleWidth 2, msoFalse
    Selection.ShapeRange.ZOrder msoBringToFront
    Selection.OnAction = "Diminuer_image"
    ActiveSheet.Shapes(Application.Caller).TopLeftCell.Select
End Sub
Private Sub Diminuer_image()
    ActiveSheet.Shapes.Range(Array(Application.Caller)).Select
    Selection.ShapeRange.ScaleHeight 0.5, msoFalse
    Selection.ShapeRange.ScaleWidth 0.5, msoFalse
    Selection.ShapeRange.ZOrder msoSendToBack
    Selection.OnAction = "Agrandir_image"
End Sub
Sub initialiser()
    For Each Image In ActiveSheet.Shapes
    If Image.Type = msoPicture Or Image.Type = msoLinkedPicture Then
       Image.OnAction = "Agrandir_image"
    End If
    Next Image
End Sub

Génial Pierre-Yves, c’est exactement ce que je cherchais.
Cependant cette macro ne fonctionne que dans le fichier fourni.
Cela est sûrement dû à l’indication “com.sun.star.drawing.ShapeCollection”.
Serait-il possible de la modifier pour qu’elle fonctionne avec n’importe quel nouveau fichier créé dans lequel on insérerait juste des images classiques de type capture d’écran ?
Encore un grand merci
Ludo

@trychlo La macro fonctionne pour le classeur courant. Il faut la copier dans un autre classeur si on désire qu’elle y fonctionne. Il est possible d’avoir des macros “générales” en les stockant dans la bibliothèque Standard de LibreOffice. Je te le déconseille car cela rend la macro non “portable” sur un autre pc et cela risque d’être écrasé lors d’une mise à jour du logiciel.

La collection ShapeCollection n’a rien à voir avec ce problème je ne comprend pas pourquoi tu évoques cela ?

Je te rappelle par ailleurs ce qui était déjà indiqué dans ma réponse : il faut associer le déclenchement de la macro à l’événement “sélection modifiée” de la feuille concernée et protéger la position des images.

Cordialement

Bonjour

La programmation de ces objets est différente dans LibreOffice, on ne peut rendre compatible ce code et il faut le réécrire. Je te propose un exemple dans le classeur joint.

Plutôt que d’associer des “listeners” à chaque image le programme est déclenché lors de l’événement “sélection modifiée” de la feuille (clic droit sur l’onglet▸Évenements de la feuille).

Il faut alors “tester” l’événement pour ne réagir que si on a sélectionné une image. Si c’est le cas on compare sa taille par rapport à celle fixée en constante au début du programme.

  • Si elle est égale c’est qu’on doit agrandir et on la double (choix arbitraire modifiable naturellement).
  • Sinon c’est qu’on doit revenir à la taille initiale

Enfin, comme dans ton code, on place l’image “au-dessus” (nécessaire si l’agrandissement fait superposer plusieurs images).

Nota: le programme se déclenchant lors de la sélection de l’image il faut protéger la position de celle-ci pour éviter les déplacements non voulus lors du “zoom”.

Voir AgrandirImage.ods

Cordialement

Encore une fois parfait.
Mes yeux avaient bien lu le coup du clic droit sur l’événement de la feuille, puis sélection modifiée, mais mon cerveau a préféré en faire abstraction, n’en ayant absolument pas compris l’utilité.
Je viens donc de faire quelques recherches sur ce point précis, et effectivement c’est ok tout fonctionne.
Pour l’histoire du shapecollection, comme ça ne fonctionnait pas ailleurs que dans ta feuille, j’ai cru qu’il s’agissait du code d’une adresse internet inversée à partir de laquelle tu étais aller chercher tes images pour ton exemple, et qu’il fallait donc juste remplacer cette adresse par quelque chose du genre “C:\données\images…”
Oui je sais, c’est triste…
En tout cas un immense merci, et désolé pour le temps perdu.
Ludo