[Résolu]recuperer le champ de date vers une cellule

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
klm
NOOuvel adepte
NOOuvel adepte
Messages : 21
Inscription : 31 mai 2007 07:58

[Résolu]recuperer le champ de date vers une cellule

Message par klm »

salut tout le monde!!!
je viens de faire une recherche assez longue mais je n'arrive pas a trouver comment faire pour recuperer la date de mon champ de date qui est dans une boite de dialogue que j'ai créé pour l'afficher dans une cellule de mon document calc.....

j'ai mi sous le champ de date un bouton OK et un bouton ANNULER, je pense donner comme fonction au bouton ANNULER uniquement la fermeture de ma boite de dialogue et au bouton OK la recuperation de ma donnée DATE et l'ecriture dans une cellule cible de clac....

merci. :lol:
Dernière modification par klm le 14 juin 2007 15:44, modifié 3 fois.
OOO 2.2
win xp
Avatar de l’utilisateur
Machine Head
Membre hOOnoraire
Membre hOOnoraire
Messages : 123
Inscription : 27 déc. 2005 13:08

Message par Machine Head »

Au même titre que les champ horaire, la récupération et l'utilisation d'une date entrée dans une boîte de dialogue est un peu plus complexe que pour un champ de type texte ou numérique.

Le champ de date retournant une valeur sous forme d'un entier Long genre 20070612 doit être convertie via une petite routine.

D'après le livre de BM et LG, voici la routine à insérer comme une simple macro:

Code : Tout sélectionner

' conversion du champ Date en année, mois, jour
Sub ChampDate_AMJ(champ As Long, _
           an As Integer, mois As Integer, jour As Integer)
Dim chaineDate As String

chaineDate = Str(champ)
an = CInt(Left(chaineDate, 5))
mois = CInt(Mid(chaineDate, 6, 2))
jour = CInt(Right(chaineDate, 2))
End Sub
Voici maintenant comment inscrire ta date dans la cellule A1 de ta feuille "Feuille 1":

Code : Tout sélectionner

Sub Main1()
Dim Dlg As Object, bibli As Object
Dim monDialogue As Object, exitOK As Integer
Dim champDate As Object, uneDate As Long
Dim a As Integer, m As Integer, j As Integer

exitOK = com.sun.star.ui.dialogs.ExecutableDialogResults.OK
bibli = DialogLibraries.GetByName("Date")
monDialogue = bibli.GetByName("Dialog1")
Dlg = CreateUnoDialog(monDialogue)
if Dlg.Execute = exitOK then
  champDate = Dlg.getControl("DateField1")
  uneDate = champDate.Date
  ChampDate_AMJ(uneDate, a, m, j)
  ThisComponent.Sheets.getbyName("Feuille1").GetCellRangeByName("A1").string = j & "/" & m & "/" & a 
end if
Dlg.Dispose
End Sub
N'oublie pas de changer le nom de la bibliothèque, du champ de date pour qu'ils correspondent à ton cas perso

Cordialement
Windows 7 64 Bits avec AOo 4.1.2
klm
NOOuvel adepte
NOOuvel adepte
Messages : 21
Inscription : 31 mai 2007 07:58

Message par klm »

j'ai essayé avec ce que tu viens de me donner mais je n'y arrive pas, j'ai toujours une erreur au niveau de

Code : Tout sélectionner

chaineDate = Str(champ)
ou il me dit que l'argument n'est pas optionnel je crois

j'ai alors essayé de me faire un code mais je tourne un peu en rond car la date s'affiche dans la cellule C3 mais c'est tjrs 0/0/00 quel que soit la date.....
je vous donne mon code si qqun peut me venir en aide, merci

Code : Tout sélectionner

Sub DemanderDate()
dim dlg as object, bibli as object
dim monDialogue as object, exitOK as string
dim champdate as object, dateISO as long, ladate as date
dim a as integer, m as integer, j as integer

exitOK = com.sun.star.ui.dialogs.ExecutableDialogResults.OK 
bibli = DialogLibraries.GetByName("Standard")
monDialogue = bibli.GetByName("Dialog1") 
Dlg = CreateUnoDialog(monDialogue)
if dlg.Execute = exitOK then
   
    champdate = dlg.getControl("datefield")
    dateISO = champdate.Date
    ladate = CDateFromISO(dateISO)
    ThisComponent.Sheets.getbyName("DEVIS").GetCellRangeByName("C3").string = j & "/" & m & "/" & a 
end if
dlg.dispose
end sub
merci
OOO 2.2
win xp
Philippe BRONCHART
Membre cOOnfirmé
Membre cOOnfirmé
Messages : 244
Inscription : 17 janv. 2007 19:18
Localisation : Lille(59) - Lesboeufs (80)

Message par Philippe BRONCHART »

Bonsoir

Pas bien compris le sens de la réponse de machine Head.

Si il faut simplement récupérer la valeur d'un champ date d'une boite de dialogue, moi je ferai :

Code : Tout sélectionner


Sub demanderDate()

Dim Dlg As Object, bibli As Object
Dim monDialogue As Object, exitOK As Integer
Dim champDate As Object, dateISO As Long

exitOK = com.sun.star.ui.dialogs.ExecutableDialogResults.OK
DialogLibraries.Loadlibrary("Standard")
bibli = DialogLibraries.GetByName("Standard")
monDialogue = bibli.GetByName("Dialog1")
Dlg = CreateUnoDialog(monDialogue)
if Dlg.Execute = exitOK then
  champDate = Dlg.getControl("DateField1")
  DateISO = champDate.Date
  laDate = CDateFromISO(dateISO)
 end if
Dlg.Dispose

End Sub
Sub ecriredate
DemanderDate ' on lance le calendrier
 MonDoc = ThisComponent 'Sélectionne le document en cours
 MaFeuille = MonDoc.CurrentController.ActiveSheet 'Attribue la feuille en cours à la variable
 oCurseur = MaFeuille.createCursor ' création du curseur
 MaFeuille.getCellByPosition(0,6).value = LaDate '0 = Valeur en A7
     
end sub
ce qui concrétement donne :
http://user.services.openoffice.org/fr/ ... 091935.ods

Ou la cellule A7 est formatée en date bien sur ...
Si j'ai loupé un épisode, merci de me le faire savoir ....
Amicalement Philippe BRONCHART

Win 10 Libre office 5.0 (perso)
klm
NOOuvel adepte
NOOuvel adepte
Messages : 21
Inscription : 31 mai 2007 07:58

Message par klm »

merci Philippe.
j'ai tout de meme reessayé avec le code de Machine Head(c'est un vieux groupe de rock francais ca non??) et avec qques modification en fait j'arrive au resultat avec un code un peu plus leger que le tien mais je ne sais pas si c'est bien orthodoxe!!!!!
je te le donne pour comparer et pour ceux qui feront des recherches plus tard:
j'ai une boite de dialogue contenant un champdate que je lance d'un bouton d'une feuille calc.la boite de dialogue a en plus un bouton OK et un ANNULER.la macro suivante est assigner au bontou de ma feuille calc SAISIE:

Code : Tout sélectionner

Sub DemanderDate()
dim dlg as object, bibli as object
dim monDialogue as object, exitOK as string
dim champdate as object, dateISO as long, ladate as date

exitOK = com.sun.star.ui.dialogs.ExecutableDialogResults.OK 
bibli = DialogLibraries.GetByName("Standard")'nom de la bibli ou se trouve la boite
monDialogue = bibli.GetByName("Dialog1") 'nom de la feuille de macro ou se trouve la boite
Dlg = CreateUnoDialog(monDialogue)
if dlg.Execute = exitOK then
   
    champdate = dlg.getControl("datefield")
    dateISO = champdate.Date
    ladate = CDateFromISO(dateISO)'conversion dateISO au format jj/mm/aaaa
    ThisComponent.Sheets.getbyName("DEVIS").GetCellRangeByName("D4").string = "Aix en Provence le" & ladate
    end if
dlg.dispose
end sub
ce qui me donne "Aix en provence le ../../...." dans la cellule D4 de ma feuille DEVIS quand j'appuie sur OK.
merci a tous! :lol:
OOO 2.2
win xp
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 08:42

Message par Pierre-Yves Samyn »

Bonjour

Juste pour information, puisque ton code répond parfaitement au besoin :
  • La solution de Philippe suppose que la cellule est formatée en date.
  • L'utilisation de la propriété string insère la date au format texte (ce qui, dans ton cas est ce que l'on veut puisque tu concatènes avec un texte)
  • Pour insérer une date au format "français" (jj/mm/aa) on peut utiliser la propriété formulaLocal. Il ne sera pas nécessaire de formater la cellule au format date au préalable.
Exemples :

Code : Tout sélectionner

ThisComponent.Sheets.getbyName("Feuille1").GetCellRangeByName("D4").string = "Aix en Provence le" & ladate   
    ThisComponent.Sheets.getbyName("Feuille1").GetCellRangeByName("D5").string = ladate   
    ThisComponent.Sheets.getbyName("Feuille1").GetCellRangeByName("D6").formulalocal = ladate   
klm
NOOuvel adepte
NOOuvel adepte
Messages : 21
Inscription : 31 mai 2007 07:58

Message par klm »

bon je viens de decouvrir un nouveau probleme, c'est que ma premiere sollicitation de ma macro apres l'ouverture du document se solde par une erreur sur la ligne:

Code : Tout sélectionner

dlg = CreateUnoDialog(monDialogue)
et l'erreur est: Action non supportée
Appel de procedure non valide

mais si je relance ensuite ma macro cela fonctionne tres bien....pensez vous qu'il y est un souci au chargement du document, et si oui comment faire?????

merci encore :lol:
OOO 2.2
win xp
Avatar de l’utilisateur
Bidouille
RespOOnsable forum
RespOOnsable forum
Messages : 12234
Inscription : 08 nov. 2005 16:23
Localisation : Caen, France

Message par Bidouille »

Bonjour,

Ce forum est avant tout une base de connaissances. Avant de poser une question, vous devez d'abord effectuer une recherche afin de voir si votre problème n'a pas déjà une solution. Il vous suffit d'utiliser le lien "Rechercher" indiqué en haut de la page.

Dans votre cas, votre problème a déjà fait l'objet de sujets.

En recherchant sur les termes :
action and support*
Vous obtenez :
http://user.services.openoffice.org/fr/ ... ction.html

A l'avenir, pensez à faire cette recherche vous-même. Vous gagnerez ainsi du temps puisque la réponse existe déjà.

Il semble que votre question ait trouvé une solution. Il est alors de bon ton d'ajouter dans le titre du premier message la balise [Résolu]. Ceci augmente la lisibilité du forum.

Merci de respecter la syntaxe [Résolu] : entre crochets, avec un R majuscule et un é

Suivez ce sujet pour savoir comment procéder : http://user.services.openoffice.org/fr/ ... c3299.html

Cordialement