Problème de treillis sous VBA

Bonjour,

Je suis débutant sur VBA et j'ai pour projet de faire le programme d'un exercice classique d’élément fini "le problème d'un treillis à 6 barres" .

La où je galère c'est pour calculer la longueur, le cosinus et le sinus de chaque barre, j'ai essayé de coder mais dans mon tableau je trouve que des zéros.

Si quelqu'un à une idée de comment faire le calcul juste à partir des cordonné de chaque nœud merci de les partagés.

Vous trouvez en PJ dans la capture 0 le programme que j'ai fait, la forme du treillis dans la capture 1 et le tableau que je dois avoir dans la capture 3 que j'ai calculé analytiquement.

Cordialement.

capture0 capture1 capture2

Bonjour Yassir et bienvenue,

merci de joindre un fichier excel avec tes données et montrant le résultat attendu.

Bonjour,

sin et cos sont des fonctions nécessitent qu'on leur donne un angle en radians en paramètre.

S'agissant de fonctions, il ne faut pas les définir comme variables avec une instruction DIM.

donc si la colonne 18 contient des angles en degrés

supprimer

dim cos as double
dim sin as double

et modifier

dim pi as  double
pi=application.pi()
cells(i,19)=round(cos(pi*cells(i,18)/180),3)
cells(i,20)=round(sin(pi*cells(i,18)/180),3)

Bonjour et merci pour l'acceuil i20100

Vous trouvez en pj les deux fichier excel un avec les resultats que je dois trouver et l'autre vierge, vous retrouvez aussi le sujet, c'eest au niveau de la Q1.3 que je galère .

Merci bcp

Bonjour h2so4,

Merci pour ton aide mais ton idée n'a pas fonctionné

re-

Merci pour ton aide mais ton idée n'a pas fonctionné

en colonne 18, il faut bien sûr mettre les angles (en degrés) pour que les instructions fonctionnent

On ne peut pas rajouter une colonne pour les angles il faut trouvé juste à partir des cordonnées de chaque nœud, la colonne 18 est pour la longueur de chaque barre.

re-bonjour,

et bien dans ce cas, dans les formules, tu remplaces cells(i,18) par l'angle que tu as trouvé à partir des coordonnées de chaque noeud.

Bonjour,

le problème je vois pas comment faire pour traduire cette idée en langage VBA

Bonjour,

le problème je vois pas comment faire pour traduire cette idée en langage VBA

et as-tu une idée pour le faire mathématiquement ? Car je pense que si c'était le cas tu ne mettrais pas ça sur le dos de vba.

analytiquement oui je sais le faire.

Vous retrouvez en pj la solution.

Pour la barre 1 : angle est 0°

Pour la barre 2 : angle est 90° en partant du point I au point J

Pour la barre 3 : angle est 180°

Pour la barre 4 : angle est 90°

Pour la barre 5 : angle est 135°

Pour la barre 6 : angle est 45°

et a chaque fois en part du point I le plus petit au point J le plus grand

capture1 capture2

Bonjour,

analytiquement oui je sais le faire.

et donc quelle formule utilises-tu ? c'est cette simple formule que tu devras utiliser pour calculer l'angle qui te servira de paramètre pour tes fonctions sin et cos. (indice arc tangente et coefficient angulaire)

bonjour,

une proposition

Sub calcul()

    Dim i As Integer, i_tot As Integer
    Dim pti As Long, ptj As Long, x1 As Long, x2 As Long, y1 As Long, y2 As Long, angle As Double
    Dim pi As Double

    pi = Application.pi()
    i = 3
    i_tot = 9

    Do Until i = i_tot
        pti = Cells(i, 15) 'point i
        ptj = Cells(i, 16) 'point j
        x1 = Cells(pti + 2, 3) 'coordonnée x du point i
        y1 = Cells(pti + 2, 4) 'coordonnée y du point i
        x2 = Cells(ptj + 2, 3) 'coordonnée x du point j
        y2 = Cells(ptj + 2, 4) 'coordonnée y du point j
        If x2 = x1 Then 'ligne verticale
            angle = pi / 2 * Sgn(y2 - y1)' angle = pi/2 ou -pi/2 en radians
        Else
            angle = Atn((y2 - y1) / (x2 - x1)) 'angle en radians
        End If
        Cells(i, 19) = Round(cos(angle), 3)
        Cells(i, 20) = Round(sin(angle), 3)
        i = i + 1
    Loop

End Sub

Oui merci bcp pour l'indice ça m'a trop aider

Oui j'ai appliqué le même programme sauf qui a une erreur de signe au niveau de la barre 3 et 4

re-bonjour,

je pensais que tu aurais été capable de détecter et de corriger toi-même.

  If x2 = x1 Then
            angle = pi / 2 * Sgn(y2 - y1)
        ElseIf y2 = y1 Then
            angle = pi * Sgn(x2 - x1)
        Else
            angle = Atn((y2 - y1) / (x2 - x1))
        End If

If x2 = x1 Then 'ligne verticale

angle = pi / 2 * Sgn(y2 - y1) ' angle = pi/2 ou -pi/2 en radians

angle = pi * Sgn(x2 - x1)

Else

angle = Atn((y2 - y1) / (x2 - x1)) 'angle en radians

End If

Cells(i, 19) = Round(cos(angle), 3)

Cells(i, 20) = Round(sin(angle), 3)

i = i + 1

J'avais fait ça moi, je suis un débutant

Merci bcp en tout les cas

J'ai une autre question stp

Sub calcul()

Dim i As Integer

Dim compteur As Integer

compteur = 0

For i = 3 To 65

If Cells(i, 3).Value = 1 Then

compteur = compteur + 1

End If

Cells(2, 2).Value = compteur + 2

Next i

For i = 3 To 65

If Cells(i, 14).Value = 1 Then

compteur = compteur + 1

End If

Cells(2, 14).Value = compteur + 3

Next i

For i = 3 To 65

If Cells(i, 24).Value = 1 Then

compteur = 2

End If

Cells(2, 24).Value = compteur

Next i

End Sub

Ce code à pour but de codez trois compteurs qui vont afficher le nombre de nœuds en haut à gauche du tableau des nœuds, le nombre d’éléments en haut à gauche du tableau des éléments et du nombre de matériaux en haut à gauche du tableau des matériaux (comme dans la figure 1).

Ma question : est ce que ce code peut fonctionner pour un treillis de 100 nœud ?

tableau

re-bonjour,

est ce que ce code peut fonctionner pour un treillis de 100 nœud ?

non, ce code n'est pas correct. tu ne comptes que les cellules qui contiennent 1, tu dois compter jusqu'à ce que tu trouves une cellule vide.

Bonjour,

pour mon info, que signifie TER L3 ?

TER = terminal

L3 = licence 3

Et chaque projet à une dominante particulière sois calcul, conception sois fabrication

Bonsoir,

merci pour ta réponse.

Rechercher des sujets similaires à "probleme treillis vba"