Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !
Function APRODUIT$(x$, y$)
'x et y sont de grands nombres entiers sous forme de textes
Dim a$, b$, n%, t$(9), z$
If Len(x) > Len(y) Then a = x: b = y Else a = y: b = x
For n = 9 To 1 Step -1 'pour obtenir le chiffre maximum
If InStr(b, n) Then Exit For
Next
For n = 1 To n
t(n) = ASOMME(t(n - 1), a)
Next
For n = Len(b) To 1 Step -1
APRODUIT = ASOMME(APRODUIT, t(CByte(Mid(b, n, 1))) & z)
z = z & "0"
Next
End Function
Function ASOMME$(x$, y$)
'x et y sont de grands nombres entiers sous forme de textes
Dim L%, n%, v$, ret As Byte
If Len(x) > Len(y) Then L = Len(x) Else L = Len(y)
If L > 10000 Then End 'sécurité
x = String(14 + L - Len(x), "0") & x
y = String(14 + L - Len(y), "0") & y
For n = L + 1 To 1 Step -14
v = CCur(Mid(x, n, 14)) + CCur(Mid(y, n, 14)) + ret
ASOMME = Right$("0000000000000" & v, 14) & ASOMME
ret = -(Len(v) = 15)
Next
For n = 1 To Len(ASOMME)
If CByte(Mid(ASOMME, n, 1)) Then ASOMME = Mid(ASOMME, n): Exit Function
Next
ASOMME = 0 'les 2 arguments sont nuls
End Function
Function APRODUIT$(x$, y$)
'x et y sont de grands nombres entiers sous forme de textes
Dim a$, b$, L%, m%, P$, n%, v$, ret As Currency, z$
If Len(x) > Len(y) Then a = x: b = y Else a = y: b = x
L = Len(a)
a = "00000000000000" & a
b = "0000000" & b
For m = Len(b) - 6 To 1 Step -7
P = ""
For n = L + 8 To 1 Step -7
v = CCur(Mid(a, n, 7)) * CCur(Mid(b, m, 7)) + ret
P = Right$("000000" & v, 7) & P
If Len(v) > 7 Then ret = CCur(Left(v, Len(v) - 7)) Else ret = 0
Next
APRODUIT = ASOMME(APRODUIT, P & z)
z = z & "0000000"
Next
End Function
Function APRODUIT$(x$, y$)
'x et y sont de grands nombres entiers sous forme de textes
Dim a$, b$, pas%, L%, n1%, m As Currency, P$, n2%, v$, ret As Currency, z$
If Len(x) > Len(y) Then a = x: b = y Else a = y: b = x
pas = IIf(Len(b) > 7, 7, 14 - Len(b))
a = "00000000000000" & a
b = "0000000" & b
L = Len(a) - pas + 1
For n1 = Len(b) - 6 To 1 Step -7
m = CCur(Mid(b, n1, 7))
P = ""
For n2 = L To 1 Step -pas
v = m * CCur(Mid(a, n2, pas)) + ret
P = Right$("0000000000000" & v, pas) & P
If Len(v) > pas Then ret = CCur(Left(v, Len(v) - pas)) Else ret = 0
Next
If APRODUIT = "" Then APRODUIT = Epure(P) Else APRODUIT = ASOMME(APRODUIT, P & z)
z = z & "0000000"
Next
End Function
(...)
Utilisée avec ma fonction APRODUIT, EXPONENTIELLE(2;30000) s'exécute en 2,3 secondes.
Je suis nettement battu, votre fonction est 3 fois plus rapide que la mienne 😀
Edit : mais curieusement avec FACTORIELLE(2000) je suis 2 à 3 fois plus rapide que vous 😕
(...)
Bonjour à tous
ROGER2327:
Je me charge illico-presto de tester sous XL2K3 😉
EDITIONI: J'ai sélectionné les cellules A2:A17 puis appuyer sur Calcule et... Excel 2003 (virtualisé je précise) est en train de rendre l'âme.
Regarde la pièce jointe 279547
EDITIONII: à 10h37, il agonise toujours, je vais donc lui appliquer un CTRL+ALT+SUPPR, afin de le ramener parmi nous
et je vais retester avec moins de cellules sélectionnées.
EDITIONIII:
Excel 2003 lâche la rampe quand je sélectionne la cellule A12
(Avec A2:A11 sélectionnées , pas de problème, c'est ensuite que les problèmes apparaissent, à partir de A12)
We use cookies and similar technologies for the following purposes:
Est ce que vous acceptez les cookies et ces technologies?
We use cookies and similar technologies for the following purposes:
Est ce que vous acceptez les cookies et ces technologies?