[Calc] Afficher ou non une liste via une case à cocher

Vos meilleures macros et portions de code sont publiées dans cette section.
Aucun support sur une question de programmation ici !

Modérateur : Vilains modOOs

Règles du forum
Aucune question dans cette section !
Celle-ci rassemble les meilleures macros et portions de code. Vous pouvez en revanche commenter ou argumenter le code exposé. Vous pouvez même remercier l'auteur (cela fait toujours plaisir) en indiquant par exemple dans quel cadre ou contexte vous en avez eu l'utilité.
Si vous avez à poster quelque chose, faites-le depuis la section Macros et API et demandez à un modérateur de l'y déplacer.
ThierryM
Membre enthOOusiaste
Membre enthOOusiaste
Messages : 437
Inscription : 26 nov. 2006 11:29
Localisation : Les Corbières

[Calc] Afficher ou non une liste via une case à cocher

Message par ThierryM »

Bonjour,

Afficher/masquer une liste déroulante via une case à cocher

Même si l'auteur initial du fil [Calc] Fonction SI en macro: http://user.services.openoffice.org/fr/ ... 34#p119934 semble ne plus en avoir besoin...

Voici un code fonctionnel commenté qui permet d'afficher ou de masquer une liste déroulante dans une cellule à partir d'une case à cocher dans une feuille de classeur.

Pour avoir de plus amples infos sur les différentes propriétés à utiliser si l'on veut créer une liste déroulante par macro, allez consulter le fil suivant (en anglais) :
http://www.oooforum.org/forum/viewtopic.phtml?t=59114
Ci-joint le fichier exemple.

Code : Tout sélectionner

REM  *****  BASIC  *****
Option Explicit 'Déclaration préalable des variables utilisées dans le code OBLIGATOIRE (limite les erreurs)

'Déclaration des variables
Dim monDocument as Object, lesFeuilles as Object, maFeuille as Object
Dim monControleur as Object, maCase as Object, maCellule as Object, maCelluleListe as Object

'Allez voir le lien ci-dessous pour avoir des infos sur la propriété "validité" d'une cellule :
'http://www.oooforum.org/forum/viewtopic.phtml?t=59114

Sub AfficherMasquerListe
'Macro à associer à l'événement "Statut modifié" de la case à cocher
 MonDocument=thisComponent
 monControleur=monDocument.getCurrentController
 maFeuille=monControleur.ActiveSheet 'Feuille active
 maCellule=maFeuille.getCellRangeByName("A1") 'Cellule dans laquelle je veux afficher ou masquer la liste déroulante
 'Pour info, la case à cocher appartient à un objet formulaire Form(0) qui lui même est contenu dans une page de dessin Drawpages(0)
 maCase=monDocument.Drawpages(0).Forms(0).getByName("Case1") 'la case à cocher qui déclenche l'affichage ou le masquage
 maCelluleListe=maCellule.validation 'Propriéte de la cellule permettant de lui adjoindre une liste déroulante, des règles de validité...
 
 'Cas où la cellule n'aurait pas de liste déroulante et où on voudrait la créer par macro
 'Dans ce cas, enlever les apostrophes (décommenter) au début des 2 lignes suivantes pour rendre le code actif
 'maCelluleListe.Type = com.sun.star.sheet.ValidationType.LIST 'liste déroulante pour cette cellule
 'maCelluleListe.Formula1 = "Pomme;Pêche;Poire" 'affecte la liste des valeurs à mettre dans la liste déroulante
 
 If maCase.State Then
 	'Cas où la case est cochée (maCase.State=1)
 	'Activer ma liste déroulante
 	msgbox "Liste affichée"
	maCelluleListe.ShowList = 1
 	Else
 	'Cas où la case n'est pas cochée (maCase.State=0)
 	'Masquer la liste déroulante
 	msgbox "Liste masquée"
 	'attention cela ne supprime pas la liste déroulante !
 	maCelluleListe.ShowList = 0
 End If
 maCellule.Validation = maCelluleListe 'attribue la nouvelle propriété à la cellule
End Sub
En espérant que ça puisse servir.
Cordialement,

Thierry
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice Version: 7.6.2 / Linux Mint Mate Edition 21.2 / Pourquoi privilégier les formats de fichiers ouverts ?