Function Pgcd2(ByVal A As Variant, ByVal B As Variant) As String 'permet le  renvoi du mode decimal
'Calcul le PGCD de deux nombres
'Variante optimisant l'Algo d'Euclide

'Déclarations
Dim R

'validité paramètre
If Len(A) > 28 Or Len(B) > 28 Then Pgcd2 = "#NOMBRE!": Exit Function 'les nombres <= 28 chiffres !
A = Int(Abs(CDec(A))) 'utilise le mode decimal à 28 chiffres
B = Int(Abs(CDec(B)))
If A = 0 And B = 0 Then Pgcd2 = "#NOMBRE!": Exit Function 'Pas de solution
If A < B Then R = CDec(B): B = A: A = R 'inverse les valeurs

'Calcul
Do While Abs(B) >= 1
R = A - Int(A / B + 0.5) * B 'permet le calcul modulo en mode decimal (28 chiffres) contrairement à r = a Mod b
A = B
B = R
Loop
Pgcd2 = Abs(A)

End Function