Comment coder une fonction avec plusieurs sommes arithmétiques

Résolu
ErnstP Messages postés 11 Statut Membre -  
ErnstP Messages postés 11 Statut Membre -
Bonjour,

Je voudrais coder cette fonction en VBA pour réaliser un petit modèle analytique sur excel mais je ne sais pas comment m'y prendre.

4 réponses

  1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    c'est bêta oui...
    eric
    2
    1. ErnstP Messages postés 11 Statut Membre
       
      C'est a dire? Merci
      0
    2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Tu m’ôtes les mots de la bouche...
      C'est à dire ?
      Car pour l'instant à part te répondre "du mieux que tu peux" c'est tout ce que m'inspire ta question.
      0
    3. ErnstP Messages postés 11 Statut Membre
       
      Cf ma réponse à ccm81
      0
  2. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Bonjour

    Ce que veut dire eric (salut à toi), c'est que ta question est bien trop vague.
    Il te faudrait en dire un peu, voir beaucoup plus sur le "modèle analytique" espéré

    Cdlmnt
    0
    1. ErnstP Messages postés 11 Statut Membre
       
      Bonjour,

      Le problème est le suivant:

      Un cable relie un point A à un point B sans avoir pour trajectoire une ligne droite. Ce cable peut être placé dans un repère orthonormé. A et B sont placés sur l'axe des abscisses (X). Il faut voir le cable comme une ligne brisée en différents segments. Les changements de directions du cable permettent de le découper en n segments qui peuvent êtres considérés comme des vecteurs.

      Xi correspond à la projection du vecteur i sur l'axe des abscisses et Yi correspond a la projection sur l'axe des ordonnés (Y). Sur chaque vecteur ou segment s'applique une force Fi suivant l'axe (Y). C'est cette force qui a entrainé le déplacement de la section du cable suivant l'axe Y et qui a empêché le cable de relier le point A au point B de façon rectiligne. Chaque Fi étant de valeur différente, le déplacement du cable n'est pas homogène et les sections ont été plus ou moins décalées suivant l'axe (Y).

      Imaginons que n = 10

      J'aurai alors deux colones:
      -une colone contenant les 10 valeurs des Xi dans les cellules A1 jusqu'à A10
      -une colone contenant les 10 valeurs des Fi dans les cellules B1 jusqu'à B10

      Les valeurs Ay et Ax sont deux autres forces qui sont également connues elle représentent les forces qui s'appliquent à l'extrémité du cable c'est à dire le point A qui est immobile.

      Je pourrais calculer chaque Yi à partir de ces valeurs mais ce n'est évidemment pas le but puisqu'il faudra ensuite pouvoir l'appliquer à n sections.

      Etant incapable de quoi que ce soit en code je ne sais pas comment indexer chaque valeurs Xi et Fi pour pouvoir ensuite y faire appel dans une fonction écrite en VBA qui me donnera le Yi correspondant.

      Comme on peut le voir dans la fonction cités ds mon premier message chaque Yi sera dépendant des forces Fi qui s'appliquent sur chaque segment du cable et des forces Ax et Ay dues au point de fixation du cable. ( L'équation est en fait obtenue en considérant que les moments des forces s'annulent à l'équilibre.)

      La partie qui me pose le plus problème est le second terme du numérateur: comment faire pour coder cette double somme?

      J'ai regardé comment écrire des sommes arithmétiques en VBA mais je ne trouve pas comment faire intervenir plusieurs sommes ayant des bornes interdépendantes à la fois. J'ai pensé qu'il fallait combiner plusieurs boucles "for" mais je n'y arrive pas.

      Voila je veux bien croire que meme avec ce long message ca soit toujours très floue. Je n'ai toujours pas commencer à coder puisque j'essaye justement de traduire mon équation en code.

      Si vous avez des idées, merci.

      cordialement
      0
    2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Oulalaaaa, tout ça ? à l'heure du sans fil ?
      Pour l'instant, perso j'ai compris la 1ère ligne...
      Sans doute qu'un fichier avec une table des données de qq lignes et un exemple détaillé de ce que tu veux calculer (quoi, comment, avec quoi) rendra les choses plus concrètes à ceux qui se pencheront dessus (moi je vais être plutôt dans les valises...).
      cjoint.com et coller ici le lien fourni.
      eric
      0
    3. ErnstP Messages postés 11 Statut Membre
       
      Voila j'ai deux colonnes de valeurs et je cherche a coder la fonction qui me donnera les valeurs de la troisième colonne. Appelons cette fonction G, c'est celle du premier message.

      X1 F1-------------> Y1= G(X1)= Ay*X1
      X2 F2-------------> Y2= G(X1, X2, F1)= Ay*(X1+X2) - F1*X2
      X3 F3-------------> Y3= G(X1, X2, X3, F1, F2)= Ay(X1+X2+X3) - F1(X2+X3) - F2*X3
      X4 F4-------------> Y4= G(X1, X2, X3, X4, F1, F2, F3) = Ay(X1+...+X4) - F1*(X2+X3+X4) - F2*(X3+X4) - F3*X4

      X5 F5-----------> Y5= G(X1, X2, X3, X4, X5, F1, F2, F3,F4)= .....
      0
  3. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Un essai, mais le résultat ..... ?
    http://www.cjoint.com/c/GFom6pqesI8

    Cdlmnt
    0
    1. ErnstP Messages postés 11 Statut Membre
       
      Merci beaucoup pour le fichier.

      J'ai eu un problème à l'ouverture. Le message disait que le fichier était endommagé et devait être réparé pour être ouvert. Après réparation j'ai pu l'ouvrir mais seulement en partie et je n'arrive pas à lancer la macro ni à voir comment elle est faite. Néanmoins la colonne sans macro constitue deja une façon plus intéressante d'écrire l'équation. Merci pour le coup de main. Concernant la macro as tu une idée sur l'origine du problème. C'est peut être juste un problème de compatibilité. J'utilise excel sur mac, je sais que ca peut être la source de bcp de problèmes. Merci bcp.

      Cordialement
      0
  4. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Je l'ouvre sans problème

    La macro est basée sur la formule simplifiée

    Const celn As String = "B4"
    Const celAx As String = "B5"
    Const celAy As String = "B6"
    Const celX1 As String = "B7"
    Const coXi As String = "B"
    Const coFi As String = "C"
    Const coYi As String = "D"
    Const lideb As Byte = 11
    
    Public Sub OK()
    Dim li As Long, lifin As Long, n As Byte, k As Byte, k1 As Byte, k2 As Byte
    Dim Ax As Double, Ay As Double
    Dim TX() As Double, TY() As Double, TF() As Double
    Dim AyFF As Double
    n = Range(celn).Value
    Ax = Range(celAx).Value
    Ay = Range(celAy).Value
    ReDim TX(1 To n)
    ReDim TY(1 To n)
    ReDim TF(1 To n)
    For k = 1 To n
      TX(k) = Range(coXi & lideb + k - 1).Value
      TF(k) = Range(coFi & lideb + k - 1).Value
    Next k
    TY(1) = Ay * TX(1)
    Range(coYi & lideb).Value = TY(1)
    For k = 2 To n
      TY(k) = TY(k - 1)
      AyFF = Ay
      For k1 = 1 To k - 1
        AyFF = AyFF - TF(k1)
      Next k1
      TY(k) = TY(k) + AyFF * TX(k)
      Range(coYi & k + lideb - 1).Value = TY(k)
    Next k
    'Range(coYi & lideb).Resize(n, 1) = Application.Transpose(TY)
    End Sub

    Cdlmnt
    0
    1. ErnstP Messages postés 11 Statut Membre
       
      Ok merci beaucoup
      0