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
Cordialement,
Thierry