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 :

Comment faire un IN dans une macro


Sujet :

Macro

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 154
    Points : 61
    Points
    61
    Par défaut Comment faire un IN dans une macro
    * Bonjour, *

    Je cherche a faire un in dans une macro mais j'ai toujours une erreur. c'est un soucis de synthaxe ??

    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
     
    %macro main ;
     
        %if %sysfunc(putn(&dt_jour.,FRADFDWN.)) in ('Lundi','Mercredi') 
        %then 
            %goto fin ;
        %else 
            %do ;
            .
            .
            .
            %end ;
     
        %fin : ;
     
    %mend main ;
     
    %main ;
    J'ai le message d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ERROR: Required operator not found in expression: %sysfunc(putn(&dt_jour.,FRADFDWN.)) in ('Lundi','Mercredi')
    ERROR: The macro MAIN will stop executing.
    Je peux m'en sortir avec des or mais si j'ai une dizaine de valeur dans mon in c'est galére

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    %if %sysfunc(putn(&dt_jour.,FRADFDWN.)) eq 'Lundi' or %sysfunc(putn(&dt_jour.,FRADFDWN.)) eq 'Mercredi'
    Comment faire fonctionner ce IN ???

    * Merci *

  2. #2
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 478
    Points
    4 478
    Par défaut
    Bonjour.
    Le IN a été ajouté comme opérateur pour les macro-conditions dans la version 9.0, retiré dans la 9.1 et enfin réintroduit dans la 9.2 (voir comment s'en servir ici : c'est pas léger quand même).
    Une alternative : évaluer la condition dans une étape DATA _NULL_, après avoir récupéré la valeur de ta macro-variable via SYMGET. Tu crées (CALL SYMPUTX) une macro-variable CONDITION (par exemple) qui vaut 1 ou 0 selon les cas. Et ensuite tu testes &CONDITION = 1 dans ton %IF.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    DATA _NULL_ ;
      Valeur = LEFT(PUT(INPUT(SYMGET("dt_jour"),6.),FRADFDWN.)) ;
      PUT valeur= ;
      condition=0 ;
      IF valeur IN: ("Lundi","Mercredi") THEN condition=1 ;
      CALL SYMPUTX("condition", condition) ;
    RUN ;
    %IF &condition=1 %THEN ...
    Rien à voir mais remarque en passant : %GOTO fin et une étiquette %FIN: juste avant le %MEND ça marche mais c'est moins explicite que %ABORT;

    Bon courage.
    Olivier

  3. #3
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 154
    Points : 61
    Points
    61
    Par défaut
    Super merci pour les 2 solutions.

    J'ai été faineant je suis allé au plus rapide j'ai rajouté en début comme précisé dans la doc l'option
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    options minoperator mlogic ;
    Je garde l'autre sous le coude pour des cas plus tordu.

    Sinon pour ta remarque je remplace le %goto fin;par %abort et j'enléve aussi l'étiquette %fin :; et du coup ça sort proprement de la macro. C'est bien ça ?

  4. #4
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 478
    Points
    4 478
    Par défaut
    Citation Envoyé par baime Voir le message
    Sinon pour ta remarque je remplace le %goto fin;par %abort et j'enléve aussi l'étiquette %fin :; et du coup ça sort proprement de la macro. C'est bien ça ?
    Oui c'est exactement ça. La doc sur %ABORT est ici.

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

Discussions similaires

  1. Réponses: 28
    Dernier message: 13/07/2008, 14h31
  2. comment faire un offset dans une fonction ?
    Par tempo-lyon dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 23/10/2007, 11h15
  3. Comment faire 2 sessions dans une application
    Par ZiedCSS dans le forum Windows Forms
    Réponses: 1
    Dernier message: 03/04/2007, 14h36
  4. Réponses: 1
    Dernier message: 28/03/2007, 12h23
  5. [VBA-E]Comment faire pour écrire dans une page excel existante ?
    Par pauletta22 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/05/2006, 13h54

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