macro calc: probleme de propriete de date

dans ce bout de code extrait de la page voir Dialog008
<http://christianwtd.free.fr/index.php?rubrique=BasDialog06>

' date inscrite
        RetourDate = oPDialog.getControl("DateField1").getDate
        '
        ' ...
        '
        ' Informations (simplistes !)
        MsgBox("Nom:" & Nom & " - Prénom:" & Prenom & Chr(13) & "Catégorie:"
& NomCategorie & Chr(13) & "Date validité:" & RetourDate )
     
a la fin de l'execution de la macro, j'ai l'erreur:
"Erreur d'exécution BASIC.
Valeur de propriété incorrecte."

si j'efface:
"Date validité:" & RetourDate

et execute de nouveau la macro, il n'y a plus de pb. RetourDate attend-il
qlq chose d'equivalent a Chr, mais quoi? est ce en relation avec l'evolution
de Calc exprimee ici
precedent post
<http://nabble.documentfoundation.org/resolu-macro-sous-calc-erreur-que-je-ne-comprends-pas-CDateToIso-td4214058.html>

merci

Re,

        RetourDate = oPDialog.getControl("DateField1").getDate
        '
        ' ...
        '
        ' Informations (simplistes !)
        MsgBox("Nom:" & Nom & " - Prénom:" & Prenom & Chr(13) & "Catégorie:"
& NomCategorie & Chr(13) & "Date validité:" & RetourDate )

a la fin de l'execution de la macro, j'ai l'erreur:
"Erreur d'exécution BASIC.
Valeur de propriété incorrecte."

si j'efface:
"Date validité:" & RetourDate

et execute de nouveau la macro, il n'y a plus de pb. RetourDate attend-il
qlq chose d'equivalent a Chr, mais quoi? est ce en relation avec l'evolution
de Calc exprimee ici
precedent post
<http://nabble.documentfoundation.org/resolu-macro-sous-calc-erreur-que-je-ne-comprends-pas-CDateToIso-td4214058.html>

ben oui :,(

Comme indiqué dans l'autre fil, les contrôles DateField utilisent des structures com.sun.star.util.Date depuis LO v.4.1.1 (voir les notes de version citées plus bas).

DateField.getDate retourne donc une structure com.sun.star.util.Date. Du coup, l'instruction
"Date validité:" & RetourDate
ne fonctionne pas puisque RetourDate ne contient pas une chaîne mais une structure qui ne peut pas être interprétée automatiquement en chaîne (voir la remarque plus bas).

-> Il faut convertir explicitement la structure de type com.sun.star.util.Date en chaîne. La fonction CDateFromUnoDate() est là pour ça (voir l'aide).

À propos de ces questions de dates, je vous conseille de lire :
https://wiki.documentfoundation.org/ReleaseNotes/4.1/fr#Changements_dans_l.27API
où ceci est précisé :

-8< ---------------------------------------------------
À partir de 4.1.1 core commit 43ea97e1f9cecd6c7cba8db35ce1307c858c6857:

-- service com.sun.star.awt.UnoControlDateFieldModel: propriétés Date, DateMin and DateMax changées en type com.sun.star.util.Date au lieu de long (integer).
-8< ---------------------------------------------------

Remarque : RetourDate n' "attend" rien.
Comme cette variable n'est pas déclarée dans le sous-programme, LibreOffice Basic la considère comme de type Variant (type fourre-tout).
C'est l'affectation
RetourDate = oPDialog.getControl("DateField1").getDate
qui lui donne son type réel lors de l'exécution (com.sun.star.util.Date).

Inversement, si RetourDate avait été déclarée comme String, c'est alors l'instruction
RetourDate = oPDialog.getControl("DateField1").getDate
qui aurait généré l'erreur.

Pour éviter tout problème de ce... type... je conseillerais donc :

1. De (toujours !) déclarer les variables.

Dim RetourDate As String

(avec l'option
Option Explicit
en tout début de module, on assure que le programme vérifiera que toutes les variables existent)

2. De transtyper

RetourDate = CDateFromUnoDate(oPDialog.getControl("DateField1").getDate)

Ce qui donnera le fonctionnement attendu.

Bien cordialement,

merci Jean-Francois pour cette reponse detaillee.

pour le neophyte que je suis, la note de la release 4.1.1 ne me cause pas, a
mon grand regret.
j'ai donc applique les 2 pts suggeres.

en rajoutant "Option Explicit ", j'ai du declare de nombreuses variables
qui, jusqu'a present ne le demandaient pas. pour certaines au pif: si ce
n'etait pas string, je mettais object. c'est donc en tatonnant que cette
macro fonctionne, sans grande fierte de ma part. je dois etre hermetique a
la programation.

auriez vous un site ou un pdf a jour a partager sur la programmation, niveau
debutant vers intermediaire?

cdlt,

david

Bonjour,

des ressources utiles ici https://wiki.documentfoundation.org/Macros/fr

LC

Bonjour,

-----Message d'origine-----
De : dvd69 [mailto:mensch69@hotmail.com]
Envoyé : mardi 9 mai 2017 14:29
À : users@fr.libreoffice.org
Objet : [fr-users] Re: macro calc: probleme de propriete de date

merci Jean-Francois pour cette reponse detaillee.

pour le neophyte que je suis, la note de la release 4.1.1 ne me cause pas,
a
mon grand regret.
j'ai donc applique les 2 pts suggeres.

en rajoutant "Option Explicit ", j'ai du declare de nombreuses variables
qui, jusqu'a present ne le demandaient pas. pour certaines au pif: si ce
n'etait pas string, je mettais object. c'est donc en tatonnant que cette
macro fonctionne, sans grande fierte de ma part. je dois etre hermetique a
la programation.

auriez vous un site ou un pdf a jour a partager sur la programmation,
niveau
debutant vers intermediaire?

Si vous devez faire régulièrement des macros, je vous conseille vivement le
livre suivant (mentionné dans le wiki) :
http://www.editions-eyrolles.com/Livre/9782212132472/programmation-openoffic
e-org-et-libreoffice

Cordialement,
Michel

Bonsoir David,

pour le neophyte que je suis, la note de la release 4.1.1 ne me cause pas, a
mon grand regret.
j'ai donc applique les 2 pts suggeres.

en rajoutant "Option Explicit ", j'ai du declare de nombreuses variables
qui, jusqu'a present ne le demandaient pas. pour certaines au pif: si ce
n'etait pas string, je mettais object.

Comme dit précédemment, Option Explicit impose de déclarer les variables. C'est une telle sécurité que je ne peux pas écrire une ligne de code sans cette option.

Attention aux types ! Dans le doute, mettez Variant, car c'est le type fourre-tout. Mais le mieux c'est de vraiment déclarer le type adapté à la donnée à stocker et à manipuler.

c'est donc en tatonnant que cette
macro fonctionne, sans grande fierte de ma part. je dois etre hermetique a
la programation.

il y a un début à tout... Nous avons tous commencé un jour sans rien y connaître. Et, pour ma part, je n'en connais probablement pas beaucoup plus aujourd'hui (des histoires d'aveugles et de borgnes, toussa).

Donc, courage ! Lire le code des autres est une très bonne école.

Et les forums et listes sont là pour aider et progresser.

auriez vous un site ou un pdf a jour a partager sur la programmation, niveau
debutant vers intermediaire?

1. Le Livre. LE Livre. ZE Book.

La référence que vous a indiquée Michel est la source *majeure* d'informations en français.

Attention : il me semble que ce livre est épuisé dans sa version papier. Mais la version électronique est toujours disponible. Si vous n'êtes pas accro au papier (bref, pas un "vieux" comme moi), cette version, outre qu'elle est moins chère a l'immense avantage de permettre la recherche plein texte. Et (à mon goût) l'immense inconvénient de ne pas pouvoir être transportée dans des lieux de méditation écartés :slight_smile: (à tempérer si vous avez une liseuse puisque la version électronique est livrée à la fois en PDF et en ePUB).

2. Si vous lisez l'anglais technique

Un autre livre, téléchargeable. Celui d'Andrew Pitonyak (aka OOME pour OpenOffice Macros Explained), présenté ici :
http://www.pitonyak.org/book/
et à télécharger là :
http://www.pitonyak.org/OOME_3_0.odt

Andrew a écrit un autre livre "Andrew Macros", moins structuré mais également plein d'infos :
http://www.pitonyak.org/AndrewMacro.pdf

Cet ouvrage est moins didactique que le premier cité mais il apporte souvent des éclairages différents.

Et le site d'Andrew recèle d'autres bijoux...

Bien cordialement,

merci pour vos conseils a la fois sur mon probleme et les lectures.

mon besoin de macro est unique. je n'irai donc pas investir dans l'ouvrage.
j'ai recupere le pdf de Pitonyak, le premier lien evoque par Jean-Francois.
je vais voir ce que je peux en tirer. j'en ferai probablement une impression
partielle parce que j'ai du mal avec la lecture virtuelle et probablement
que je n'ai pas besoin de tout. j'aime bien annoter mes lectures a la main.
je dois faire parti de la vieille generation (48 ans et j'ai connu l'encrier
a l'ecole, ca doit etre ca).

je vais donc voir si ma determination est la hauteur de ce pavé.