Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenOffice & LibreOffice Discussion :

Erreur d'accès DateField dans une Boîte Dialogue


Sujet :

OpenOffice & LibreOffice

  1. #1
    Candidat au Club
    Erreur d'accès DateField dans une Boîte Dialogue
    Bonjour à tous,

    J'utilise LibreOffice 6.4.3.2
    Je souhaite utiliser un champ DateField déroulant (calendrier) dans une boite de dialogue.
    Pour me familiariser avec ce champ, j'ai ouvert un nouveau fichier calc dans lequel j'ai créé le dialog et recopié le code de la FAQ :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    REM  *****  BASIC  *****
     
    '--- 
    'La boîte de dialogue est composée: 
    '  d'un objet CommandButton 
    '  d'un objet DateField (calendrier) dont le format d'affichage est JJ.MM.AAAA, 
    '  et d'une propriété "déroulante" = oui. 
    '--- 
     
    Option Explicit 
     
    Global oDialog1 As Object 
     
    Sub AfficheBoiteDeDialogue() 
      DialogLibraries.LoadLibrary( "Standard" ) 
      'Dialog1 est le nom de la Form  
      '(Clic droit sur l'objet / propriétés / onglet Général / Nom) 
      oDialog1 = CreateUnoDialog( DialogLibraries.Standard.Dialog1 ) 
     
      '--- Indique la date qui va s'afficher par défaut dans le contrôle "DateField1" 
      oDialog1.getControl("DateField1").Date = 20210131 'AAAAMMJJ 
     
      '--- Permet de définir une date mini et maxi utilisable dans le calendrier 
      oDialog1.getControl("DateField1").Model.DateMin = 20200101 
      oDialog1.getControl("DateField1").Model.DateMax = 20301231 
      '--- 
     
      'Affiche la boîte de dialogue 
      oDialog1.Execute() 
    End Sub


    À l'exécution, le code s'arrête sur :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    oDialog1.getControl("DateField1").Date = 20210131 'AAAAMMJJ


    Avec le message suivant : "Erreur d'exécution Basic. Variable d'objet non définie"

    Malgré mes recherches et divers essais, je tourne en rond et n'arrive pas à trouver ce qui cloche chez moi.
    Des idées ???
    Merci de votre aide.

  2. #2
    Membre habitué
    Erreur d'accès DateField dans une Boîte Dialogue
    Bonjour,
    Remplace
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    oDialog1.getControl("DateField1").Date = 20210131 'AAAAMMJJ


    par : (affichage de la date courante
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    oDialog1.getControl("DateField1").Date = CDateToUnoDate( Date )


    Pour les lignes :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    oDialog1.getControl("DateField1").Model.DateMin = 20200101 
      oDialog1.getControl("DateField1").Model.DateMax = 20301231


    Mieux vaut les commenter et plutôt modifier les propriétés directement dans la boite de dialogue. Personnellement je n'utilise pas ce forme de codage.

    J'ai oublié de préciser que le code exemple plutôt ancien est du code à la base pour open office. Mais avec libre office c'est différent depuis quelques années. c'est pour cela que çà ne fonctionne pas.
    LibreOffice 4.1.1 introduit une incompatibilité avec Apache OpenOffice et toutes les versions précédentes de LibreOffice.
    Signalé dans LibreOffice 4.1 ReleaseNotes.

    Contrôle DateField
    Les pseudo-propriétés Date, Min, Max, First, Last, deviennent une structure com.sun.star.util.Date au lieu d'un Long. De même dans le modèle du contrôle, pour les propriétés Date, DateMin, DateMax.
    Contrôle TimeField
    Les pseudo-propriétés Time, Min, Max, First, Last, deviennent une structure com.sun.star.util.Time au lieu d'un Long. De même dans le modèle du contrôle, pour les propriétés Time, TimeMin, TimeMax.
    Cordialement
    Libre Office Version: 6.3.4.2 (x64)
    Windows 10

  3. #3
    Candidat au Club
    Résolu
    Avec une simple recherche sur ce forum, je trouve toujours les réponses à mes questions sans avoir à les poser, grâce à la qualité des réponses des intervenants.
    J'en profite donc pour remercier la communauté.

    Sur ce sujet je n'avais rien trouvé, merci à toi Mobydick_62 pour la qualité de ta réponse.
    Du coup, ça me débloque, et à la lumière de ta réponse, je complète pour ceux que cela peut aider dans le cas ou l'on veut maintenant lire le contenu du DateField
    => À titre d'exemple pour LibreOffice, et dans le contexte de la FaQ du Datefield, remplacez la macro InsertionDate() par celle-ci
    (Si pas d'accord, Mobydick_62, n'hésite pas à corriger car je code en dilettante) :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    '--- La macro est rattachée au CommandButton de la boite de dialogue --- 
    'La date sélectionnée dans le DateField est affichée dans la messageBox 
    Sub InsertionDate() 
     
    Dim laDateLue As Date 
     
    laDateLue = CDateFromUnoDate(oDialog1.getControl("DateField1").Date)
     
    msgbox(laDateLue)
     
    End Sub


    Encore une fois merci à tous.

###raw>template_hook.ano_emploi###