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
| Sub TESTER()
Dim Bi As Double, Ci As Double, Bii As Double, Cii As Double, Di As Double, P As Double
Dim CTR As Integer, Limit As Integer
Dim LastLig As Long, i As Long
Dim Encore As Boolean
Dim S As Single
Dim Tb
Application.ScreenUpdating = False
Limit = 2000 'Limite des itérations pour éviter la boucle infinie en cas de divergence
S = Timer 'Pour compter le temps d'exécution
P = Application.Pi() 'Ici j'ai pris Pi comme variable pour P
With Worksheets("Feuil1")
LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
Tb = .Range("A1:C" & LastLig)
Do
Encore = False
For i = 1 To UBound(Tb, 1) - 1
Bi = Tb(i, 2)
Ci = Tb(i, 3)
Bii = Tb(i + 1, 2)
Cii = Tb(i + 1, 3)
Di = Bi * Cii * (P + Ci) - Bii * Ci * (P + Cii)
If Di > 0 Then
Permut Tb, i, i + 1
Encore = True
End If
Next i
CTR = CTR + 1
Loop Until Not Encore Or CTR >= Limit
.Range("A1:C" & LastLig) = Tb
End With
If CTR = Limit Then
MsgBox "Solution non trouvée en " & CTR & " boucles (" & Timer - S & " secondes)"
Else
MsgBox "Traitement terminé en " & CTR & " boucles (" & Timer - S & " secondes)"
End If
End Sub
'Permet de permuter les lignes i et j
Private Sub Permut(T As Variant, i As Long, j As Long)
Dim Tmp As Double
Dim k As Byte
For k = 1 To UBound(T, 2)
Tmp = T(i, k)
T(i, k) = T(j, k)
T(j, k) = Tmp
Next k
End Sub |
Partager