Macros

From The Document Foundation Wiki
< Macros‎ | Calc
Jump to: navigation, search

Comment lier une cellule à un contrôle Calendrier (champ de date) ?

Contrairement à d'autres types de contrôles (Zone de texte par exemple), on ne peut lier les contrôles Champs de date (calendrier) à une cellule.

Cet exemple a pour objet de montrer comment procéder par macro pour obtenir ce résultat.


Nous utiliserons la propriété Champ de données du contrôle (en principe prévue pour associer un champ d'une source de données) pour stocker la référence de la cellule, comme nous le ferions pour un autre type de contrôle.

Nota : il serait également possible d'utiliser la propriété Complément d'information (Tag).

copie d'écran classeur
Utiliser la propriété Champ de données pour stocker la référence de la cellule "cible"

La procédure suivante est associée à l'événement Texte modifié du contrôle. La variable LibOEvent est passée par l'événement ; elle permet de :

  • "remonter" à la propriété DataField contenant la référence à la cellule (sous forme de texte).
  • "remonter" à la propriété Text contenant la date (au format texte) affichée dans le contrôle après modification.
  • La propriété formulaLocal permet d'insérer la date au format local (jj/mm/aaaa par exemple en français)[1]; le texte affiché dans le calendrier étant dans ce format aucune conversion n'est nécessaire.


Pour prévenir d'éventuelles erreurs d'exécution, la procédure comprend une gestion d'erreurs, notamment pour le cas où la référence à la cellule a été mal saisie.

Sub LibODate(LibOEvent)
dim LibOFeuille as object
dim LibOCell as object

on error goto LibODate_Err

LibOFeuille = thiscomponent.currentController.activeSheet 
LibOCell = LibOFeuille.getCellRangeByName(LibOEvent.Source.Model.DataField)
LibOCell.formulaLocal = LibOEvent.source.Text

LibODate_Exit:
exit sub

LibODate_Err:
msgbox "Cellule cible (champ de données) incorrecte : " & LibOEvent.Source.Model.DataField, 16, "Saisie de date"
resume LibODate_Exit

End Sub

Notes :