Nous sommes le Mer 02 Juil, 2025 02:46
Supprimer les cookies

récupérer le contenu d'un champ date dans une cellule

Sur le logiciel libre en général ou un logiciel libre en particulier

Ven 18 Juil, 2008 16:36

open office 2.0 calc ou Staroffice 8 calc
Dans une plage de cellules j'ai créé des champs "date" au moyen de "contrôles de formulaires" avec un menu déroulant (calendrier). L' utilisateur pouvait donc saisir facilement une date. Je croyais à tort avoir affecté ainsi mes cellules, or elles sont considérées comme vides. Comment récupérer une date qui est affichée (donc le contenu du champ) dans cette cellule ou à la rigueur dans une autre ?
J'ai besoin de comptabiliser le nombre de dates affichées dans la plage.
guy62

Messages : 7

Dim 20 Juil, 2008 12:32

Ceci pourra peut-être te mener sur la voie du Ooo tout puissant (oups je m'égare)

http://217.64.100.68/Documents/AtelierPedagogique/Support_Cours/TableurOPenOffice/Lier_Controle_Formulaire_Cellule12fr.pdf
Amicalement,

Laurent
obor2

Messages : 524
Géo : belgique

Lun 21 Juil, 2008 14:06

Bonjour,
J'ai effectué toutes les opérations demandées explicitées dans le lien précédent et j'obtiens une erreur:
"Runtime error Basic
Propriété ou méthode introuvable"

à l'avant dernière ligne; "oSheet.getcellRangebyName(CelluleLiee).formula = oControl.SelectedItem"
avec en plus en bas à droite dans "Appels", 0:Liste_OnClick(oEvt=)
Pour rappel, la macro ci-dessous:
Sub Liste OnClick(oEvt as object)
'Le contrôle qui appelle la macro
oControl=oEvt.source

'Le Tag contient le "complément d'information" du contrôle
'Les 3 informations sont séparées par un ;
Separateur=";"
Arguments=split(oControl.model.tag,Separateur)
if ubound(Arguments)<2 then
print "Erreur =>Il doit y avoir 3 arguments dans <Complément d'informations>"
exit sub
endif
CelluleLiee=Arguments(0) 'Adresse de la cellule qui va recevoir le résultat
TypeAffichage=Arguments(1) 'Renvoie le N° (0) ou le texte(1) sélectionné
Feuille=Arguments(2) 'Indique la feuille qui va recevoir le résultat

'oSheet contient l'objet Feuille
oDocument=thisComponent
oSheet = oDocument.Sheets.getByName(Feuille)

'Affichage du résultat
if TypeAffichage="0" then
oSheet.getcellRangebyName(CelluleLiee).formula = oControl.SelectedItemPos+1
else
oSheet.getcellRangebyName(CelluleLiee).formula = oControl.SelectedItem
endif
End Sub
guy62

Messages : 7

Lun 21 Juil, 2008 15:56

Après avoir chipoté, c'est oControl.SelectedItem qui n'existe pas. Dans ton cas utilise oControl.text ou oControl.date (sans oublier de formater la cellule pour contenir/afficher un type date ;))

Malgré tout, ça voudra dire qu'il te faut deux zones de taille identique: une pour les contrôles et une pour les données cellules (à moins d'utiliser les mêmes pour les deux. je n'ai pas essayé). Et en plus, ça t'oblige de définir les paramètres de la macro pour chacun de tes contrôles. J'ai essayé de trouver un moyen pour obtenir la position d'un contrôle pour pouvoir définir la cellule cible directement; mais en vain; la documentation de OOo m'a littéralement abattu (j'émettrai bien une critique... m'enfin).

Un dernier conseil, je ne sais pas si tu es habitué à la programmation, mais bon, tu peux mettre des points d'arrêt avec l'outil de développement BASIC. Utilise dès lors les "***spam***" pour connaître le contenu d'une "variable".

Voilà, j'espère que ça a fait avancer un peu ton schilmblik.
Amicalement,

Laurent
obor2

Messages : 524
Géo : belgique

Lun 21 Juil, 2008 21:46

Bonsoir,
Ocontrol.text fonctionne bien, oControl.date donne une date bizarre du genre 16/08/-8961, seul le numéro du mois est correct.
Dans la même feuille j'ai 15 contrôles pour lesquels j'ai indiqué individuellement la cellule de destination, la macro fonctionne correctement même si la cellule de destination est la même que celui ou j'ai positionné le contrôle.
Par contre j'ai 30 feuilles quasiment identiques (correspondant à 30 personnes) et je comptais bien faire un copier/coller. Malheureusement cela ne fonctionne plus du tout. J'ai évidemment adapté la zone complément d'information.
Dans la macro le nom de la feuille est pourtant bien identifié ou alors un contrôle est dépendant de la feuille où il a été crée (cela n'apparaît pourtant pas dans ses propriétés) et ne peut donc être copié mais recréé dans la feuille suivante ?
J'oubliais, merci à vous pour l'aide que vous m'apportez.
guy62

Messages : 7

Lun 21 Juil, 2008 22:16

Rebonsoir,
Autant pour moi, je viens de réessayer et sans changer quoi que ce soit cela fonctionne (?). Il va maintenant falloir que je renseigne pour mes 15x30 = 450 contrôles les compléments d'information plus l'assignation de la macro. Ouille !
Si quelqu'un a un raccourci ...
guy62

Messages : 7

Mar 22 Juil, 2008 16:34

Bizarrement il y a un bug: toutes les dates affectées par le contrôle fonctionnent sauf celles du 1er de chaque mois où jour et mois sont inversés; ainsi le 01/09/08 donne 09/01/08. Pourquoi celles-là et pas les autres ?
guy62

Messages : 7

Dim 27 Juil, 2008 16:58

Me revoilà, sorry pour le retard ;)

Alors pour le problème date qui n'est plus une date mais qui devrait l'être.... j'embrouille les pistes... en réponse à ton dernier post donc.

La raison est que la date retenue par le contrôle est au format ISO. Donc la conversion par les routines de Calc s'emmêlent les pinceaux: pour certaines dates, elles croient avoir à faire à des chiffres, pour d'autre du texte, enfin bref c'est la pannade.

Pour palier à ce problème: il faut utiliser la fonction CDateFromIso() dans le code Basic. C'est à dire à la place de
Code: Tout sélectionner
oCell.formula = oControl.Model.Text
mettre
Code: Tout sélectionner
oCell.formula =  CDateFromIso( oControl.Model.Text )


Pour la manière de faire le copy/past sans avoir à changer chaque formulaire... Pas trouvé. J'ai cherché longtemps le moyen de savoir dans quelle cellules se trouve un contrôle pour systématiquement la mettre à jour avec le contenu du contrôle, comme ça pas de nécessité à mettre des paramètres à la macro; mais pas moyen ou alors, j'ai pas suivi les bonnes pistes.
Amicalement,

Laurent
obor2

Messages : 524
Géo : belgique

Lun 11 Août, 2008 10:52

Finalement j'ai abandonné: il me faudrait paramétrer 45 contrôles de formulaire par feuille et j'ai 30 feuilles ...
Un autre pb:
Sous openoffice/staroffice je voudrais protéger plusieurs feuilles (30) avec le même mdp. J'ai essayé avec "créer une macro" mais le mdp n'est pas enregistré avec la macro et à son lancement le mdp m'est demandé (2 fois) pour chaque feuille.
Y a-t-il une solution ?
guy62

Messages : 7

Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : Aucun utilisateur inscrit