Club SAS Québec Index du Forum Club SAS Québec
Le Club des utilisateurs SAS de la région de Québec
 
 FAQFAQ   RechercherRechercher   Liste des MembresListe des Membres   Groupes d'utilisateursGroupes d'utilisateurs 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

Un calendrier personnalisé

 
Poster un nouveau sujet   Répondre au sujet    Club SAS Québec Index du Forum -> Forum
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
lavm01



Inscrit le: 08 Mai 2007
Messages: 13

MessagePosté le: Mer, 14 Fév 2018 11:01    Sujet du message: Un calendrier personnalisé Répondre en citant

voici un petit calendrier personnalisé avec les jours de la semaine, les fins de semaine en couleur ainsi que les jours juliens.

Code:

 GOPTIONS RESET=ALL;
 *GOPTIONS DEVICE=HPGL4SI;
 GOPTIONS DEVICE=PNG;
 GOPTIONS NODISPLAY;

%INC 'Y:\DGI\PROD\PFC\PGMSAS\FERIE.SAS'; /* table des jours fériés */

PROC FORMAT;
   VALUE MOISFMT 1 = 'JANVIER'
                 2 = 'FEVRIER'
                 3 = 'MARS'
                 4 = 'AVRIL'
                 5 = 'MAI'
                 6 = 'JUIN'
                 7 = 'JUILLET'
                 8 = 'AOUT'
                 9 = 'SEPTEMBRE'
                10 = 'OCTOBRE'
                11 = 'NOVEMBRE'
                12 = 'DECEMBRE';
RUN;

%MACRO CAL(MOISDEB,ANDEB,MOISFIN,ANFIN);

DATA CALEND;
   LENGTH COLOR $8 TEXT $ 25 FUNCTION $ 8;

   RETAIN SEMPREV;

   FORMAT DTDEB DTFIN JRPRV DATE
          YYMMDD8.;

   XSYS = '5';
   YSYS = '5';

   DTDEB=%UNQUOTE(%QUOTE(%'01&MOISDEB&ANDEB%'D));
   DTFIN=%UNQUOTE(%QUOTE(%'01&MOISFIN&ANFIN%'D));

   ANDB=YEAR(DTDEB);
   ANFN=YEAR(DTFIN);

   MSDEB=MONTH(DTDEB);
   MSFIN=MONTH(DTFIN);

   DO ANNEE = ANDB TO ANFN;
      DO MOIS = MSDEB TO MSFIN;
         MS = PUT(MOIS,MOISFMT.) || ANNEE;
         COLOR = 'BLACK';
         SIZE = .;
         HSYS = ' ';
         POSITION = ' ';
         TEXT = ' ';

         DO Y = 0 TO 84 BY 14;
            X = 0;
            FUNCTION = 'MOVE';
            OUTPUT;
            LINE = 1;
            X = 96;
            FUNCTION = 'DRAW';
            OUTPUT;
         END;

         DO X = 0 TO 96  BY 12;
            Y = 0;
            FUNCTION = 'MOVE';
            OUTPUT;
            LINE = 1;
            Y = 90;
            FUNCTION = 'DRAW';
            OUTPUT;
         END;

         X = 11;
         Y = 0;
         FUNCTION = 'MOVE';
         OUTPUT;

         X = 11;
         Y = 90;
         LINE = 1;
         FUNCTION = 'DRAW';
         OUTPUT;

         X = 0;
         Y = 90;
         FUNCTION = 'MOVE';
         OUTPUT;

         X = 96;
         Y = 90;
         LINE = 1;
         FUNCTION = 'DRAW';
         OUTPUT;

         POSITION = '5';
         HSYS = '5';
         FUNCTION = 'LABEL';
         SIZE = 2.5;

         STYLE = 'ITALIC  ';
         X = 6 ; Y = 86; TEXT = 'SEMAINE'; OUTPUT;

         STYLE = 'COMPLEX';
         X = 18; Y = 86; TEXT = 'DIMANCHE'; OUTPUT;
         X = 30; Y = 86; TEXT = 'LUNDI'; OUTPUT;
         X = 42; Y = 86; TEXT = 'MARDI'; OUTPUT;
         X = 54; Y = 86; TEXT = 'MERCREDI'; OUTPUT;
         X = 66; Y = 86; TEXT = 'JEUDI'; OUTPUT;
         X = 78; Y = 86; TEXT = 'VENDREDI'; OUTPUT;
         X = 90; Y = 86; TEXT = 'SAMEDI'; OUTPUT;

         JRDEB = DAY(MDY(MOIS,01,ANNEE));
         JRPRV = INTNX('MONTH',MDY(MOIS,01,ANNEE),1);
         JRFIN = DAY(INTNX('DAY',JRPRV,-1));

         WEEK = 0;

         SEMPREV = 0;

         STYLE= 'ZAPF';
         SIZE = 4;
         COLOR = 'BLUE';
         X = 50;
         Y = 95;
         TEXT = MS;
         OUTPUT;

         DO JOUR = JRDEB TO JRFIN;
            DATE = MDY(MOIS,JOUR,ANNEE);
            SEMAINE = INTCK('WEEK',INTNX('YEAR',DATE,0),DATE) + 1;
            IF SEMAINE NE SEMPREV THEN
               DO;
                  WEEK + 1;
                  SEMPREV = SEMAINE;
               END;

            JRSEM = WEEKDAY(DATE);

            IF JRSEM = 1 OR JOUR = 1 THEN
               DO;
                  STYLE= 'CENTXE';
                  COLOR = 'BLUE';
                  SIZE = 6;
                  X = 6;
                  Y = 83 - (14 * WEEK) + 10;
                  TEXT = PUT(SEMAINE,2.);
                  OUTPUT;
               END;

            STYLE= 'COMPLEX';
            IF PUT(DATE,FERIEFMT.) = 'X' OR
               WEEKDAY(DATE) = 1 OR WEEKDAY(DATE) = 7 THEN
               COLOR = 'ORANGE';
            ELSE
               COLOR = 'BLACK';
            SIZE = 12;
            X = 12 * (JRSEM) + 7;
            Y = 85 - (14 * WEEK) + 10;
            TEXT = PUT(DAY(DATE),2.);
            OUTPUT;

            STYLE = 'SIMPLEX';
            SIZE = 4;
            COLOR = 'BLUE';
            X = 12 * (JRSEM) + 4;
            Y = 76 - (14 * WEEK) + 10.5;
            TEXT = PUT(SUBSTR(LEFT(JULDATE7(DATE)),5,3),3.);
            OUTPUT;
         END;
      END;
   END;
RUN;
PROC GANNO ANNOTATE=CALEND GOUT=GRAPCAL
   NAME = MS;
RUN;
QUIT;
%MEND CAL;
%CAL(JAN,2017,DEC,2017);
GOPTIONS DISPLAY;
*PROC GREPLAY;
RUN;


Voici le format de la table des jours fériés.

Code:

PROC FORMAT;
 VALUE FERIEFMT  '01JAN2014'D ,
                 '02JAN2014'D ,
                 '18APR2014'D ,
                 '21APR2014'D ,
                 '19MAY2014'D ,
                 '24JUN2014'D ,
                 '01JUL2014'D ,
                 '01SEP2014'D ,
                 '13OCT2014'D ,
                 '24DEC2014'D ,
                 '25DEC2014'D ,
                 '26DEC2014'D ,
                 '31DEC2014'D ,
                 '01JAN2015'D ,
                 '02JAN2015'D ,
                 '03APR2015'D ,
                 '06APR2015'D ,
                 '18MAY2015'D ,
                 '24JUN2015'D ,
                 '01JUL2015'D ,
                 '07SEP2015'D ,
                 '12OCT2015'D ,
                 '24DEC2015'D ,
                 '25DEC2015'D ,
                 '28DEC2015'D ,
                 '31DEC2015'D ,
                 '01JAN2016'D ,
                 '04JAN2016'D ,
                 '25MAR2016'D ,
                 '28MAR2016'D ,
                 '23MAY2016'D ,
                 '24JUN2016'D ,
                 '01JUL2016'D ,
                 '05SEP2016'D ,
                 '10OCT2016'D ,
                 '23DEC2016'D ,
                 '26DEC2016'D ,
                 '27DEC2016'D ,
                 '30DEC2016'D ,
                 '02JAN2017'D ,
                 '03JAN2017'D ,
                 '14APR2017'D ,
                 '17APR2017'D ,
                 '22MAY2017'D ,
                 '23JUN2017'D ,
                 '30JUN2017'D ,
                 '04SEP2017'D ,
                 '09OCT2017'D ,
                 '22DEC2017'D ,
                 '25DEC2017'D ,
                 '26DEC2017'D ,
                 '29DEC2017'D ,
                 '01JAN2018'D ,
                 '02JAN2018'D ,
                 '30MAR2018'D ,
                 '02APR2018'D ,
                 '21MAY2018'D ,
                 '25JUN2018'D ,
                 '02JUL2018'D ,
                 '03SEP2018'D ,
                 '08OCT2018'D ,
                 '24DEC2018'D ,
                 '25DEC2018'D ,
                 '26DEC2018'D ,
                 '31DEC2018'D ,
                 '01JAN2019'D ,
                 '02JAN2019'D  = 'X'
                         OTHER = ' ' ;
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Club SAS Québec Index du Forum -> Forum Toutes les heures sont au format GMT - 4 Heures
Page 1 sur 1

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com