0% ont trouvé ce document utile (0 vote)
80 vues11 pages

Dimensionnement Poutre Béton Armé VBA

Ce document présente un programme VBA pour le dimensionnement de poutres en béton armé selon l'Eurocode 2. Il inclut des structures de données pour stocker les résultats, des fonctions pour lire les données d'entrée, effectuer des calculs de dimensionnement, choisir des armatures et vérifier les efforts tranchants. Les résultats sont ensuite affichés dans une feuille de calcul Excel.

Transféré par

Ulrich Momos
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
80 vues11 pages

Dimensionnement Poutre Béton Armé VBA

Ce document présente un programme VBA pour le dimensionnement de poutres en béton armé selon l'Eurocode 2. Il inclut des structures de données pour stocker les résultats, des fonctions pour lire les données d'entrée, effectuer des calculs de dimensionnement, choisir des armatures et vérifier les efforts tranchants. Les résultats sont ensuite affichés dans une feuille de calcul Excel.

Transféré par

Ulrich Momos
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

' ========================================

' PROGRAMME VBA - DIMENSIONNEMENT POUTRE BETON ARME


' Selon Eurocode 2 (EN 1992-1-1)
' Auteur : Pour Ulrich MOMOS
' ========================================

Option Explicit

' Structure pour stocker les résultats


Type ResultatsPoutre
' Données géométriques
hauteur As Double
largeur As Double
hauteur_utile As Double
enrobage As Double

' Sollicitations
moment_eds As Double
effort_tranchant_eds As Double

' Matériaux
fc28 As Double
fcd As Double
fyk As Double
fyd As Double
Es As Double

' Résultats dimensionnement flexion


mu_eds As Double
alpha_lim As Double
alpha As Double
pivot As String
z As Double
ast_calc As Double
ast_min As Double
ast_choisie As Double

' Armatures longitudinales


diametre_long As Double
nb_barres As Integer
ast_reelle As Double

' Vérification effort tranchant


ved As Double
vrd_max As Double
theta As Double
asw_calc As Double
asw_min As Double

' Armatures transversales


diametre_cadres As Double
espacement As Double
nb_brins As Integer

' Dispositions constructives


espacement_max_long As Double
espacement_max_cadres As Double
longueur_ancrage As Double

' Vérifications
verification_flexion As String
verification_effort_tranchant As String
verification_constructive As String
End Type

' ========================================
' FONCTION PRINCIPALE DE DIMENSIONNEMENT
' ========================================
Sub DimensionnerPoutre()
Dim resultats As ResultatsPoutre
Dim ws As Worksheet

Set ws = ActiveSheet

' Vider les résultats précédents


Range("B20:B50").ClearContents
Range("D20:D50").ClearContents

' Lecture des données d'entrée


If Not LireDonneesEntree(resultats) Then
MsgBox "Erreur dans la lecture des données d'entrée", vbCritical
Exit Sub
End If

' Calculs de dimensionnement


Call CalculerCaracteristiquesMaterialux(resultats)
Call DimensionnerFlexion(resultats)
Call ChoisirArmatureLongitudinale(resultats)
Call VerifierEffortTranchant(resultats)
Call DimensionnerCadres(resultats)
Call VerifierDispositionsConstructives(resultats)

' Affichage des résultats


Call AfficherResultats(resultats)

MsgBox "Dimensionnement terminé ! Vérifiez les résultats.", vbInformation


End Sub

' ========================================
' LECTURE DES DONNEES D'ENTREE
' ========================================
Function LireDonneesEntree(ByRef r As ResultatsPoutre) As Boolean
On Error GoTo Erreur

' Géométrie
[Link] = Range("B2").Value ' cm
[Link] = Range("B3").Value ' cm
[Link] = Range("B4").Value ' cm
r.hauteur_utile = [Link] - [Link] - 1 ' -1cm pour diamètre cadre + ø/2 acier long

' Sollicitations
r.moment_eds = Range("B6").Value ' kN.m
r.effort_tranchant_eds = Range("B7").Value ' kN

' Matériaux
r.fc28 = Range("B9").Value ' MPa
[Link] = Range("B10").Value ' MPa

' Vérifications basiques


If [Link] <= 0 Or [Link] <= 0 Or r.moment_eds <= 0 Then
LireDonneesEntree = False
Exit Function
End If

LireDonneesEntree = True
Exit Function

Erreur:
LireDonneesEntree = False
End Function

' ========================================
' CALCUL CARACTERISTIQUES MATERIAUX
' ========================================
Sub CalculerCaracteristiquesMaterialux(ByRef r As ResultatsPoutre)
' Béton
[Link] = r.fc28 / 1.5 ' Résistance de calcul du béton

' Acier
[Link] = [Link] / 1.15 ' Résistance de calcul de l'acier
[Link] = 200000 ' MPa - Module d'Young acier
End Sub

' ========================================
' DIMENSIONNEMENT EN FLEXION
' ========================================
Sub DimensionnerFlexion(ByRef r As ResultatsPoutre)
Dim b As Double, h As Double, d As Double

b = [Link] / 100 ' conversion en m


h = [Link] / 100
d = r.hauteur_utile / 100

' Moment réduit


r.mu_eds = (r.moment_eds * 1000) / (b * d * d * [Link] * 1000000) ' Sans unité

' Limite entre pivot A et pivot B


r.alpha_lim = 0.372 ' Pour fyk = 500 MPa

' Détermination du pivot et calcul de alpha


If r.mu_eds <= r.alpha_lim Then
' Pivot A - Acier limite d'élasticité
[Link] = "Pivot A"
[Link] = 1.25 * (1 - Sqr(1 - 2 * r.mu_eds))
Else
' Pivot B - Béton à 3.5‰, acier plastique
[Link] = "Pivot B - Section sur-armée!"
[Link] = r.alpha_lim
End If

' Bras de levier


r.z = d * (1 - 0.4 * [Link])

' Section d'acier calculée


r.ast_calc = (r.moment_eds * 1000) / ([Link] * r.z) ' mm²
' Section d'acier minimale
r.ast_min = [Link](0.26 * (2.9 / [Link]) * b * 1000 * d * 1000, _
0.0013 * b * 1000 * d * 1000) ' mm²

' Section d'acier à retenir


r.ast_choisie = [Link](r.ast_calc, r.ast_min)
End Sub

' ========================================
' CHOIX ARMATURE LONGITUDINALE
' ========================================
Sub ChoisirArmatureLongitudinale(ByRef r As ResultatsPoutre)
Dim diametres As Variant
Dim sections As Variant
Dim i As Integer, j As Integer
Dim section_barre As Double
Dim nb_barres_necessaire As Double
Dim trouve As Boolean

' Diamètres disponibles (mm) et leurs sections (mm²)


diametres = Array(8, 10, 12, 14, 16, 20, 25, 32)
sections = Array(50.3, 78.5, 113.1, 153.9, 201.1, 314.2, 490.9, 804.2)

trouve = False

' Recherche du diamètre optimal (commence par les plus gros diamètres)
For i = UBound(diametres) To LBound(diametres) Step -1
section_barre = sections(i)
nb_barres_necessaire = r.ast_choisie / section_barre

' Vérification si on peut loger les barres (max 3 lits)


If nb_barres_necessaire <= 12 And nb_barres_necessaire >= 2 Then
r.diametre_long = diametres(i)
r.nb_barres = [Link](nb_barres_necessaire, 1)
r.ast_reelle = r.nb_barres * section_barre
trouve = True
Exit For
End If
Next i

If Not trouve Then


' Solution de secours avec HA20
r.diametre_long = 20
r.nb_barres = [Link](r.ast_choisie / 314.2, 1)
r.ast_reelle = r.nb_barres * 314.2
End If
End Sub

' ========================================
' VERIFICATION EFFORT TRANCHANT
' ========================================
Sub VerifierEffortTranchant(ByRef r As ResultatsPoutre)
Dim b As Double, d As Double
Dim k As Double, rho1 As Double, vmin As Double

b = [Link] / 1000 ' conversion en m


d = r.hauteur_utile / 1000

' Effort tranchant réduit


[Link] = r.effort_tranchant_eds

' Résistance maximale des bielles comprimées


r.vrd_max = 0.5 * [Link] * b * d * 1000 ' kN

' Vérification résistance béton seul


k = [Link](1 + Sqr(200 / (d * 1000)), 2)
rho1 = [Link](r.ast_reelle / (b * 1000 * d * 1000), 0.02)
vmin = 0.035 * k ^ 1.5 * Sqr(r.fc28)

Dim vrd_c As Double


vrd_c = [Link](0.12 * k * (100 * rho1 * r.fc28) ^ (1 / 3), vmin) * b
* d * 1000 ' kN

' Calcul armatures transversales nécessaires


If [Link] <= vrd_c Then
' Armatures minimales suffisantes
r.asw_calc = 0
Else
' Calcul des armatures d'effort tranchant
[Link] = 45 ' Angle bielles comprimées (45° pour simplifier)
r.asw_calc = ([Link] - vrd_c) * 1000 / ([Link] * d * 1000) ' mm²/m
End If

' Armatures transversales minimales


r.asw_min = 0.08 * Sqr(r.fc28) / [Link] * b * 1000 ' mm²/m

' Retenir le maximum


r.asw_calc = [Link](r.asw_calc, r.asw_min)
End Sub

' ========================================
' DIMENSIONNEMENT DES CADRES
' ========================================
Sub DimensionnerCadres(ByRef r As ResultatsPoutre)
Dim diametre_cadre As Double
Dim section_cadre As Double
Dim espacement_calc As Double

' Diamètre des cadres (au moins ø6 et <= ø_long/3)


r.diametre_cadres = [Link](6, r.diametre_long / 3)
If r.diametre_cadres > 12 Then r.diametre_cadres = 12

' Section d'un brin de cadre


section_cadre = 3.14159 * (r.diametre_cadres / 2) ^ 2

' Nombre de brins (2 pour cadre simple)


r.nb_brins = 2

' Espacement calculé


If r.asw_calc > 0 Then
espacement_calc = (r.nb_brins * section_cadre * 1000) / r.asw_calc ' mm
Else
espacement_calc = 300 ' Espacement maximal par défaut
End If

' Espacement maximal réglementaire


r.espacement_max_cadres = [Link](0.75 * r.hauteur_utile * 10,
300) ' mm

' Espacement retenu (arrondi aux 5 cm inférieurs)


[Link] = [Link](espacement_calc,
r.espacement_max_cadres)
[Link] = Int([Link] / 50) * 50
If [Link] < 50 Then [Link] = 50
End Sub

' ========================================
' VERIFICATION DISPOSITIONS CONSTRUCTIVES
' ========================================
Sub VerifierDispositionsConstructives(ByRef r As ResultatsPoutre)
' Espacement maximal armatures longitudinales
r.espacement_max_long = [Link](2 * [Link] * 10, 250) ' mm
' Longueur d'ancrage droit
r.longueur_ancrage = 40 * r.diametre_long ' mm - Formule simplifiée

' Vérifications
r.verification_flexion = IIf(r.ast_reelle >= r.ast_choisie, "OK", "INSUFFISANT")
r.verification_effort_tranchant = IIf([Link] <= r.vrd_max, "OK", "SECTION INSUFFISANTE")
r.verification_constructive = "Vérifier espacement barres et enrobage"
End Sub

' ========================================
' AFFICHAGE DES RESULTATS
' ========================================
Sub AfficherResultats(ByRef r As ResultatsPoutre)
Dim ligne As Integer
ligne = 20

' Titre
Range("A" & ligne).Value = "RESULTATS DE DIMENSIONNEMENT"
Range("A" & ligne).[Link] = True
ligne = ligne + 2

' Caractéristiques matériaux


Range("A" & ligne).Value = "Béton fcd (MPa):"
Range("B" & ligne).Value = Round([Link], 1)
ligne = ligne + 1
Range("A" & ligne).Value = "Acier fyd (MPa):"
Range("B" & ligne).Value = Round([Link], 0)
ligne = ligne + 2

' Flexion
Range("A" & ligne).Value = "=== FLEXION ==="
Range("A" & ligne).[Link] = True
ligne = ligne + 1
Range("A" & ligne).Value = "Moment réduit μ:"
Range("B" & ligne).Value = Round(r.mu_eds, 3)
ligne = ligne + 1
Range("A" & ligne).Value = "Pivot:"
Range("B" & ligne).Value = [Link]
ligne = ligne + 1
Range("A" & ligne).Value = "As calculé (cm²):"
Range("B" & ligne).Value = Round(r.ast_calc / 100, 2)
ligne = ligne + 1
Range("A" & ligne).Value = "As minimal (cm²):"
Range("B" & ligne).Value = Round(r.ast_min / 100, 2)
ligne = ligne + 1
Range("A" & ligne).Value = "As choisi (cm²):"
Range("B" & ligne).Value = Round(r.ast_choisie / 100, 2)
ligne = ligne + 2

' Armatures longitudinales


Range("A" & ligne).Value = "=== ARMATURES LONGITUDINALES ==="
Range("A" & ligne).[Link] = True
ligne = ligne + 1
Range("A" & ligne).Value = "Choix:"
Range("B" & ligne).Value = r.nb_barres & " HA" & r.diametre_long
ligne = ligne + 1
Range("A" & ligne).Value = "As réelle (cm²):"
Range("B" & ligne).Value = Round(r.ast_reelle / 100, 2)
ligne = ligne + 1
Range("A" & ligne).Value = "Vérification:"
Range("B" & ligne).Value = r.verification_flexion
ligne = ligne + 2

' Effort tranchant


Range("A" & ligne).Value = "=== EFFORT TRANCHANT ==="
Range("A" & ligne).[Link] = True
ligne = ligne + 1
Range("A" & ligne).Value = "VEd (kN):"
Range("B" & ligne).Value = Round([Link], 1)
ligne = ligne + 1
Range("A" & ligne).Value = "VRd,max (kN):"
Range("B" & ligne).Value = Round(r.vrd_max, 1)
ligne = ligne + 1
Range("A" & ligne).Value = "Asw nécessaire (cm²/m):"
Range("B" & ligne).Value = Round(r.asw_calc / 100, 2)
ligne = ligne + 2

' Armatures transversales


Range("A" & ligne).Value = "=== ARMATURES TRANSVERSALES ==="
Range("A" & ligne).[Link] = True
ligne = ligne + 1
Range("A" & ligne).Value = "Cadres:"
Range("B" & ligne).Value = "ø" & r.diametre_cadres & " e=" & [Link] & "mm"
ligne = ligne + 1
Range("A" & ligne).Value = "Vérification:"
Range("B" & ligne).Value = r.verification_effort_tranchant
ligne = ligne + 2
' Dispositions constructives
Range("A" & ligne).Value = "=== DISPOSITIONS CONSTRUCTIVES ==="
Range("A" & ligne).[Link] = True
ligne = ligne + 1
Range("A" & ligne).Value = "Longueur ancrage (cm):"
Range("B" & ligne).Value = Round(r.longueur_ancrage / 10, 0)
ligne = ligne + 1
Range("A" & ligne).Value = "Espacement max long (mm):"
Range("B" & ligne).Value = r.espacement_max_long
ligne = ligne + 1
Range("A" & ligne).Value = "Espacement max cadres (mm):"
Range("B" & ligne).Value = r.espacement_max_cadres
End Sub

' ========================================
' INITIALISATION DE LA FEUILLE
' ========================================
Sub InitialiserFeuille()
Dim ws As Worksheet
Set ws = ActiveSheet

' Effacer le contenu


[Link]

' Titre
Range("A1").Value = "DIMENSIONNEMENT POUTRE BETON ARME"
Range("A1").[Link] = True
Range("A1").[Link] = 14

' Données d'entrée


Range("A3").Value = "DONNEES D'ENTREE"
Range("A3").[Link] = True

Range("A4").Value = "Largeur b (cm):"


Range("B4").Value = 30

Range("A5").Value = "Hauteur h (cm):"


Range("B5").Value = 60

Range("A6").Value = "Enrobage (cm):"


Range("B6").Value = 3

Range("A8").Value = "Moment MEd (kN.m):"


Range("B8").Value = 150

Range("A9").Value = "Effort tranchant VEd (kN):"


Range("B9").Value = 100

Range("A11").Value = "Béton fc28 (MPa):"


Range("B11").Value = 25

Range("A12").Value = "Acier fyk (MPa):"


Range("B12").Value = 500

' Bouton de calcul


Dim btn As Object
Set btn = [Link](200, 200, 150, 30)
[Link] = "DimensionnerPoutre"
[Link] = "DIMENSIONNER"

' Mise en forme


Range("A:B").[Link]

MsgBox "Feuille initialisée ! Modifiez les données d'entrée puis cliquez sur
DIMENSIONNER", vbInformation
End Sub

Vous aimerez peut-être aussi