Signaler

Comment coder une fonction avec plusieurs sommes arithmétiques [Résolu]

Posez votre question ErnstP 11Messages postés mardi 13 juin 2017Date d'inscription 15 juin 2017 Dernière intervention - Dernière réponse le 14 juin 2017 à 16:27 par ErnstP
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.
Utile
+2
plus moins
Bonjour,

c'est bêta oui...
eric
Cette réponse vous a-t-elle aidé ?  
ErnstP 11Messages postés mardi 13 juin 2017Date d'inscription 15 juin 2017 Dernière intervention - 13 juin 2017 à 15:00
C'est a dire? Merci
Répondre
eriiic 21095Messages postés mardi 11 septembre 2007Date d'inscription ContributeurStatut 14 octobre 2017 Dernière intervention - 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.
Répondre
ErnstP 11Messages postés mardi 13 juin 2017Date d'inscription 15 juin 2017 Dernière intervention - 13 juin 2017 à 20:27
Cf ma réponse à ccm81
Répondre
Donnez votre avis
Utile
+0
plus moins
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
ErnstP 11Messages postés mardi 13 juin 2017Date d'inscription 15 juin 2017 Dernière intervention - 13 juin 2017 à 19:58
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
Répondre
eriiic 21095Messages postés mardi 11 septembre 2007Date d'inscription ContributeurStatut 14 octobre 2017 Dernière intervention - 14 juin 2017 à 00:54
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
Répondre
ErnstP 11Messages postés mardi 13 juin 2017Date d'inscription 15 juin 2017 Dernière intervention - 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)= .....
Répondre
Donnez votre avis
Utile
+0
plus moins
Un essai, mais le résultat ..... ?
http://www.cjoint.com/c/GFom6pqesI8

Cdlmnt
ErnstP 11Messages postés mardi 13 juin 2017Date d'inscription 15 juin 2017 Dernière intervention - 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
Répondre
Donnez votre avis
Utile
+0
plus moins
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
ErnstP 11Messages postés mardi 13 juin 2017Date d'inscription 15 juin 2017 Dernière intervention - 14 juin 2017 à 16:27
Ok merci beaucoup
Répondre
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !