Macros

    From The Document Foundation Wiki
    < Macros‎ | Calc


    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 :