Macros
TDF LibreOffice Document Liberation Project Blogs communautaires Weblate Nextcloud Redmine Ask LibreOffice Donner
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).
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 :