IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macro Discussion :

Macro qui refuse ces parametres


Sujet :

Macro

  1. #1
    Inactif  

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    3 064
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 064
    Points : 4 605
    Points
    4 605
    Par défaut Macro qui refuse ces parametres
    Bonjour,

    J'ai le code suivant d'une macro qui refuse de s’exécuter :

    Code sas : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    data _null_;
    	call symputx("month",month(today()));
    	call symputx("year",year(today()));
    	call symputx("day",day(today()));
    run;
     
    /* %put &month &year &day; export au format xlsx */
     
    %expxlsxdate('\\monserveur\sous dossier\' , &year , &month , &day , 'xlsx' , refec9 , 'mafeuille');

    Voici le message d'erreur :

    Code log sas : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    WARNING: Apparent invocation of macro EXPXLSXDATE not resolved.
    SYMBOLGEN:  Macro variable YEAR resolves to 2017
    SYMBOLGEN:  Macro variable MONTH resolves to 11
    SYMBOLGEN:  Macro variable DAY resolves to 22
    24         %expxlsxdate('\\monserveur\sous dossier\' , &year , &month , &day , 'xlsx' , refec9 , 'mafeuille');
               _
               180
     
    ERROR 180-322: Statement is not valid or it is used out of proper order.

    La macro sas :

    Code macro sas : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    %macro expxlsxdate(file , annee , mois , jour , extension , table , nom_feuille);
     
    proc export data=work.&table outfile=&file&annee&mois&jour&.'.'extension dbms=&extension replace;
    sheet=&nom_feuille;
    run;
     
    %mend;


    Jusqu’à preuve du contraire l'appel d'une macro se fait toujours par % . Ou celui qui a coder le message d'erreur est un charlot ou alors il prend les gens pour des cons !

    Depuis quand une macro ne s'appelle plus de la sorte dans sas ???

  2. #2
    Membre expérimenté
    Inscrit en
    Novembre 2009
    Messages
    703
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 703
    Points : 1 311
    Points
    1 311
    Par défaut Macro qui refuse ces paramètres
    Bonjour,

    Apparemment ce message d'erreur est souvent lié à un problème de point virgule manquant quelque part, voir ici.

    Vous pouvez essayer de tester la macro dans une nouvelle session SAS.

    Cordialement,

  3. #3
    Inactif  

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    3 064
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 064
    Points : 4 605
    Points
    4 605
    Par défaut
    Bonjour,

    @mgdondon : j'ai tout recodé et tout recontrôlé les points virgules . Pas d'anomalie par ici

    Je viens de tout recoder . SAS continue dans son délire ... :

    Code sas : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    data _null_;
    	call symputx("month",month(today()));
    	call symputx("year",year(today()));
    	call symputx("day",day(today()));
    	call symputx("lien",'\monserveur\sousdossier\');
    	call symputx("extension",'.xlsx');
    	call symputx("format",'XLSX');
    	call symputx("feuille",'mafeuille');
    	call symputx("quote",'"');
    run;
     
    %put &month &year &day &lien &extension &format &feuille &quote ;
     
    /*  export au format xlsx */
     
    %expxlsxdate( &lien , &year , &month , &day , &extension , &format , refec9 , &feuille , &quote );

    Les logs SAS :

    Code log sas : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    NOTE: Writing TAGSETS.SASREPORT13(EGSR) Body file: EGSR
    22         
    23         GOPTIONS ACCESSIBLE;
    24         data _null_;
    25         	call symputx("month",month(today()));
    26         	call symputx("year",year(today()));
    27         	call symputx("day",day(today()));
    28         	call symputx("lien",'\\monserveur\sousdossier\');
    29         	call symputx("extension",'.xlsx');
    30         	call symputx("format",'XLSX');
    31         	call symputx("feuille",'mafeuille');
    32         	call symputx("quote",'"');
    33         run;
     
    NOTE: DATA statement used (Total process time):
          real time           0.00 seconds
          cpu time            0.00 seconds
     
     
    34         
    35         %put &month &year &day &lien &extension &format &feuille &quote ;
    SYMBOLGEN:  Macro variable MONTH resolves to 11
    SYMBOLGEN:  Macro variable YEAR resolves to 2017
    SYMBOLGEN:  Macro variable DAY resolves to 22
    SYMBOLGEN:  Macro variable LIEN resolves to \\monserveur\sousdossier\
    SYMBOLGEN:  Macro variable EXTENSION resolves to .xlsx
    SYMBOLGEN:  Macro variable FORMAT resolves to XLSX
    SYMBOLGEN:  Macro variable FEUILLE resolves to mafeuille
    SYMBOLGEN:  Macro variable QUOTE resolves to "
    36         
    37         /*  export au format xlsx */
    38         
    39         %expxlsxdate( &lien , &year , &month , &day , &extension , &format , refec9 , &feuille , &quote );
    SYMBOLGEN:  Macro variable LIEN resolves to \\monserveur\sousdossier\
    SYMBOLGEN:  Macro variable YEAR resolves to 2017
    SYMBOLGEN:  Macro variable MONTH resolves to 11
    2                                                          The SAS System                         08:58 Wednesday, November 22, 2017
     
    SYMBOLGEN:  Macro variable DAY resolves to 22
    SYMBOLGEN:  Macro variable EXTENSION resolves to .xlsx
    SYMBOLGEN:  Macro variable FORMAT resolves to XLSX
    SYMBOLGEN:  Macro variable FEUILLE resolves to mafeuille
    SYMBOLGEN:  Macro variable QUOTE resolves to "
    SYMBOLGEN:  Macro variable TABLE resolves to refec9
    SYMBOLGEN:  Macro variable QUOTE resolves to "
    SYMBOLGEN:  Macro variable FILE resolves to \\monserveur\sousdossier\
    SYMBOLGEN:  Macro variable ANNEE resolves to 2017
    SYMBOLGEN:  Macro variable MOIS resolves to 11
    SYMBOLGEN:  Macro variable JOUR resolves to 22
    SYMBOLGEN:  Macro variable EXTENSION resolves to .xlsx
    SYMBOLGEN:  Macro variable QUOTE resolves to "
    SYMBOLGEN:  Macro variable FORMAT resolves to XLSX
    SYMBOLGEN:  Macro variable NOM_FEUILLE resolves to mafeuille
    40         
    41         GOPTIONS NOACCESSIBLE;
    42         %LET _CLIENTTASKLABEL=;
    ERROR: Open code statement recursion detected.
    43         %LET _CLIENTPROJECTPATH=;
    ERROR: Open code statement recursion detected.
    44         %LET _CLIENTPROJECTNAME=;
    ERROR: Open code statement recursion detected.
    45         %LET _SASPROGRAMFILE=;
    ERROR: Open code statement recursion detected.
    46         
    47         ;*';*";*/;quit;run;
    11 2017 22 \\monserveur\sousdossier\ .xlsx XLSX mafeuille " ;/*  export au format xlsx */proc export data=work.refec9 
    outfile="\\monserveur\sousdossier\20171122.xlsx" dbms=XLSX replace; sheet=mafeuille; run;;GOPTIONS NOACCESSIBLE;;*';*"
    48         ODS _ALL_ CLOSE;
    49         
    50         
    51         QUIT; RUN;

    J'ignore pourquoi SAS me pond une ânerie pareille ?!

    La macro sas retapée :

    Code macro SAS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    %macro expxlsxdate(file , annee , mois , jour , extension , format , table , nom_feuille , quote ); /* trvaux */
     
    proc export data=work.&table outfile=&quote&file&annee&mois&jour&extension&quote dbms=&format replace;
    sheet=&nom_feuille;
    run;
     
    %mend;

  4. #4
    Membre éprouvé
    Avatar de Stackware
    Homme Profil pro
    ArchiDuc de la Sasserie
    Inscrit en
    Juillet 2013
    Messages
    439
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ArchiDuc de la Sasserie
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2013
    Messages : 439
    Points : 1 017
    Points
    1 017
    Billets dans le blog
    4
    Par défaut
    Bon jour,
    Sans être un expert, serait-il possible de ne pas appeler les années mois et jour year, month et day, mais annee, mois et jour? et "format" aussi. ce sont des noms réservés

  5. #5
    Inactif  

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    3 064
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 064
    Points : 4 605
    Points
    4 605
    Par défaut
    Citation Envoyé par Stackware Voir le message
    Bon jour,
    Sans être un expert, serait-il possible de ne pas appeler les années mois et jour year, month et day, mais annee, mois et jour? et "format" aussi. ce sont des noms réservés
    Je viens de changer les noms en question. J'ai aussi changé le format de année , mois et jour qui sont au numerique. Je les passe en chaine texte.

    Comme ceci :

    Code SAS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    data _null_;
    	call symputx("mois",month(today()));
            mois2=put(mois, 2.);
    	if mois<10
    	then mois2='0'||mois2;
    	else mois2=mois2;
    	call symputx("annee",year(today()));
    	annee2=put(annee, 4.);
    	call symputx("jour",day(today()));
    	jour2=put(jour, 2.);
    	if jour<10
    	then jour2='0'||jour2;
    	else jour2=jour2;
    	call symputx("lien",'\\batd0\bases_rad\ficovie\fichier');
    	call symputx("mon_extension",'.xlsx');
    	call symputx("mon_format",'XLSX');
    run;

    SAS persiste et signe en refusant de prendre en considération des paramètres.

    J'en ai plus que ras le cul de ce type de réaction de la part du logiciel SAS. Celui ci n'en fait qu'a sa tête ...

  6. #6
    Membre éprouvé
    Avatar de Stackware
    Homme Profil pro
    ArchiDuc de la Sasserie
    Inscrit en
    Juillet 2013
    Messages
    439
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ArchiDuc de la Sasserie
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2013
    Messages : 439
    Points : 1 017
    Points
    1 017
    Billets dans le blog
    4
    Par défaut
    Je peux voir le code complet (avec la macro)?

  7. #7
    Membre expérimenté
    Inscrit en
    Novembre 2009
    Messages
    703
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 703
    Points : 1 311
    Points
    1 311
    Par défaut Macro qui refuse ces paramètres
    Bonjour,

    Il est rare que SAS réponde des âneries...

    Voici une version simplifiée votre programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    5     data _null_;
    6         call symputx("month",month(today()));
    7         call symputx("year",year(today()));
    8         call symputx("day",day(today()));
    9     run;
     
    NOTE: DATA statement used (Total process time):
          real time           0.01 seconds
          cpu time            0.01 seconds
     
     
    10
    11    %macro expxlsxdate(annee, mois, jour, table);
    12      proc export data=work.&table outfile="D:\temp\&table.&annee.&mois.&jour..xlsx" dbms=xlsx
    12  ! replace;
    13        sheet="mafeuille";
    14      run;
    15    %mend;
    16
    17    %expxlsxdate(&year , &month , &day , refec9);
     
    NOTE: The export data set has 1 observations and 1 variables.
    NOTE: "D:\temp\refec920171122.xlsx" file was successfully created.
    NOTE: PROCEDURE EXPORT used (Total process time):
          real time           0.01 seconds
          cpu time            0.01 seconds

    Ajoutez les autres paramètres pas à pas.

    Cordialement,

  8. #8
    Inactif  

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    3 064
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 064
    Points : 4 605
    Points
    4 605
    Par défaut
    Bonjour,

    Après des heures de recherches il y avait plusieurs erreurs en cascades :

    1) Pour commencer un nom de répertoire qui avait changé ... J'aurais pu cherché longtemps , nous n'avons pas été prévenu !

    2) J'ai corrigé le programme avec l'ensemble des remontés pour au final trouvé une solution ... encore plus simple !

    Voici les solutions :

    Code SAS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
     
    %macro expxlsxdate(lien , fichier , annee , mois , jour , mon_extension , mon_format , ma_table , nom_feuille ); 
     
    /* macro export de fichier avec horodatage */
     
    %put &fichier , &annee , &mois , &jour , &mon_extension , &mon_format , &ma_table , &nom_feuille   ;
     
    proc export data=work.&ma_table outfile="&lien&annee&mois&jour&fichier&mon_extension" dbms=&mon_format replace;
    sheet=&nom_feuille;
    run; 
     
    %mend;
     
    data _null_;
     
    mois = month(input("&sysdate9",date9.));
    annee = year(input("&sysdate9",date9.));
    jour  = day(input("&sysdate9",date9.));
    call symput('mois',compress(put(mois,Z2.)));
    call symput('annee',compress(put(annee,best.)));
    call symput('jour',compress(put(jour,Z2.)));
    call symputx('lien','\\serveur\sousdossier\dossier trv1\');
    call symputx ('fichier','_lotXXX');
     
    run;
     
    %put &annee &mois &jour &lien &fichier &mon_extension ; 
     
    /*  export au format xlsx */
     
    %expxlsxdate( &lien , &fichier , &annee , &mois , &jour , .xlsx , XLSX , refec9, mafeuille );

    La solution 2, avec une simple commande cmd x et les quotes ... :

    Code sas : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
     
    /* macro export de fichier avec date  */
     
    %macro expxlsxdate( mon_lien , mon_format , ma_feuille , ma_table  ); 
     
    %put &mon_lien  &mon_format  &ma_feuille  &ma_table  ;
     
    proc export data=work.&ma_table outfile=&mon_lien dbms=&mon_format replace;
    sheet=&ma_feuille;
    run;
     
    x 'ren \\serveur\sousdossier\"dossier trv1"\lot_XXX.xlsx %date:~6,4%%date:~3,2%%date:~0,2%lot_XXX.xlsx '
     
    %mend;
     
    /* export au format xlsx */
     
    data _null_;
    	call symputx("mon_lien",'\\serveur\sousdossier\dossier trv1\lot_XXX.xlsx');
    	call symputx("mon_format",'XLSX');
    	call symputx("ma_feuille",'mafeuille');
    run;
     
    %put &mon_lien &mon_extension &mon_format &ma_feuille ; 
     
    %expxlsxdate( &mon_lien , &mon_format , &ma_feuille , refec9 );

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/08/2017, 16h48
  2. [XL-2007] Protection de formule et macro qui refusent de marcher ensemble
    Par HotshotPP dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 29/04/2011, 09h23
  3. Fonction qui prend un parametre
    Par hoaxpunk dans le forum Oracle
    Réponses: 12
    Dernier message: 13/04/2006, 12h34
  4. Réponses: 24
    Dernier message: 23/02/2006, 11h04
  5. un service qui refuse de se lancer
    Par unNew dans le forum Windows XP
    Réponses: 3
    Dernier message: 22/10/2005, 01h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo