Problème de treillis sous VBA

Bonjour,

J'ai un problème

Il nous a été demandé de calculer la contrainte .

J'ai fait le code suivant :

Sub calculcontraint()

Dim i As Integer, j As Integer, k As Integer

Dim sigma As Double

Dim E As Long, L As Long

Dim NbElm As Integer

Dim pti As Double, ptj As Double

Dim Vectc As Double, Vects As Long

Dim DepX As Double, DepY As Double

NbElm = Cells(2, 14) + 3

i = 0

j = 0

k = 0

Do Until i = NbElm

E = Cells(3, 25)

L = Cells(3, 18)

If i > 4 Then

E = Cells(4, 25)

L = Cells(5, 18)

End If

pti = Cells(i, 15)

ptj = Cells(i, 16)

DepX = Cells(pti, 9)

DepY = Cells(ptj, 10)

Vectc = Array(-Cells(i, 19), -Cells(i, 20), Cells(i, 19), Cells(i, 20))

sigma = (E / L) * (Vectc * Array(DepX, DepY))

i = i + 1

Loop

End Sub

Sauf que ça me mets erreur : dépassement de capacité

Si tu peux m'éclairer stp

Merci et désolé pour le dérangement

bonjour,

peux-tu mettre ton classeur avec ton code et les données qu'il utilise pour que je puisse reproduire l'erreur ?

Oui biensur

Bonjour,

je peux corriger facilement cette erreur, tu définis E as double plutôt que as long, mais tu auras d'autres erreurs par la suite ...

comment faut-il calculer la contrainte ? Si tu peux expliquer quelles sont les différentes étapes (sur base de quelles données et de quelles formules), je pourrais peut-être t'apprendre à mettre ça en forme pour vba.

Pour calculer la contrainte on utilise la formule dans la capture 1.

Donc par exemple pour calculer la contrainte de la barre 1 :

on a sigma = (E/L)*(- cos - sin cos sin )* (Ui Vi Uj Vj)

la barre 1 à pour angle 0 donc si que nous fait sigma = (E/L) * (-1 0 1 0) * les déplacement des noeud 1 et 2 ( qui sont en matrice transposé) "regardez capture2"

Il faut faire le calcul pour les 6 barre

Le problème ici c'est qu'il nous à pas était demander de calculer les déplacement (U,V) mais le prof nous a donné ces déplacement dans un autre fichier excel en pj, ils sont t'exprimer en (DepX,DepY).

Le module de Young E est définie dans la table des matière à droite dans le fichier excel

La longueur L est définie de la table des élément au milieu dans le fichier excel

cap1 cap2

bonjour,

voici à quoi pourrait ressembler une traduction en vba de cette formule.

Sub calculcontraintes()
    Dim nbelements As Long, ne As Long, i As Long, pti As Long, ptj As Long, indicepropriete As Long
    Dim E As Double, longueur As Double, m As Double, sigma1 As Double
    Dim vectl As Variant, vectc As Variant

    nbelements = Cells(2, 14)
    For ne = 1 To nbelements
        i = ne + 2
        longueur = Cells(i, 18)                                                                                                        'longueur de la barre ne
        indicepropriete = Cells(i, 17)                                                                                              'référence des propriétés de la barre ne
        E = Cells(indicepropriete + 2, 25)                                                                                      'valeur E de la barre ne
        vectl = Array(-Cells(i, 19), -Cells(i, 20), Cells(i, 19), Cells(i, 20))                                      'vectl contient -cos -sin cos sin de la barre ne
        pti = Cells(i, 15)                                                                                                                 'référence point I de la barre ne
        ptj = Cells(i, 16)                                                                                                                 'référence point J de la barre ne
        vectc = Array(Cells(pti + 2, 9), Cells(pti + 2, 10), Cells(ptj + 2, 9), Cells(ptj + 2, 10)) 'vectc contient les depx et depy des points 1 et 2 de la barre ne
        m = Application.SumProduct(vectl, vectc)                                                                        'multiplication vecteur ligne (vectl) par vecteur colonne (vectc)
        sigma1 = m * E / longueur                                                                                                 'calcul du sigma1
        Cells(i, 22) = sigma1
    Next ne
End Sub

C'est quoi ne ?

y'aura juste une boucle for ?

Bonsoir,

ne est le numéro de la barre pour laquelle on calcule la contrainte, il y a une boucle pour faire le calcul pour toutes les barres.

. J'ai traduit la formule en vba sur base des infos que tu as données. Pour le reste désolé, je ne peux pas t'aider ni pour vérifier l'exactitude de tes formules, ni les résultats. Je te laisse vérifier formules, résultats et si la macro utilise les bonnes données.

Génial merci

Tu m'as déjà énormément aider

Bonsoir,

ça vient de quoi l'erreur de compatibilité du type ?

J'essayé de mettre toute les variable en double parce que j'ai pensé que le problème vient du fait de multiplier une variable double par une variable long mais ça change rien.

Merci et désolé encore une fois pour le dérangement

Bonsoir,

ça vient de quoi l'erreur de compatibilité du type ?

en gros cela veut dire que tu essaies de faire quelque chose avec une donnée dont le type n'est pas compatible avec ce que tu veux faire.

mettre du texte dans une variable numérique, additionner des dessins, additionner ou multiplier des tableaux avec les simples opérations d'addition ou de multiplication au lieu des instructions adaptées pour les tableaux... il y a mille et une raisons possibles.

sans voir le code et l'instruction en erreur, pour moi, impossible d'en dire plus.

Bonjour,

Comment puis je faire pour dessiner la figure ci dessus sur vba à partir du tableau ci dessus ?

figure tableau
Rechercher des sujets similaires à "probleme treillis vba"