Option Explicit
Dim dA As Object, dB As Object
Dim Z#, AA#
Sub Calculs_Z_AA()
Dim f As Worksheet, i&, l&, Tableau(), Temp
'Désactivation des applications.
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
.EnableEvents = False
End With
Set f = Sheets("Echantillon")
'Nous définissons la dernière ligne et le tableau.
With f
l = .Cells.Find("*", , , , xlByRows, xlPrevious).Row
Tableau = .Range(.Cells(2, "A"), .Cells(l, "AA")).Value
End With
'Nous enregistrons les valeurs correspondantes à chaque numéro.
Call Enregistrement_Dictionnaires(Tableau)
'Nous allons boucler le tableau pour calculer les valeurs en Z et AA.
'Ces valeurs seront inscrites dans le tableau fictif.
For i = LBound(Tableau, 1) To UBound(Tableau, 1)
If Tableau(i, 5) = "Faux" Then
Tableau(i, 26) = "Faux"
Tableau(i, 27) = "Faux"
ElseIf Tableau(i, 5) <> "" Then
Temp = Split(Tableau(i, 5), "-")
Call Calcul_Z_AA(Temp)
Tableau(i, 26) = (Tableau(i, 14) + Z) ^ 2 + (Tableau(i, 15) + AA) ^ 2
Tableau(i, 27) = Tableau(i, 26) * 10
End If
Next i
'On extrait les valeurs dans la colonne Z et AA
f.Range("Z2").Resize(UBound(Tableau), 2).Value = Application.Index(Tableau, Evaluate("Row(" & LBound(Tableau) & ":" & UBound(Tableau) & ")"), Array(26, 27))
'Réactivation des applications.
With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
.EnableEvents = True
End With
End Sub
Sub Enregistrement_Dictionnaires(Tableau())
Dim i&
'Nous créons les deux dictionnaires.
Set dA = CreateObject("Scripting.Dictionary")
Set dB = CreateObject("Scripting.Dictionary")
'Nous enregistrons les valeurs E+F dans dA et G+H dans dB.
For i = LBound(Tableau, 1) To UBound(Tableau, 1)
If Tableau(i, 1) <> "" Then
dA(Tableau(i, 1)) = Tableau(i, 22) + Tableau(i, 23)
dB(Tableau(i, 1)) = Tableau(i, 24) + Tableau(i, 25)
End If
Next i
End Sub
Sub Calcul_Z_AA(Tableau As Variant)
Dim i&
'Nous remettons Z et AA à zéro.
Z = 0
AA = 0
'Nous allons boucler le tableau.
For i = LBound(Tableau) To UBound(Tableau)
Z = Z + dA(CDbl(Tableau(i)))
AA = AA + dB(CDbl(Tableau(i)))
Next i
End Sub