Comment coder une fonction avec plusieurs sommes arithmétiques

Résolu/Fermé
ErnstP Messages postés 11 Date d'inscription mardi 13 juin 2017 Statut Membre Dernière intervention 15 juin 2017 - 13 juin 2017 à 13:48
ErnstP Messages postés 11 Date d'inscription mardi 13 juin 2017 Statut Membre Dernière intervention 15 juin 2017 - 14 juin 2017 à 16:27
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.
A voir également:

4 réponses

eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
13 juin 2017 à 14:59
Bonjour,

c'est bêta oui...
eric
2
ErnstP Messages postés 11 Date d'inscription mardi 13 juin 2017 Statut Membre Dernière intervention 15 juin 2017
13 juin 2017 à 15:00
C'est a dire? Merci
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
Modifié le 13 juin 2017 à 18:47
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
ErnstP Messages postés 11 Date d'inscription mardi 13 juin 2017 Statut Membre Dernière intervention 15 juin 2017
13 juin 2017 à 20:27
Cf ma réponse à ccm81
0
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
13 juin 2017 à 18:50
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
ErnstP Messages postés 11 Date d'inscription mardi 13 juin 2017 Statut Membre Dernière intervention 15 juin 2017
Modifié le 13 juin 2017 à 20:26
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
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
Modifié le 14 juin 2017 à 00:56
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
ErnstP Messages postés 11 Date d'inscription mardi 13 juin 2017 Statut Membre Dernière intervention 15 juin 2017
14 juin 2017 à 11:58
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
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
Modifié le 14 juin 2017 à 14:58
Un essai, mais le résultat ..... ?
http://www.cjoint.com/c/GFom6pqesI8

Cdlmnt
0
ErnstP Messages postés 11 Date d'inscription mardi 13 juin 2017 Statut Membre Dernière intervention 15 juin 2017
14 juin 2017 à 16:02
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
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
14 juin 2017 à 16:14
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
ErnstP Messages postés 11 Date d'inscription mardi 13 juin 2017 Statut Membre Dernière intervention 15 juin 2017
14 juin 2017 à 16:27
Ok merci beaucoup
0