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 :

Calcul de somme à pas variable


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 6
    Par défaut Calcul de somme à pas variable
    Bonjour à tous,

    Je débute sur Excel, et je souhaiterai réaliser un petit calcul à l'aide d'une macro.
    En gros, je souhaite résoudre l'équation suivante :
    x1+x2+x3+x4 +... xn = 5.
    Le nombre de terme "n" sera déterminé par moi, mais le pas "x" est ce que je demande à Excel de trouver.
    Jusqu'à maintenant, j'ai écris ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub bouboucle()
     x = 0.01
    pas = 0.001
      Do
    x = x + pas
      Cells(2, 1) = x
      Cells(2, 2) = x + 2 * x + 3 * x
      Loop While Round(x + 2 * x + 3 * x, 2) <> 5 And x < 10
      MsgBox x
    End Sub
    Bien évidemment, j'aimerai changer mon Round(x + 2 * x + 3 * x, 2) par x1+x_2+x_3+x_4 +... x_n, tout en ayant la possibilité de déterminer le "n" au préalable.

    Un grand merci d'avance à vous tous si quelqu'un a une piste. J'ai essayé avec "For" mais rien de bien concluant ...

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur Industrialisation
    Inscrit en
    Mai 2015
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Industrialisation
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2015
    Messages : 222
    Par défaut
    Salut à toi,

    Je suis désolé, je ne comprends pas bien l'histoire du :
    Round(x + 2 * x + 3 * x, 2) <> 5
    devant devenir :
    x1+x2+x3+x4 +... xn = 5.

    Tu veux dire x + 2x + 3x + ... + nx = 5 ??

    Quentin

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 6
    Par défaut
    Pardon si ce n'est pas clair.

    En fait, la finalité serait d'avoir Round (x*1+x*2+x*3+x*4 +... x*n,2) à la place Round (x + 2 * x + 3 * x, 2), tout en ayant la possibilité de choisir la valeur de n.

    Et je me rends compte que mon premier poste racontait mal l'histoire ... vraiment désolé.

    PS : je tiens à l'arrondis.

  4. #4
    Membre chevronné
    Homme Profil pro
    Ingénieur Industrialisation
    Inscrit en
    Mai 2015
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Industrialisation
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2015
    Messages : 222
    Par défaut
    Ce calcul x+2x+3x+...+nx = y peut être écrit x*(1+2+3+4+...+n) = y donc x = y/(1+2+3+4+...+n)

    Pour calculer ça, si tu as le nombre n et y :

    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
    Sub Test()
     
    Dim X As Single
    Dim y As Single
    Dim n As Integer
    Dim SommeN As Long
     
    n = 3
    y = 5
     
    For i = 1 To n
        SommeN = SommeN + i
    Next i
     
    X = y / SommeN
    MsgBox X
    End Sub
    Chez moi j'obtiens la même chose que toi... tu obtiens en cellules A2 J'imagine que je suis pas loin, lol.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 6
    Par défaut
    Alors effectivement, ça marche.

    Mais en fait, ce que je souhaite réussir à faire, c'est résoudre ça :
    x^1+x^2+x^3+...+x^n = N
    Avec le n que je fixe, et le x qui s'incrémente.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub bouboucle()
    x = 0.01
    pas = 0.001
    Do
    x = x + pas
    Cells(2, 1) = x
    Cells(2, 2) = x + 2 * x + 3 * x
    Loop While Round(x^1+x^2+x^3+...+x^n, 2) <> 5 And x < 10
    MsgBox x
    End Sub
    C'est un peu différent de ce que je demandais au départ, mais je pensais pas qu'on me conseillerait de résoudre ce que je demandais avec une factorisation (très bonne remarque au passage). My bad !

  6. #6
    Membre chevronné
    Homme Profil pro
    Ingénieur Industrialisation
    Inscrit en
    Mai 2015
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Industrialisation
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2015
    Messages : 222
    Par défaut
    Content que ça ait marché !!

    Ci-dessous, la même chose sans factorisation...

    EDIT : J'AVAIS DECLARE LA SOMME EN LONG, PASSE-LA EN SINGLE/DOUBLE ^^'

    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
    Sub Test()
     
    Dim X As Single
    Dim y As Single
    Dim n As Integer
    Dim Somme As Single
     
    n = 3
    y = 5
     
    X = 0.01
    Pas = 0.001
     
    Do
        X = X + Pas 'on incrémente par le pas en question
        Somme = 0 'on réinitialise la somme 
        For i = 1 To n 'on commence le calcul x+2x+3x+...+nx
            Somme = Somme + X * i
        Next i
    Loop Until Somme >= y 'on boucle jusqu'à ce que la valeur calculée soit supérieure ou égale à y
     
    MsgBox X
    End Sub

    PS : Pense à mettre les balises de code [ CODE] [ /CODE] (sans espace) pour afficher ton code mis en forme :p Sinon tu utilises le bouton "#" dans la barre d'outils...

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 6
    Par défaut
    Ça marche !
    Un grand merci à toi Quentin 77170 !!

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/10/2013, 22h22
  2. calculer la somme de deux variables
    Par Invité dans le forum iReport
    Réponses: 12
    Dernier message: 03/08/2007, 17h25
  3. [iReport] Calcul de somme de variables et fusion de données
    Par RR instinct dans le forum iReport
    Réponses: 7
    Dernier message: 03/04/2006, 16h04
  4. [XSLT] calcul de somme
    Par Mr N. dans le forum XSL/XSLT/XPATH
    Réponses: 9
    Dernier message: 09/09/2005, 12h20
  5. [CR 8.5] Calculer la somme d'une somme
    Par Frederic Vincent dans le forum Formules
    Réponses: 4
    Dernier message: 12/02/2004, 17h53

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