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 :

Besoin d'aide pour faire une macro avec une boucle tant que


Sujet :

Macro

  1. #1
    Membre régulier
    Inscrit en
    Mai 2007
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 158
    Points : 71
    Points
    71
    Par défaut Besoin d'aide pour faire une macro avec une boucle tant que
    Bonjour,

    Je vous expose mon problème, j'ai 3 valeurs :
    -f1
    -f2
    -n
    et j'ai une variable A = |f1-f2|/(racine((f1+f2)/n*(1-(f1+f2)/2)))
    En fait je voudrais créer une macro qui me créée un tableau avec les valeurs suivantes :

    - f1
    - f2
    - f1-f2
    - A
    En fait il faudrait que f1-f2 s'incrémente tant que ma valeur A est inférieure à 1.64.

    Je sais pas si je me suis fais comprendre car moi même j'ai besoin de votre aide car c'est assez complexe. Est ce que quelqu'un pourrait m'aider, j'ai vraiment besoin de cette macro.

    Merci d'avance de prendre du temps pour m'aider.
    Cordialement

  2. #2
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    Est ce que tu peux détailler un peu plus avec des exemples et bien montrer les tables?

  3. #3
    Membre régulier
    Inscrit en
    Mai 2007
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 158
    Points : 71
    Points
    71
    Par défaut
    n f1 f2 Diff A
    500 0,552 0,5 0,052000 1,64661211
    1000 0,537 0,5 0,037000 1,655824103
    10000 0,512 0,5 0,012000 1,697178476
    15000 0,5095 0,5 0,009500 1,645522523
    20000 0,5082 0,5 0,008200 1,64005514

    en fait je voudrais un tableau final comme celui là qui incrémente mon n tous les 500 par exemple et qui tant que mon A est inférieur à 1.64, il incrémente mon Diff. En fait ma macro doit me créer ce tableau toute seule.
    Est ce plus clair???

  4. #4
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    Quelles sont les valeurs initiales de n, f1 ,f2 et A?

  5. #5
    Membre régulier
    Inscrit en
    Mai 2007
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 158
    Points : 71
    Points
    71
    Par défaut
    n est un effectif qui va débuter par exmple a 500 et qui va s'incrementer par la suite, f1 vaut par exmple 0.552 et f2=0.5 mais lui ne va pas bouger
    en fait c'est diff qui est important il peut débuter par exmple à 0.5
    et mon A est calculé à partir de la formule suivante : A=|f1-f2|/(racine((f1+f2/n)*(1-(f1+f2/2)))

  6. #6
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    f2 bouge comment?

  7. #7
    Membre régulier
    Inscrit en
    Mai 2007
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 158
    Points : 71
    Points
    71
    Par défaut
    lui on le fixe pour pouvoir faire varier l'écart

  8. #8
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    je voulais dire f1?

  9. #9
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    la variable f1 varie de 0.0005 dans mon exemple.
    Je te laisse le soins de vérifier les valeurs.
    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
     
    data t;
    n=500;
    f1=0.5;
    f2=0.5;
    run;
    data res; set t;
    do while (a < 1.64);
    	 A =abs(f1-f2)/(sqrt((f1+f2)/n*(1-(f1+f2)/2)));
    	 n=n+500;
    	 dif=abs(f1-f2);
    	 f1=f1+0.0005;
    	 output;
    end;
    run;

  10. #10
    Membre régulier
    Inscrit en
    Mai 2007
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 158
    Points : 71
    Points
    71
    Par défaut
    oui c'est a peu près ca que je voudrais mais en fait je voudrais que pour chaque valeur de l'effectif, on trouve la valeur diff qui corresponde à un A>1.64.

  11. #11
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    Citation Envoyé par CélineM Voir le message
    n f1 f2 Diff A
    500 0,552 0,5 0,052000 1,64661211
    1000 0,537 0,5 0,037000 1,655824103
    10000 0,512 0,5 0,012000 1,697178476
    15000 0,5095 0,5 0,009500 1,645522523
    20000 0,5082 0,5 0,008200 1,64005514

    en fait je voudrais un tableau final comme celui là qui incrémente mon n tous les 500 par exemple et qui tant que mon A est inférieur à 1.64, il incrémente mon Diff. En fait ma macro doit me créer ce tableau toute seule.
    Est ce plus clair???
    Dans ton exemple
    f1 est décroissant : il me faut le pas.
    le A est décroissant.
    Le dif c'est juste la différence entre f1 et f2.
    C'est quoi la condition d'arrêt .

  12. #12
    Membre régulier
    Inscrit en
    Mai 2007
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 158
    Points : 71
    Points
    71
    Par défaut
    bon désolé ca me parait clair pour moi mais c'est vrai que ca ne l'ai pas forcement pour toi,
    je recommence, en fait le f1 decroit tant que A est inférieur à 1.64, le f1 arrete donc de décroitre lorsque A devient supérieur à 1.64, on peut dire que f1 décroit de 0.001 a chaque fois.
    En fait mon problème était de creer une table avec les valeurs de diff me donnant une valeur de A le plus proche de 1.64 pour chaque effectif choisit

  13. #13
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    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
     
    data t;
    n=500;
    f1=0.5 ;
    f2=0.5;
    run;
    data res; set t;
    do while (a < 1.64);
    	 A =abs(f1-f2)/(sqrt((f1+f2)/n*(1-(f1+f2)/2)));
    	 n=n+500;
    	 dif=abs(f1-f2);
    	 f1=f1-0.001;
    	 output;
    end;
    run;

  14. #14
    Membre régulier
    Inscrit en
    Mai 2007
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 158
    Points : 71
    Points
    71
    Par défaut
    Je suis vraiment désolé mais c'est pas tout a fais ca que je veux, en fait je voudrais que pour un effectif 500 il me fasse varier f1 jusqu'a trouver ma valeur 1.64, une fois qu'il l'a trouvé, il incrémente n de 500 on a maintenant n=1000 et il recommence a chercher la valeur f1 pour laquelle A >1.64....., y a une petite modif a faire mais moi je suis pas super bonne pour trouver ce genre de chose!

  15. #15
    Membre régulier
    Inscrit en
    Mai 2007
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 158
    Points : 71
    Points
    71
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    DATA t;
    n=500;
    f1=0.5 ;
    f2=0.5;
    run;
    DATA res; SET t;
    do while (a < 1.64);
    	 A =abs(f1-f2)/(sqrt((f1+f2)/n*(1-(f1+f2)/2)));
    	 dif=abs(f1-f2);
    	 f1=f1-0.001;
    	 output;
    end;
    n=n+500;
    run;
    J'ai modifié le code pour qu'il ne change l'effectif qu'une fois avoir trouvé la valeur 1.64, seulement pour qu'il recommence la boucle avec l'effectif qui s'est incrémenter je ne sais pas où le placer????

    De plus comment faire pour qu'il n'inscrive que les lignes dont le A est >1.64.
    Merci de votre aide

  16. #16
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    tu peux faire une deuxième étape data. En t'inspirant de la première.
    ta nouvelle boucle elle doit faire quoi comme calcul?
    variable à modifier
    les règles?
    elle doit modifier les données créer avant?

  17. #17
    Membre actif

    Profil pro
    Inscrit en
    Avril 2008
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 233
    Points : 254
    Points
    254
    Par défaut
    Ca te va comme solution :
    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
    DATA t;
    	n = 500;
    	f1 = 0.5 ;
    	f2 = 0.5;
    run;
    DATA res;
    	SET t;
    	do while (n < 10000);
    		f1 = 0.5;
    		do until (A > 1.64);
    			f1 = f1 + 0.001;
    			A = abs(f1 - f2) / (sqrt((f1 + f2) / n * (1 - (f1 + f2) / 2)));
    		end;
    		output;
    		n = n + 500;
    	end;
    run;
    Deux boucles : une pour parcourir toutes les valeurs souhaitées de n, la deuxième - pour trouver la solution de ton f1.

  18. #18
    Membre régulier
    Inscrit en
    Mai 2007
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 158
    Points : 71
    Points
    71
    Par défaut
    en fait j'aurais voulu que ma boucle fasse la meme chose que la précedente mais avec une valeur de l'effectif, mais peux t-on le faire dans la même boucle lui dire qu'une fois que a>1.64, on incremente l'effectif et relance la boucle ???

  19. #19
    Membre régulier
    Inscrit en
    Mai 2007
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 158
    Points : 71
    Points
    71
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    data res;
    set res;
    if a<1.64 then drop n f1 f2 a dif;
    run;
    Comment lui dire de supprimer les lignes où a<1.64 car ce code ne fonctionne pas.????

  20. #20
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    Les valeurs de A sont supérieurs à 1.64 dans le code de green.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 15
    Dernier message: 26/01/2015, 19h37
  2. Besoin d'aide pour un p:selectOneMenu avec une base de donnée
    Par khalifan dans le forum Développement Web en Java
    Réponses: 0
    Dernier message: 02/07/2013, 22h26
  3. [XL-2003] Désactiver une macro avec une macro
    Par Sibuxian dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 29/10/2010, 00h54
  4. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  5. Réponses: 4
    Dernier message: 15/10/2009, 13h33

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