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

Macros et VBA Excel Discussion :

double Boucle For


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 201
    Par défaut double Boucle For
    Bonjour à tous et à toutes,

    j'ai un petit soucis, j'utilise deux boucles For pour calculer mon Lwas(niveau de puissance sonore) car Lwas dépend de la fréquence f ( plage de fréquence), de Lwcorr qui dépend lui meme de Lws (de plus à chaque f correspond un Lws) donc ma double boucle For doit surement s'emmeler les pinceaux et du coup j'obtiens beaucoup trop de resultat , jusqu'a 443 cellules alors que ma plage de fréquence et donc de Lws est limitée à 20 cellules, rajouter à cela que les valeur de Lwas sont fausses. Merci de votre aide





    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
     
     
    For Each cellule In plageSource '<< A Ajuster à la plage ...
     
          For Each cell In plagesource2
                 Lws = cell.Value
                 f = cellule.Value
     
                  teta = teta0 + (Ms / (485 * Sqr(f)))
                  Lcorr = Lws - (20 * (Log(epaisseur / 0.2) / Log(10)))
                  Lwas = Lcorr - (10 * (Log(2 * pi * f * Ms * teta) / Log(10))) + 26 + (10 * (Log(sgma) / Log(10)))
                  i = i + 1
                 Sheets(nomFeuilDest).Cells(i, 2).Value = Lcorr
                 Sheets(nomFeuilDest).Cells(i, 10).Value = Lwas
            Next cell
     
     
     
       Next cellule

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    C'est logique, tu auras en sortie N*M résultats (avec N nombre de cellules PlageSource et M celles de PlageSource2)

    Si tu peux expliquer ce que les 2 boucles sont censées faire.

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 201
    Par défaut
    en fait j'ai une colonne de valeurs(20valeurs) de Lws et une colonne pour la fréquence à chaque fréquence correspond un Lws. de plus mon Lwas depends de Lws mais aussi de f et de sigma qui est une fonction de f. je voudrais calculer mes 20 valeurs de Lwas.
    Lws        f          sgma      teta
    15        50          1           1
    28       100         2            etc...
    33       200         2.5
    41       300         3
    52       600         etc...
    64       800
    78      1000
    89      1500
    ...       ...
    sachant que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Lwas=Lws-10*log(2*pi*f*teta)+10*log(sgma)
    sgma=sigma est une fonction de f (plusieurs expression de sigma selon que f<fc ; f=fc et f>fc )que j'ai calculé avant avec succes. Et teta ne depend que de f, teta= 485/sqr(f)

    Lws     f      sgma     teta
    15     50       1         1
    28     100     2        etc...
    33     200     2.5
    41     300      3
    52     600     etc...
    64     800
    78     1000
    89     1500

  4. #4
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Une seule boucle te suffit, non?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    For Each Cellule In PlageSource                  '<< A Ajuster à la plage ...
        F = Cellule.Value
        Lws = Cellule.Offset(0, 1).Value
        Teta = Teta0 + (Ms / (485 * Sqr(F)))
        Lcorr = Lws - (20 * (Log(Epaisseur / 0.2) / Log(10)))
        Lwas = Lcorr - (10 * (Log(2 * Pi * F * Ms * Teta) / Log(10))) + 26 + (10 * (Log(sgma) / Log(10)))
        i = i + 1
        Sheets(nomFeuilDest).Cells(i, 2).Value = Lcorr
        Sheets(nomFeuilDest).Cells(i, 10).Value = Lwas
    Next Cellule

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 201
    Par défaut
    quand vous ecrivez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     F = Cellule.Value
        Lws = Cellule.Offset(0, 1).Value
    c'est pour dire que la colonne des Lws est juste à coté de F, C'est bien ça?
    en fait mes valeur de Lws et f sont sur la meme feuille mais décalés
    f= Range("Feuil1!B5:B25") et Lws = Range("Feuil1!F30:F50")

    c'est bon j'ai réussi, il suffit de mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Lws = cellule.Offset(25, 4).Value
    Merci pour l'astuce en effet une boucle suffit.
    Cordialment!

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 201
    Par défaut
    derniere petite question: comment faire si f et Lws n'était pas sur la même feuille?
    Merci

  7. #7
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Il suffit de remplacer le 1 par le nombre de colonnes de décalage, dans ton cas 4 et le 0 par le nombre de lignes de décalage, don ton cas 25
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For Each Cellule In Worksheets("Feuil1").Range("B5:B25")                  '<< A Ajuster à la plage ...
        F = Cellule.Value
        Lws = Cellule.Offset(25, 4).Value
    '....la suite

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

Discussions similaires

  1. [Toutes versions] Factorielle à double boucle FOR TO
    Par caribou01 dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 21/06/2012, 23h55
  2. [XL-2007] Double boucle for
    Par Goliw dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 19/05/2011, 09h16
  3. doubles boucles for
    Par tpscience dans le forum MATLAB
    Réponses: 7
    Dernier message: 26/04/2009, 20h38
  4. [batch] double boucle for
    Par schlopa dans le forum Windows
    Réponses: 12
    Dernier message: 11/02/2008, 20h54
  5. Sortir d'une double boucle FOR-END
    Par Invité dans le forum MATLAB
    Réponses: 4
    Dernier message: 05/12/2007, 12h07

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