1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
| Option Explicit
Type Result
Valeur As Double
Echec As Boolean
End Type
Sub Hauteur_Intercalaire()
Dim RI As Double, Rm As Double, Hi As Double, Hm As Double, Hmoy As Double
Dim Ep As Double, Pas As Double, PasF As Double
Dim DvCib As Result, DvCal As Result
Dim Graph As ChartObject
Dim Sh As Worksheet
Dim i As Long
Set Sh = Worksheets("Graphique")
With Sh
For Each Graph In .ChartObjects
Graph.Delete
Next Graph
.UsedRange.ClearContents
.Range("A1").Resize(, 3) = Array("Pas", "Hauteur", "Développée calculée")
Ep = InputBox("Entrez l'épaisseur matière en mm", "Epaisseur matiere", "", 150, 150)
RI = InputBox("Entrez le rayon extérieur de l'intercalaire", "Rayon de l'intercalaire", "", 150, 150)
PasF = InputBox("Entrez le pas souhaité", " Pas pour le calcul de hauteur ", "", 150, 150)
Hi = InputBox("Entrez la hauteur de votre intercalaire", " Hauteur sur plan de l'intercalaire ", "", 150, 150)
Rm = RI - (Ep / 2)
Hm = Hi - Ep
DvCib = DEV(Rm, Hm, PasF)
If Not DvCib.Echec Then
MsgBox "Votre développée vaut " & DvCib.Valeur & " mm" & Chr(10) & " Vérifiez dans FEUILLE CALCUL MOLETTE TYPE LA CONCORDANCE."
i = 1
For Pas = 0.2 To 3 Step 0.01
For Hmoy = 0.5 To Hi + 3 Step 0.001
DvCal = DEV(Rm, Hmoy, Pas)
If Not DvCal.Echec Then
If DvCal.Valeur <= DvCib.Valeur + 0.0005 And DvCal.Valeur >= DvCib.Valeur - 0.0005 Then
i = i + 1
.Cells(i, 1).Resize(, 3) = Array(Pas, Hmoy + Ep, DvCal.Valeur)
Exit For
End If
End If
Next Hmoy
Next Pas
If i > 1 Then
MsgBox "Tracé du graphique"
Set Graph = .ChartObjects.Add(140, 10, 500, 300)
With Graph.Chart
.ChartArea.ClearContents
.ChartType = xlLineMarkers
.HasTitle = True
.ChartTitle.Characters.Text = "Hauteur = f(pas)"
.HasLegend = False
With .SeriesCollection.NewSeries
.Values = Sh.Range("B2").Resize(i)
.XValues = Sh.Range("A2").Resize(i)
End With
End With
Else
MsgBox "Aucune donnée"
End If
Else
MsgBox "Erreur valeur Div Cible"
End If
End With
Set Graph = Nothing
Set Sh = Nothing
End Sub
Private Function DEV(ByVal Rm As Double, ByVal Hm As Double, ByVal Pas As Double) As Result
Dim X As Double, Y As Double, Z As Double
Dim RPi As Double
X = (Hm - 2 * Rm) ^ 2 + Pas ^ 2
Y = (X / 4) - Rm ^ 2
Z = Hm ^ 2 - 4 * Rm * Hm + Pas ^ 2
If Y >= 0 And Z >= 0 Then
RPi = 180 / WorksheetFunction.Pi
DEV.Valeur = (2 * Rm / RPi) * (Atn(((Hm - 2 * Rm) / Pas)) * RPi + Atn(Rm / Sqr(Y)) * RPi) + Sqr(Z)
Else
DEV.Echec = True
End If
End Function |
Partager