Bonjour,
Je cherche à afficher les trajectoires de trois corps suivant les formules de la loi de la Gravitation.

Le code que j'ai développé est très long, est-il possible d'accélérer le temps de traitement?

Le code:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
Option Explicit
Sub Chemin()
 
'On Error GoTo Handler
 
 
 MA = Range("A2").Value
 MB = Range("B2").Value
 MC = Range("C2").Value
 G = 6.67408 ^ 10 - 11
 
 
If Range("A15").Value = "OK" Then
 
 
Range("D3:AD100000").Clear
 
i = 3
jusk = Range("B10").Value
While i <= jusk
 
 
 
Range("B11").Value = ActiveCell.Row / jusk * 100
 
 
 
 Range("D" & i).Select
 
 xA = Range("D" & i - 1).Value
 yA = Range("E" & i - 1).Value
 zA = Range("F" & i - 1).Value
 xB = Range("G" & i - 1).Value
 yB = Range("H" & i - 1).Value
 zB = Range("I" & i - 1).Value
 xC = Range("J" & i - 1).Value
 yC = Range("K" & i - 1).Value
 zC = Range("L" & i - 1).Value
 vxA = Range("M" & i - 1).Value
 vyA = Range("N" & i - 1).Value
 vzA = Range("O" & i - 1).Value
 vxB = Range("P" & i - 1).Value
 vyB = Range("Q" & i - 1).Value
 vzB = Range("R" & i - 1).Value
 vxC = Range("S" & i - 1).Value
 vyC = Range("T" & i - 1).Value
 vzC = Range("U" & i - 1).Value
 
 
axA = G * (((MA * MB * (xB - xA)) / ((((xB - xA) ^ 2 + (yB - yA) ^ 2 + (zB - zA) ^ 2) ^ 1 / 2) ^ 3) + (MA * MC * (xC - xA)) / ((((xB - xA) ^ 2 + (yB - yA) ^ 2 + (zB - zA) ^ 2) ^ 1 / 2) ^ 3)))
ayA = G * (((MA * MB * (yB - yA)) / ((((xB - xA) ^ 2 + (yB - yA) ^ 2 + (zB - zA) ^ 2) ^ 1 / 2) ^ 3) + (MA * MC * (yC - yA)) / ((((xB - xA) ^ 2 + (yB - yA) ^ 2 + (zB - zA) ^ 2) ^ 1 / 2) ^ 3)))
azA = G * (((MA * MB * (zB - zA)) / ((((xB - xA) ^ 2 + (yB - yA) ^ 2 + (zB - zA) ^ 2) ^ 1 / 2) ^ 3) + (MA * MC * (zC - zA)) / ((((xB - xA) ^ 2 + (yB - yA) ^ 2 + (zB - zA) ^ 2) ^ 1 / 2) ^ 3)))
axB = G * (((MB * MA * (xB - xA)) / ((((xA - xB) ^ 2 + (yA - yB) ^ 2 + (zA - zB) ^ 2) ^ 1 / 2) ^ 3) + (MB * MC * (xC - xB)) / ((((xC - xB) ^ 2 + (yC - yB) ^ 2 + (zC - zB) ^ 2) ^ 1 / 2) ^ 3)))
ayB = G * (((MB * MA * (xB - xA)) / ((((xA - xB) ^ 2 + (yA - yB) ^ 2 + (zA - zB) ^ 2) ^ 1 / 2) ^ 3) + (MB * MC * (yC - xB)) / ((((xC - xB) ^ 2 + (yC - yB) ^ 2 + (zC - zB) ^ 2) ^ 1 / 2) ^ 3)))
azB = G * (((MB * MA * (xB - xA)) / ((((xA - xB) ^ 2 + (yA - yB) ^ 2 + (zA - zB) ^ 2) ^ 1 / 2) ^ 3) + (MB * MC * (xC - xB)) / ((((xC - xB) ^ 2 + (yC - yB) ^ 2 + (zC - zB) ^ 2) ^ 1 / 2) ^ 3)))
axC = G * (((MC * MA * (xA - xC)) / ((((xA - xC) ^ 2 + (yA - yC) ^ 2 + (zA - zC) ^ 2) ^ 1 / 2) ^ 3) + (MC * MB * (xB - xC)) / ((((xB - xC) ^ 2 + (yB - yC) ^ 2 + (zB - zC) ^ 2) ^ 1 / 2) ^ 3)))
ayC = G * (((MC * MA * (xA - xC)) / ((((xA - xC) ^ 2 + (yA - yC) ^ 2 + (zA - zC) ^ 2) ^ 1 / 2) ^ 3) + (MC * MB * (xB - xC)) / ((((xB - xC) ^ 2 + (yB - yC) ^ 2 + (zB - zC) ^ 2) ^ 1 / 2) ^ 3)))
azC = G * (((MC * MA * (xA - xC)) / ((((xA - xC) ^ 2 + (yA - yC) ^ 2 + (zA - zC) ^ 2) ^ 1 / 2) ^ 3) + (MC * MB * (xB - xC)) / ((((xB - xC) ^ 2 + (yB - yC) ^ 2 + (zB - zC) ^ 2) ^ 1 / 2) ^ 3)))
 
 Range("V" & i).Value = axA
 Range("W" & i).Value = ayA
 Range("X" & i).Value = azA
 Range("Y" & i).Value = axB
 Range("Z" & i).Value = ayB
 Range("AA" & i).Value = azB
 Range("AB" & i).Value = axC
 Range("AC" & i).Value = ayC
 Range("AD" & i).Value = azC
 
DEMIT = Range("AE" & i).Value
 
vxA = vxA + axA * DEMIT
vyA = vyA + ayA * DEMIT
vzA = vzA + azA * DEMIT
vxB = vxB + axB * DEMIT
vyB = vyB + ayB * DEMIT
vzB = vzB + azB * DEMIT
vxC = vxC + axC * DEMIT
vyC = vyC + ayC * DEMIT
vzC = vzC + azC * DEMIT
 
 Range("M" & i + 1).Value = vxA
 Range("N" & i + 1).Value = vyA
 Range("O" & i + 1).Value = vzA
 Range("P" & i + 1).Value = vxB
 Range("Q" & i + 1).Value = vyB
 Range("R" & i + 1).Value = vzB
 Range("S" & i + 1).Value = vxC
 Range("T" & i + 1).Value = vyC
 Range("U" & i + 1).Value = vzC
 
 T = Range("AE" & i + 1).Value
 
 xA = xA + vxA * T
 yA = yA + vyA * T
 zA = zA + vzA * T
 xB = xB + vxB * T
 yB = yB + vyB * T
 zB = zB + vzB * T
 xC = xC + vxC * T
 yC = yC + vyC * T
 zC = zC + vzC * T
 
 Range("D" & i + 1).Value = xA
 Range("E" & i + 1).Value = yA
 Range("F" & i + 1).Value = zA
 Range("G" & i + 1).Value = xB
 Range("H" & i + 1).Value = yB
 Range("I" & i + 1).Value = zB
 Range("J" & i + 1).Value = xC
 Range("K" & i + 1).Value = yC
 Range("L" & i + 1).Value = zC
 
 i = i + 2
 
 Wend
 
 
 
Else
 
 
MsgBox Range("A10").Value & " doit être " & Range("A11").Value & " " & Range("A12").Value
Exit Sub
 
 
End If
 
End Sub
Avec, pour être complet:

- en A13;
- en A14;
-
Code : Sélectionner tout - Visualiser dans une fenêtre à part
=SI(ET(A13=1;A14=0);"OK";"NOK")
en A15;
- Une MEFC d'après la valeur de B11, Barre de données.

Merci beaucoup d'avance.


PS: Question subsidiaire: existerait-il un moyen pour estimer un temps de traitement au début du code?????? (Excel peut tout faire a priori ;-)!!!!!)