[Résolu][Calc] Date pour une feuille par jour

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 !
Pierrot_Rennes
Membre lOOyal
Membre lOOyal
Messages : 38
Inscription : 09 sept. 2008 11:49

[Résolu][Calc] Date pour une feuille par jour

Message par Pierrot_Rennes »

Bonjour,

Toutes mes excuses si le titre n'est pas clair !!! :cry:

A partir d'une feuille Calc avec la date en entête, je construis un cahier avec une feuille par jour et la date correspondante
Actuellement, je change la date puis j'imprime la feuille et je fais cela à suivre pour les 30 ou 31 jours du mois

L'idée serait une macro avec un bouton qui me permette d'imprimer automatiquement les 30 ou 31 feuilles (suivant le mois) sans faire la manip autant de fois que de jour

N'étant pas top en macro, si quelqu'un à une idée ou une macro existante
Merci d'avance et joyeuses fêtes à tous
Pierre
Le Modérateur a écrit :Veuillez surtout respectez le balisage dans cette section et les règles d'écriture des titres.
Ancien titre : "CALC - MACRO DATE POUR UNE FEUILLE PAR JOUR"
Dernière modification par Pierrot_Rennes le 17 avr. 2010 17:59, modifié 3 fois.
LibreOffice 5.4.3.2 (x64)
Windows 10
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25181
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Date pour une feuille par jour

Message par Dude »

Salut,

Ton classeur contient les feuilles pour un seul mois ?
Pierrot_Rennes a écrit :L'idée serait une macro avec un bouton qui me permette d'imprimer automatiquement les 30 ou 31 feuilles (suivant le mois) sans faire la manip autant de fois que de jour
Si c'est le cas, je ne vois pas l'intérêt de faire une macro puisque la fonctionnalité existe. As-tu vérifié dans Outils > Options > OpenOffice.org Calc > Impression que la case "Imprimer uniquement les feuilles sélectionnées" soit décochée ?

:?:
Poser une question, c'est bien. Répondre aux autres, c'est encore mieux.
Améliorez AOO et votez pour les issues
Pierrot_Rennes
Membre lOOyal
Membre lOOyal
Messages : 38
Inscription : 09 sept. 2008 11:49

Re: [Calc] Date pour une feuille par jour

Message par Pierrot_Rennes »

Re :-))

Ben non... justement !!! je n'ai pas créé un classeur avec 31 feuilles

Ca obligerait à changer la date sur chaque feuille pour imprimer :(
(pour imprimer plusieurs feuilles en une fois, ok comme tu dis :D )

Donc une seule feuille et une macro qui sache fabriquer les 31 dates du mois (format : vendredi 25 décembre 2009 par exemple) et envoyer au fur et à mesure à l'imprimante

Peut-être est-ce impossible...

A suivre donc et merci d'avoir répondu
LibreOffice 5.4.3.2 (x64)
Windows 10
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25181
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Date pour une feuille par jour

Message par Dude »

tu fais une boucle qui imprime ta feuille n fois et qui change l'entête avec la date concernée. Tu as ce sujet passé il y a quelques jours qui en montre le principe : http://user.services.openoffice.org/fr/ ... 19904.html

8)
Poser une question, c'est bien. Répondre aux autres, c'est encore mieux.
Améliorez AOO et votez pour les issues
Pierrot_Rennes
Membre lOOyal
Membre lOOyal
Messages : 38
Inscription : 09 sept. 2008 11:49

Re: [Calc] Date pour une feuille par jour

Message par Pierrot_Rennes »

Bonsoir,

Effectivement, j'ai testé et vu le résultat mais je pensais pas à cela
(où alors je n'ai pas compris !!!)

En pièce jointe, ma feuille de calcul (anonymisée) à partir de laquelle je veux construire automatiquement un cahier de 30 ou 31 jours à imprimer avec une date différente en entête

A moins, que par boucle, tu évoques une macro ou automatisation mais là je ne vois pas
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 5.4.3.2 (x64)
Windows 10
Avatar de l’utilisateur
Sébastien C
Membre hOOnoraire
Membre hOOnoraire
Messages : 157
Inscription : 28 avr. 2008 23:21
Localisation : Meymac (19250)

Re: [Calc] Date pour une feuille par jour

Message par Sébastien C »

Ceci pourrait peut-être faire figure de solution ?
Feuilles avec dates.ods

Code : Tout sélectionner

' Abracadabra
 Sub abracadabra()
  dim monDoc, lesFeuilles, maFeuille, maCellule As object
  dim               jour, mois, annee , nbJours As Integer

  monDoc = thisComponent : lesFeuilles = monDoc.Sheets

  maFeuille = lesFeuilles.getByName("Abracadabra")
  maCellule = maFeuille.getCellRangeByName("C6") :  mois = maCellule.value
  maCellule = maFeuille.getCellRangeByName("C7") : annee = maCellule.value

  ' Détermination du nombre de jours selon les mois
  if (mois = 1) or (mois = 3) or (mois = 5) or (mois = 7) or (mois = 8) or (mois = 10) or (mois = 12) then nbJours = 31
  if                                            (mois = 4) or (mois = 6) or (mois = 9) or (mois = 11) then nbJours = 30
  if                                                 ((mois = 2) and ((annee / 4) =  int(annee / 4))) then nbJours = 29
  if                                                 ((mois = 2) and ((annee / 4) <> int(annee / 4))) then nbJours = 28
 
  ' Création des feuilles à partir de la première et remplissage de la cellule A2 de chaques feuille.
  for jour = 1 to nbJours
   if (jour > 1) then  lesFeuilles.copyByName("1", ltrim(str(jour)), (LesFeuilles.Count + 1))
         maFeuille = lesFeuilles.getByName(ltrim(str(jour)))
         maCellule = maFeuille.getCellRangeByName("A2")
   maCellule.value = DateSerial(annee, mois, jour)
  next jour
 End Sub
8)
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 3.5.3.2 sous GNU-Linux Mageia 2.
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25181
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Date pour une feuille par jour

Message par Dude »

Ci-dessous une légère amélioration pour obtenir le nombre de jours sur le mois

Code : Tout sélectionner

Sub abracadabra()
 dim monDoc, lesFeuilles, maFeuille, maCellule As object
 dim               jour, mois, annee , nbJours As Integer

 monDoc = thisComponent : lesFeuilles = monDoc.Sheets

 maFeuille = lesFeuilles.getByName("Abracadabra")
 maCellule = maFeuille.getCellRangeByName("C6") :  mois = maCellule.value
 maCellule = maFeuille.getCellRangeByName("C7") : annee = maCellule.value

 ' Détermination du nombre de jours selon les mois
' if (mois = 1) or (mois = 3) or (mois = 5) or (mois = 7) or (mois = 8) or (mois = 10) or (mois = 12) then nbJours = 31
' if                                            (mois = 4) or (mois = 6) or (mois = 9) or (mois = 11) then nbJours = 30
' if                                                 ((mois = 2) and ((annee / 4) =  int(annee / 4))) then nbJours = 29
' if                                                 ((mois = 2) and ((annee / 4) <> int(annee / 4))) then nbJours = 28

oDate = "1/" & mois & "/" & annee
FA = createunoservice("com.sun.star.sheet.FunctionAccess")
fDate = FA.callFunction("com.sun.star.sheet.addin.Analysis.getEoMonth", array(oDate,0))
nbJours = FA.callFunction("DAY", array(fDate))
 
 ' Création des feuilles à partir de la première et remplissage de la cellule A2 de chaques feuille.
 for jour = 1 to nbJours
  if (jour > 1) then  lesFeuilles.copyByName("1", ltrim(str(jour)), (LesFeuilles.Count + 1))
        maFeuille = lesFeuilles.getByName(ltrim(str(jour)))
        maCellule = maFeuille.getCellRangeByName("A2")
  maCellule.value = DateSerial(annee, mois, jour)
 next jour
End Sub
:idea:
Poser une question, c'est bien. Répondre aux autres, c'est encore mieux.
Améliorez AOO et votez pour les issues
Avatar de l’utilisateur
Sébastien C
Membre hOOnoraire
Membre hOOnoraire
Messages : 157
Inscription : 28 avr. 2008 23:21
Localisation : Meymac (19250)

Re: [Calc] Date pour une feuille par jour

Message par Sébastien C »

Yaisse !

C’est nettement plus élégant que mon énumération d’expressions conditionnelles !

Sans doute faut-il encore ajouter (pour la compréhension de ceux qui découvrent le langage) que la technique pour arriver à cette fin utilise, chez Dude, l’appel aux fonctions du tableur Calc. La technique est intéressante mais il faut encore comprendre que les fonctions du tableur appelées sont exprimées dans le code de Dude en anglais et qu’elles ont leur équivalent dans le tableur en français (On trouvera ici et des compléments pour la traduction). « getEoMonth » se dit donc « FIN.MOIS » et « DAY » se traduit par « JOUR ». Donc, pour plus de compréhension à la lecture des lignes de code de Dude, on pourra prendre le tableur Calc et considérer :
  • Soit trois cellules : A1, B1 et C1.
  • En A1, saisir une date quelconque.
  • Formater le type de la cellule B1 en date : Format -> Cellule -> Onglet Nombre -> Catégorie Date
    et saisir la formule : « =FIN.MOIS(A1; 0) » ; l’équivalent du code de Dude est :

    Code : Tout sélectionner

    FA.callFunction("com.sun.star.sheet.addin.Analysis.getEoMonth", array(oDate, 0))
  • en C1 saisir la formule : « =JOUR(B1) » ; l’équivalent du code de Dude est :

    Code : Tout sélectionner

    FA.callFunction("DAY", array(fDate))
Ceci pouvant servir en dehors de toute programmation par macro...
:D

[Edit du 27/12/09]
Dans un post tout récent, gerard24 me fait connaître la fonction JOURSDANSMOIS qui se traduit en anglais GETDAYSINMONTH. Après une petite recherche sur le Web pour en connaitre l’accès, les quatre lignes de code de Dude peuvent donc se réduire à deux soit :

Code : Tout sélectionner

FA = createunoservice("com.sun.star.sheet.FunctionAccess")
 nbJours = FA.callFunction("com.sun.star.sheet.addin.DateFunctions.getDaysInMonth", array("1/" & mois & "/" & annee))
:D
LibreOffice 3.5.3.2 sous GNU-Linux Mageia 2.
Avatar de l’utilisateur
Bidouille
RespOOnsable forum
RespOOnsable forum
Messages : 12228
Inscription : 08 nov. 2005 16:23
Localisation : Caen, France

Re: [Calc] Date pour une feuille par jour

Message par Bidouille »

Merci pour ces excellentes réponses.

Il est quand même regrettable que l'auteur n'en fasse pas de même malgré ses nombreuses apparitions.
Dernière visite: 30 Déc 2009 15:47
:evil: