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 :

Faire une boucle dans une macro


Sujet :

Macro

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 11
    Par défaut Faire une boucle dans une macro
    Bonjour,

    J'ai un petit problème au niveau de ma macro. Elle fonctionne bien mais je ne veux pas retaper plusieurs fois l'appel de la macro (100 centres différents).

    Voici la macro :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    %macro table(var, val); 
    data &var&val;
    set Donnees;
    if numero_centre="&val" then output; /*la variable numero_centre est dans la table Donnees */
    run;
    %mend table;
     
    %table(centre, 01);
    %table(centre, 02);
    %table(centre, 03);
    %table(centre, 04);
    Dans la table de départ, je peux avoir plusieurs ligne ayant le même numéro de centre.
    Je veux créer une table pour chaque centre. Si le centre n'existe pas, je ne devrai pas avoir de table.

    Étant donné que je dois lancer l'appel pour les 100 centres, bien évidement, je ne veux pas le faire à la main.

    Si quelqu'un à une idée, merci d'avance pour vos réponses.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 161
    Par défaut
    Bonjour

    par exemple, avec un bon vieux classeur Excel

    Tu écris dans une colonne toutes tes valeurs
    Dans la colonne d' à coté tu
    fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =concatener("%table(centre,";A1;")")
    Tu descends ta formule et tu n'a plus qu'à copier coller.

    si c'est une manip que tu répétez plus souvent, par SAS
    Tu écrits les valeurs dans une table SAS, et tu fais un call execute

  3. #3
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 8
    Par défaut
    et un truc comme ça, ça marche pas?

    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
    %macro table; 
    %do i=1%to 9 ;
    data &var0&i.;
    set Donnees;
    if numero_centre="0&i." then output; /*la variable numero_centre est dans la table Donnees */
    run;
    %end ;
     
    %do i=10 %to 100
    data &var&i.;
    set Donnees;
    if numero_centre="&i." then output; /*la variable numero_centre est dans la table Donnees */
    run;
    %end ;
    %mend table;
     
    %table;

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 11
    Par défaut
    Merci beaucoup pour vos réponses très rapide.

    HS_2010, J'ai utilisé ton code, il fonctionne, merci

    Par contre, j'obtiens 100 tables et dans ma table de départ, il peut y avoir que 30 centres par exemple. Je devrais avoir donc 30 tables et pas 100 tables dont 70 sont vides.
    Sait tu ou dois-je appliquer cette condition ?

    Merci d'avance

  5. #5
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 8
    Par défaut
    la macro que je t'ai donnée a deux boucles: une pour les centres de 01 à 09 et une seconde pour ceux de 10 à 100. Si tu ne veux travailler que sur 30 centres, il faut changer la seconde boucle en: %do i=10 %to 30;

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 11
    Par défaut
    Je me suis peut être mal exprimé. désolée.
    J'ai une table de départ ou j'ai plusieurs centre (allant de 1 à 100).
    Je peux par exemple avoir une table avec le centre 05,10,89,95.

    Ce que je souhaite, c'est avoir donc 4 tables (par rapport à l'exemple).
    Si j'exécute la macro tel quel est, je vais avoir 100 tables, et j'aurai les tables var05, var10, var89, var95 qui seront complètes.
    Mais je ne veux pas avoir les autres tables vides dans la work.

    Merci encore "HS_2010".

    Merci d'avance pour vos réponses.

Discussions similaires

  1. Réponses: 15
    Dernier message: 26/01/2015, 20h37
  2. Utilisation d'une boucle dans une boucle
    Par caramon _majere dans le forum Langage
    Réponses: 5
    Dernier message: 27/09/2014, 22h37
  3. [XL-2003] faire une boucle dans une boucle VBA
    Par the-geut dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/04/2010, 16h06
  4. [PHP 5.0] Manipulation XML une boucle dans une boucle
    Par lepotier dans le forum Langage
    Réponses: 2
    Dernier message: 10/03/2010, 13h15
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 14h48

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