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

SAS AF et formulaires Discussion :

Interface, macro et condition


Sujet :

SAS AF et formulaires

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2009
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 63
    Points : 32
    Points
    32
    Par défaut Interface, macro et condition
    Bonjour,

    Je suis débutante, je dois écrire un programme de jeu de dés sous SAS.

    Je souhaiterais afficher des boites de dialogues mais qui dépendent d'un paramètre : le nombre dés. Je souhaiterais savoir s'il est possible d'automatiser l'écriture sous une macro ou quelque chose comme ça.

    Voici ce que je souhaiterais automatiser (avec un nombre n de dés):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    %Window Choix 
    	Group = Choix1
    		#5 @5 "Les dés à classer sont :"
    		#7 @15 "De1 : " @35 "De2 : " @55 "De3 : " @75 "De4 : "
    		#8 @5 De1 @25 De2 @45 De3 @65 De4
    		#17 @5 "Voulez-vous avancer? (Tapez '1' pour 'oui' ou '0' pour 'non')"
    		@70 Avance 1 Attr=Underline Required=Yes
     
    	Group = Choix2
    		#5 @5 "Les dés à classer sont :"
    		#7 @15 "De1 : " @35 "De2 : " @55 "De3 : "
    		#8 @5 De1 @25 De2 @45 De3
    		#17 @5 "Voulez-vous avancer? (Tapez '1' pour 'oui' ou '0' pour 'non')"
    		@70 Avance 1 Attr=Underline Required=Yes
    Ensuite j'ai un autre problème d'affichage de boite de dialogue :

    Si l'individu accepte d'avancer, une question s'affiche en dessous et qui demande de taper le choix. Si l'individu ne se trompe pas lors de la saisie, il n'y a pas de problème, en revanche s'il se trompe, je souhaiterais qu'une nouvelle question (remplaçant celle qui demande le choix) s'affiche. Voici la suite de ce qui est du morceau de programme précédent :

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    Group = OUI
    		#22 @5 "Quel est votre choix?"
    		@30 Choix &Nb_des Attr=Underline Required=Yes
     
    	Group = Erreur
    		#22 @5 "Vous vous êtes trompé(e). Quel est votre choix?"
    		@55 Choix &Nb_des Attr=Underline Required=Yes;
     
     
    %Macro Choix();
     
    	%If &Nb_des=4 %Then %Display Choix.Choix1;
    	%If &Nb_des=3 %Then %Display Choix.Choix2;
    	%If &Avance=1 %Then %Display Choix.OUI;
     
    	Data Permutations;
    		Set Permutations;
    			Choix=compress(&Choix);
    			scoreb=compress(score);
    			Output;
    	Run;
     
    	Data Choix;
    		Set Permutations;
     
    		If scoreb=choix Then output;
     
     
    		If Choix ne Scoreb Then do;
    			%Do %until (Choix = Scoreb);
    				%Display Choix.Erreur;
    			%End;
    		End;
     
    	Run;
     
    %Mend Choix;
    Le problème est que SAS démarre absolument la question d'erreur... Et ne s'arrête plus.

    Si vous pouvez m'aider, je vous remercie!!!!!

  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 : 46
    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.
    Je suppose que ton besoin est un exercice de cours, et pas un besoin professionnel...
    Alors plutôt que de faire l'exo pour toi, je te propose de te replonger dans le cours et les nombreux tutoriels sur Internet pour bien comprendre :
    - la différence entre les deux compilateurs (macro et SAS), et leur ordre d'exécution
    - la différence entre un %IF (instruction macro) et un IF (exécuté au cours de l'étape Data)
    - la logique d'un test en macro-langage (comme dans l'autre topic où tu as posé des questions, le test %until (Choix = Scoreb) est forcément faux, donc tu auras une boucle infinie).
    Bon courage !
    Olivier
    Bon courage.
    Olivier

  3. #3
    Nouveau membre du Club
    Inscrit en
    Avril 2009
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 63
    Points : 32
    Points
    32
    Par défaut
    Bonjour!

    Après quelques heures de recherches et de test, j'ai enfin écrit un code qui fonctionne, j'ai sorti toutes les conditions avec % des data!

    Ce qui donne entièrement (c'est un long) :


    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
    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    %Window Choix 
    	Group = Choix1
    		#3 @5 "JOUEUR" @12 coucou
    		#5 @5 "Les dés à classer sont :"
    		#7 @15 "De1 : " @35 "De2 : " @55 "De3 : " @75 "De4 : "
    		#8 @5 De1 @25 De2 @45 De3 @65 De4
    		#17 @5 "Voulez-vous avancer? (Tapez '1' pour 'oui' ou '0' pour 'non')"
    		@70 Avance 1 Attr=Underline Required=Yes
     
    	Group = Choix2
    		#3 @5 "JOUEUR" @12 coucou
    		#5 @5 "Les dés à classer sont :"
    		#7 @15 "De1 : " @35 "De2 : " @55 "De3 : "
    		#8 @5 De1 @25 De2 @45 De3
    		#17 @5 "Voulez-vous avancer? (Tapez '1' pour 'oui' ou '0' pour 'non')"
    		@70 Avance 1 Attr=Underline Required=Yes
     
    	Group = Choix3
    		#3 @5 "JOUEUR" @12 coucou
    		#5 @5 "Les dés à classer sont :"
    		#7 @15 "De1 : " @35 "De2 : "
    		#8 @5 De1 @25 De2
    		#17 @5 "Voulez-vous avancer? (Tapez '1' pour 'oui' ou '0' pour 'non')"
    		@70 Avance 1 Attr=Underline Required=Yes
     
    	Group = Choix4
    		#3 @5 "JOUEUR" @12 coucou
    		#5 @5 "Votre score serait de :"
    		#7 @15 "De1 : "
    		#8 @5 De1 
    		#17 @5 "Voulez-vous avancer? (Tapez '1' pour 'oui' ou '0' pour 'non')"
    		@70 Avance 1 Attr=Underline Required=Yes
     
    	Group = OUI
    		#22 @5 "Quel est votre choix?"
    		@30 Choix 20 Attr=Underline Required=Yes;
     
    %Window Erreur
    		#17 @50 "Vous vous êtes trompé(e).";
     
    %Macro Choix();
    	%If &Nb_des=4 %Then %Display Choix.Choix1;
    	%If &Nb_des=3 %Then %Display Choix.Choix2;
    	%If &Nb_des=2 %Then %Display Choix.Choix3;
    	%If &Nb_des=1 %Then %do;
    		%Display Choix.Choix4;
    	%End;
     
    	%If &Avance=1 %Then %do;
    		%If &Nb_des ne 1 %Then %do;
    			%Display Choix.OUI;
    		%End;
    		%If &Nb_des=1 %Then %do;
    			%Let Choix=&De1;
    		%End;
     
    		Data Permutations;
    			Set Permutations;
    			Choix=compress(&Choix);/*on transforme en variable alphanumétique pour comparer avec la variable suivante*/
    			scoreb=compress(score);
    			Output;
    		Run;
     
    		Data Choix;
    			Set Permutations;
    			If scoreb=choix Then output;
    		Run;
     
    		Data Choix;
    			Set Choix;
    			Call symput("score",score);
    		Run;
     
    		%If &Choix ne &Score %Then %do;
    			%Do %until (&Choix = &Score);
    				%Display Erreur;
    				%Display Choix.OUI;
    				Data Permutations;
    					Set Permutations;
    					Choix=compress(&Choix);
    					scoreb=compress(score);
    					Output;
    				Run;
    				Data Choix;
    					Set Permutations;
    					If scoreb=choix Then output;
    					Call symput("scoreb",scoreb);
    				Run;
    				Data Choix;
    					Set Choix;
    					Call symput("score",score);
    				Run;
    			%End;
    		%End;
    	%End;
     
     
    %Mend Choix;

    Merci pour les petites pistes!

    Sinon, je ne sais toujours pas si on peut automatiser la windows choix... Je souhaiterais faire quelque chose puisque ce sont presque les mêmes fenêtres mais un nombre de dés différents... Les lignes sont les mêmes et les sauts de colonnes réguliers... Est-ce possible d'automatiser cela?

  4. #4
    Rédacteur

    Homme Profil pro
    SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Inscrit en
    Avril 2009
    Messages
    2 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2009
    Messages : 2 497
    Points : 6 064
    Points
    6 064
    Par défaut
    tout est possible, tout est réalisable

    place une window dans une macro dont le paramètre serait le group
    N'oubliez pas de cliquer sur lorsque votre problème est réglé !

  5. #5
    Nouveau membre du Club
    Inscrit en
    Avril 2009
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 63
    Points : 32
    Points
    32
    Par défaut
    Bonjour,

    J'ai essayé comme vous m'avez dit mais il y a des erreurs, en plus je ne comprends pas ce qu'il faut corriger... Les erreurs sont :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ERREUR 22-322:  requis.une constante entière.
    ERREUR 22-322:  requis.une constante entière.
    ERREUR: Instruction %WINDOW non traitée en raison d'erreurs.
    Mon programme est :

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    %Let coucou=2;
    %Let i=&coucou;
    %Let Nb_des=4;
    %Let de1=1;
    %Let de2=2;
    %Let de3=3;
    %Let de4=4;
    %Let Nom1=9;
    %Let Nom2=8;
    %Let Nom3=7;
    %Let Nom4=6;
    %Let Joueur2=298;
    %Let Reste2=137;
     
    	%Macro Affiche();
     
    		%Do h=1 %to &Nb_des;
    			%Do y=1 %to &Nb_des %by 20;
    				%Window	Choix&h
    					#3 @5 Nom&i
    					#5 @5 "JOUEUR" @12 coucou
    					#7 @5 "Vous avez parcouru : " @28 Joueur&i 20 Protect=Yes
    					#9 @5 "Il vous reste à parcourir : " @35 Reste&i 20 Protect=Yes
    					#11 @5 "Les dés à classer sont :"
    					#13 @15+y "De&h : " 
    					#15 @5+y De&h
    					#24 @5 "Voulez-vous avancer? (Tapez '1' pour 'oui' ou '0' pour 'non')"
    					@70 Avance 1 Attr=Underline Required=Yes;
    			%End;
    		%End;
     
    	%If &Nb_des=4 %Then %Display Choix1;
    	%If &Nb_des=3 %Then %Display Choix2;
    	%If &Nb_des=2 %Then %Display Choix3;
    	%If &Nb_des=1 %Then %do;
    		%Display Choix4;
    	%End;
     
    %Mend Affiche;
    %Affiche();
    Si quelqu'un peut m'aider!!! Merci d'avance!!

  6. #6
    Membre éprouvé
    Avatar de steelspirit
    Homme Profil pro
    SAS discute
    Inscrit en
    Janvier 2008
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SAS discute
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 472
    Points : 916
    Points
    916
    Par défaut
    Bonjour Misspatate,

    Afin de t'aider, pourrais-tu nous préciser, depuis le début, ce que tu souhaites faire :
    -> Quel sont les paramètres saisies par l'utilisateur ? nombre de dés ? avancer O/N ???
    -> Une fois les paramètres renseignés, qu'est ce que le programme doit faire ?

    Bref quel est la règle et le but de ce jeu ?

    Steel
    Avant de poser votre question, n'oubliez pas :
    FAQ, SAS DOC et de ce forum

  7. #7
    Nouveau membre du Club
    Inscrit en
    Avril 2009
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 63
    Points : 32
    Points
    32
    Par défaut
    Bonjour,

    Il s'agit d'un jeu de dés, le marathon. Les règles se trouvent ici : http://www.momes.net/jeux/pij/jeuxdedes.html
    C'est le jeu n°8. Je peux vous envoyer mon programme pour vous faire une idée de ce que j'ai programmé!
    Merci beaucoup,

    Misspatate

  8. #8
    Membre éprouvé
    Avatar de steelspirit
    Homme Profil pro
    SAS discute
    Inscrit en
    Janvier 2008
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SAS discute
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 472
    Points : 916
    Points
    916
    Par défaut
    Cool ! l'algo n'est pas tres compliqué ...
    J'ai commencé pour le fun mais je ne vais pas te filer ma réponse, ce serait te macher le boulot

    Je ne sais pas où tu en est dans ton dev mais ce que je te conseil :

    AVANT de t'occuper des interfaces utilisateurs et de "l'habillage" commence à bien structurer ton programme :

    j'ai créé 4 macro-programmes :

    -> TIRAGE : lance le dé, retourne un entier entre 1 et 6.

    -> LANCE(nb) : lance nb dés et retourne le score total

    -> CAPITAL : détermine le capital de départ de chaque joueur, on créé une macro-variable par joueur contenant le capital de départ.
    Ex: si on a 3 joueurs, la macro créé 3 macro-variables :
    capital_joueur1=66
    capital_joueur2=81
    capital_joueur3=74

    -> TOUR(joueur,adversaire) : tour de jeux :
    joueur : NUMERO du joueur,
    adversaire : NUMERO de l'adversaire que l'on veut killer, laisser vide si on ne veut killer personne

    Voici l'algo de TOUR :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    /* le joueur lance les 6 dés */
    /* si le score dépasse 30 on calcul la différence DIFF */
              /* on ajoute DIFF au capital */
              /* on lance les 6 dés, on ne garde que ceux égal à DIFF et on calcul combien on en a */
             /* Si on kill l'adversaire */
                      /* on enlève des points au capital de l'adversaire */ 
     
    /* si on fait moins que 30 on s'enlève des points */
    Il reste ensuite à construire la fenetre de saisie et de créer la macro JEUX qui affiche la fenêtre et lance la macro tour
    -> JEUX
    algo :
    Tant qu'il reste au moins 2 joueurs :
    Afficher l'écran de saisie
    Lancer macro TOUR pour le joueur n
    passer au joueur suivant

    bon courage !

    Steel
    Avant de poser votre question, n'oubliez pas :
    FAQ, SAS DOC et de ce forum

  9. #9
    Nouveau membre du Club
    Inscrit en
    Avril 2009
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 63
    Points : 32
    Points
    32
    Par défaut
    Coucou!

    Je pense que tu t'es trompé de jeu, celui là c'est le killer!! Moi, je suis en train de faire le marathon! Le jeu n°8!!! ^^

    J'ai déjà tout programmé, il ne me reste plus que les interfaces à fabriquer.

    J'ai fait presque comme toi pour le killer (en général c'est les même genre de macros que l'on retrouve) :
    ->une macro INITIALISATION qui crée les variables nécessaires au jeu
    ->une macro LANCER qui traite le lancer des six dés (avec deux sous macros qui permettent de traiter le choix du joueur)
    ->une macro SCORE qui permet de sommer ou pas le score des joueurs.

    Pour les interfaces, j'ai crée de nouvelles variables et une macro avec des conditions pour afficher les boites de dialogues qu'il faut.
    Je peux te montrer ce que j'ai déjà fait, je ne sais pas si mon programme est optimisé à fond... Il me reste à réparer quelques bugs encore et puis après c'est bon! Il me manque surtout la "macroéisation" de la boite de dialogue "choix"

    Mon projet est à rendre mercredi!

    Merciiii pour ton aide!!

Discussions similaires

  1. Macro avec condition
    Par roidurif dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 17/05/2009, 14h22
  2. Macro avec conditions de sorties
    Par vivicente dans le forum VBA Access
    Réponses: 5
    Dernier message: 11/06/2008, 13h39
  3. macro checkbox condition
    Par omlov88 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/01/2008, 13h47
  4. Macro avec condition
    Par ANTMA dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 07/12/2007, 18h38
  5. exécution d'une macro avec condition
    Par casavba dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/08/2007, 14h44

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