Allumer éteindre lampe (image clipart) en fonction d'un bouton (va et vient électrique)

Bonjour,

J’ai créé une feuille de calcul pour illustrer le fonctionnement d’un va et vient électrique

J’utilise actuellement une couleur d’arrière plan pour simuler l’allumage/l’extenction de la lampe.
Je voudrais savoir, si on pouvait utiliser une image clipart représentant une vraie lampe (clipart d’ampoule jaune/gris) à la place, pour une question de rendu.

Essai va et vient

Merci pour votre solution.

Avertissement

Ne serait-ce pas plus simple d’utiliser un logiciel approprié en électricité ou une simple animation vidéo, au lieu de jouer avec des macros Calc ? Il s’agit d’un tableur, pas d’un logiciel à tout faire.

Solution

L’avertissement étant fait, voici une solution de mon cru. J’ai laissé l’utilisation de la couleur pour montrer comment on aurait pu arriver au même résultat mais sans image et uniquement avec des couleurs.

L’algorithme de la macro est somme toute assez simple.

  1. J’ai créé 2 images: une ampoule allumée, une autre éteinte.
  2. Je les ai respectivement nommées « lamp_on » et « lamp_off ».
  3. Etant donné qu’on ne travaille qu’avec des images dans le conteneur drawPages, j’itère sur le conteneur jusqu’à trouver les index correspondant à mes images.
  4. Je récupère l’objet image basé sur ces index.
  5. J’alterne ensuite leur visibilité en fonction de l’appui sur le bouton.

NOTE sur la propriété Visibily: J’ignore si la visibilité est une fonctionnalité qu’on peut exploiter par le biais de l’interface graphique de LibreOffice. Lors du développement, il m’est arrivé que je n’arrivais plus à afficher l’image que j’avais masquée. J’ai donc dû la réafficher manuellement par le biais du code. Dans tous les cas, d’après l’inspecteur XRay, la propriété Visible existe bel et bien, pourquoi ne pas l’exploiter donc.

NOTE sur la fonction RGB: On dirait que la fonction RGB comporte un bogue. Malgré le fait que le premier argument devrait être le rouge, c’est en réalité le bleu qui est spécifié. S’agit-il d’un bug d’endianness? OpenOffice ayant été développé par Sun fonctionnait sur des processeurs SPARC (big endian), le fait d’exécuter LibreOffice sur un processeur Intel (little endian) pourrait expliquer le problème.

Code

public sub SetLight()
    dim cell
    cell = ThisComponent.Sheets(0).getCellRangeByName("I3")
    ' WTF red should have been the first argument.
    ' Seems like a bug with endianness
    if cell.CellBackColor = RGB(255,0,0) then
        cell.CellBackColor = RGB(0,255,0)
    else 
        cell.CellBackColor = RGB(255,0,0)
    endif

    ' Get draw page from sheet 1 (counting from 0)
    ' Each image are shared across pages, so having index 1
    ' or 0 doesn't change anything in the result.
    drawPage = ThisComponent.DrawPages.getByIndex(0)

    ' Images are typeof com.sun.star.drawing.GraphicObjectShape
    ' These can be explicitelly created with
    ' CreateUnoService("com.sun.star.drawing.GraphicObjectShape")
    dim lampOnImage
    dim lampOffImage
    
    dim i
    for i = 0 to drawPage.getCount() - 1
        pageItem = drawPage.getByIndex(i)
        if pageItem.Name = "lamp_on" then
            lampOnImage = pageItem
        endif
        if pageItem.Name = "lamp_off" then
            lampOffImage = pageItem
        endif
    next i
    
    ' Invert lamp image visibility
    if lampOnImage.Visible = false then
        lampOffImage.Visible = false
        lampOnImage.Visible = true
    else
        lampOffImage.Visible = true
        lampOnImage.Visible = false
    endif
    
    ' Enforce position
    lampOnImage.Position = cell.Position
    lampOffImage.Position = cell.Position

end sub

Fichier

Le fichier ODS contenant la macro

N’oubliez pas de marquer cette question comme résolu si elle résout totalement votre problème et de voter avec la flèche vers le haut (^) si cette réponse vous a aidé.

Si je puis me permettre … on croît rêver…
Utiliser les cellules de Calc pour dessiner, c’est tout de même très fort.
Mais lire « Il s’agit d’un tableur, pas d’un logiciel à tout faire », c’est encore plus fort !!!

Ça n’est pas que le code soit laid à lire ; c’est juste que c’est hallucinant de complexité pour une problématique d’enseignement qui est très simple…

Voilà, c’est tout nouveau, cela s’appelle LibreOffice et ça fait aussi logiciel de Présentation et même Dessin vectoriel. Donc à défaut de « tout faire », on peut même sortir de Calc

Allez, quatre diapos d’Impress, évidemment sans macro.

Dans ce genre de démonstration, il y a quatre positions simples. Donc on fait un graphique avec des objets de dessin et on copie la page quatre fois. Les objets sont donc copiés exactement à la même place.
Puis, on élimine les traits inutiles en fonction du cas. L’ampoule est choisie de même.

Pour chaque trait d’interrupteur, on clique droit dessus et on choisit « Interaction… » Et l’Action par clic de souris, c’est évidemment aller à la bonne diapo. Il y a huit traits à régler sur quatre diapos différentes ; ce n’est pas la mer à boire.

On lance le diaporama en plein écran pour faire plaisir aux zentilzélèves avec la touche [F5]. On en sort avec [Echap]
Il ne reste plus qu’à apprendre à se servir des objets de dessins vectoriel… Ou avec Impress pour présentation, ou avec Draw pour une destination plus « imprimée ». M’est avis que ce sera plus simple qu’avec Calc.

Enjoy !

:wink:

vaEtVientSansMacro.odp

@SébastienC Il va de soi que je n’aurai pas utilisé un classeur ce qui explique ma remarque un peu hautaine je l’accorde « Il s’agit d’un tableur, pas d’un logiciel à tout faire ». Mais c’était une demande de l’op (la personne qui a posé la question). Du coup, on s’exécute. Puis au moins, la macro ci-dessus pourra être utile à d’autres qui passeraient par là et qui chercheraient l’accès à la propriété de Visibilité. :slight_smile:

Bonsoir, je mets juste un lien vers une solution sans développer…
https://forum.openoffice.org/fr/forum/viewtopic.php?f=8&t=12699&p=72170#p72170
avec un fichier à charger.
https://forum.openoffice.org/fr/forum/download/file.php?id=2800

cdt

Régis