Depassement de capacité

Fermé
Yaramoh - 20 juil. 2016 à 11:45
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 25 juil. 2016 à 10:56
Bonjour, je ne sais pas pourquoi je reçois un msg d'erreur me disant " erreur d'execution 6" pourtant mes variable sont tous de type Long
Expliquer moi mon Erreur SVP

Function calcul_prime_totale_junior()
Dim a, M1, M2, M3, M4, M5, M6 As Long
'premier plus
If range("Ne") > range("Pj") Then
If range("Ne") - range("Nm") > 0 Then
a = range("Nm")
Else
a = range("Ne")
End If
M1 = CLng(a * 4 / range("Nm") * 1000)
Else
If range("Ne") - range("Nm") > 0 Then
a = range("Nm")
Else
a = range("Ne")
End If
M1 = CLng(a * 1000)
End If
'deuxième plus
If range("Ne") > range("Pj") Then
If range("Ne") - range("Nm") - (range("Nm") * range("Nm")) > 0 Then
a = CLng(range("Nm") * range("Nm"))
Else
a = CLng(range("Ne") - range("Nm"))
If a > 0 Then
If range("Ne") - range("Nm") - (range("Nm") * range("Nm")) > 0 Then
a = CLng(range("Nm") * range("Nm"))
Else
a = CLng(range("Ne") - range("Nm"))
End If
Else
a = 0
End If
End If
M2 = CLng((a * 4 * 1000 / range("Nm")) / range("Nm"))
Else
If range("Ne") - range("Nm") - (range("Nm") * range("Nm")) > 0 Then
a = range("Nm")
Else
a = CLng(range("Ne") - range("Nm"))
If a > 0 Then
If range("Ne") - range("Nm") - (range("Nm") * range("Nm")) > 0 Then
a = range("Nm") * range("Nm")
Else
a = CLng(range("Ne") - range("Nm"))
End If
Else
a = 0
End If
M2 = CLng(a * 1000 / range("Nm"))
End If
End If
'troisième plus
If range("Ne") > range("Pj") Then
If range("Ne") - range("Nm") - (range("Nm") * range("Nm")) > 0 Then
a = range("Nm") * range("Nm")
Else
a = range("Ne") - range("Nm")
If a > 0 Then
If range("Ne") - range("Nm") - (range("Nm") * range("Nm")) > 0 Then
a = range("Nm") * range("Nm")
Else
a = range("Ne") - range("Nm")
End If
Else
a = 0
End If
End If
M3 = CLng(a * 4 / range("Nm")) * 1000
Else
If range("Ne") - range("Nm") - (range("Nm") * range("Nm")) > 0 Then
a = range("Nm") * range("Nm")
Else
a = range("Ne") - range("Nm")
If a > 0 Then
If range("Ne") - range("Nm") - (range("Nm") * range("Nm")) > 0 Then
a = range("Nm") * range("Nm")
Else
a = range("Ne") - range("Nm")
End If
Else
a = 0
End If
M3 = CLng(a * 1000)
End If
End If
'quatrième plus
If range("Ne") > range("Pj") Then
If range("Ne") - range("Nm") - (range("Nm") * range("Nm")) - (range("Nm") * range("Nm") * range("Nm")) > 0 Then
a = range("Nm") * range("Nm") * range("Nm")
Else
a = range("Ne") - range("Nm") - (range("Nm") * range("Nm"))
If a > 0 Then
If range("Ne") - range("Nm") - (range("Nm") * range("Nm")) - (range("Nm") * range("Nm") * range("Nm")) > 0 Then
a = range("Nm") * range("Nm") * range("Nm")
Else
a = range("Ne") - range("Nm") - (range("Nm") * range("Nm"))
End If
Else
a = 0
End If
End If
M4 = CLng(a * 4 / range("Nm") * 1000 / (range("Nm") * range("Nm")))
Else
If range("Ne") - range("Nm") - (range("Nm") * range("Nm")) - (range("Nm") * range("Nm") * range("Nm")) > 0 Then
a = range("Nm") * range("Nm") * range("Nm")
Else
a = range("Ne") - range("Nm") - (range("Nm") * range("Nm"))
If a > 0 Then
If range("Ne") - range("Nm") - (range("Nm") * range("Nm")) - (range("Nm") * range("Nm") * range("Nm")) > 0 Then
a = range("Nm") * range("Nm") * range("Nm")
Else
a = range("Ne") - range("Nm") - (range("Nm") * range("Nm"))
End If
Else
a = 0
End If
M4 = CLng((a * 1000 / range("Nm")) / range("Nm"))
End If
End If
'cinquième plus
If range("Ne") > range("I5") Then
If range("Ne") - range("Nm") - (range("Nm") * range("Nm")) - range("Nm") * range("Nm") * range("Nm") > 0 Then
a = range("Nm") * range("Nm") * range("Nm")
Else
a = range("Ne") - range("Nm") - (range("Nm") * range("Nm"))
If a > 0 Then
If range("Ne") - range("Nm") - (range("Nm") * range("Nm")) - (range("Nm") * range("Nm") * range("Nm")) > 0 Then
a = range("Nm") * range("Nm") * range("Nm")
Else
a = range("Ne") - range("Nm") - (range("Nm") * range("Nm"))
End If
Else
a = 0
End If
End If
M5 = CLng(a * (4 * 1000 / range("Nm")) / range("Nm"))
Else
If range("Ne") - range("Nm") - (range("Nm") * range("Nm")) - (range("Nm") * range("Nm") * range("Nm")) > 0 Then
a = range("Nm") * range("Nm") * range("Nm")
Else
a = range("Ne") - range("Nm") - (range("Nm") * range("Nm"))
If a > 0 Then
If range("Ne") - range("Nm") - (range("Nm") * range("Nm")) - (range("Nm") * range("Nm") * range("Nm")) > 0 Then
a = range("Nm") * range("Nm") * range("Nm")
Else
a = range("Ne") - range("Nm") - (range("Nm") * range("Nm"))
End If
Else
a = 0
End If
M5 = CLng(a * 1000 / range("Nm"))
End If
End If
'sixième plus

If range("Ne") > range("Pj") Then
If range("Ne") - range("Nm") - (range("Nm") * range("Nm")) - (range("Nm") * range("Nm") * range("Nm")) > 0 Then
a = range("Nm") * range("Nm") * range("Nm")
Else
a = range("Ne") - range("Nm") - (range("Nm") * range("Nm"))
If a > 0 Then
If range("Ne") - range("Nm") - (range("Nm") * range("Nm")) - (range("Nm") * range("Nm") * range("Nm")) > 0 Then
a = range("Nm") * range("Nm") * range("Nm")
Else
a = range("Ne") - range("Nm") - (range("Nm") * range("Nm"))
End If
Else
a = 0
End If
End If
M6 = CLng(a * 4 / range("Nm") * 1000)
Else
If range("Ne") - range("Nm") - (range("Nm") * range("Nm")) - 27 > 0 Then
a = range("Nm") * range("Nm") * range("Nm")
Else

a = range("Ne") - range("Nm") - (range("Nm") * range("Nm"))
If a > 0 Then
If range("Ne") - range("Nm") - (range("Nm") * range("Nm")) - (range("Nm") * range("Nm") * range("Nm")) > 0 Then
a = range("Nm") * range("Nm") * range("Nm")
Else
a = range("Ne") - range("Nm") - (range("Nm") * range("Nm"))
End If
Else
a = 0
End If
M6 = CLng(a * 1000)
End If
End If
range("Ptj") = CLng(M1 + M2 + M3 + M4 + M5 + M6)
End Function
Aidez moi
Function calcul_prime_totale_junior()
Dim a, M1, M2, M3, M4, M5, M6 As Long
'premier plus
If range("Ne") > range("Pj") Then
If range("Ne") - range("Nm") > 0 Then
a = range("Nm")
Else
a = range("Ne")
End If
M1 = CLng(a * 4 / range("Nm") * 1000)
Else
If range("Ne") - range("Nm") > 0 Then
a = range("Nm")
Else
a = range("Ne")
End If
M1 = CLng(a * 1000)
End If
'deuxième plus
If range("Ne") > range("Pj") Then
If range("Ne") - range("Nm") - (range("Nm") * range("Nm")) > 0 Then
a = CLng(range("Nm") * range("Nm"))
Else
a = CLng(range("Ne") - range("Nm"))
If a > 0 Then
If range("Ne") - range("Nm") - (range("Nm") * range("Nm")) > 0 Then
a = CLng(range("Nm") * range("Nm"))
Else
a = CLng(range("Ne") - range("Nm"))
End If
Else
a = 0
End If
End If
M2 = CLng((a * 4 * 1000 / range("Nm")) / range("Nm"))
Else
If range("Ne") - range("Nm") - (range("Nm") * range("Nm")) > 0 Then
a = range("Nm")
Else
a = CLng(range("Ne") - range("Nm"))
If a > 0 Then
If range("Ne") - range("Nm") - (range("Nm") * range("Nm")) > 0 Then
a = range("Nm") * range("Nm")
Else
a = CLng(range("Ne") - range("Nm"))
End If
Else
a = 0
End If
M2 = CLng(a * 1000 / range("Nm"))
End If
End If
'troisième plus
If range("Ne") > range("Pj") Then
If range("Ne") - range("Nm") - (range("Nm") * range("Nm")) > 0 Then
a = range("Nm") * range("Nm")
Else
a = range("Ne") - range("Nm")
If a > 0 Then
If range("Ne") - range("Nm") - (range("Nm") * range("Nm")) > 0 Then
a = range("Nm") * range("Nm")
Else
a = range("Ne") - range("Nm")
End If
Else
a = 0
End If
End If
M3 = CLng(a * 4 / range("Nm")) * 1000
Else
If range("Ne") - range("Nm") - (range("Nm") * range("Nm")) > 0 Then
a = range("Nm") * range("Nm")
Else
a = range("Ne") - range("Nm")
If a > 0 Then
If range("Ne") - range("Nm") - (range("Nm") * range("Nm")) > 0 Then
a = range("Nm") * range("Nm")
Else
a = range("Ne") - range("Nm")
End If
Else
a = 0
End If
M3 = CLng(a * 1000)
End If
End If
'quatrième plus
If range("Ne") > range("Pj") Then
If range("Ne") - range("Nm") - (range("Nm") * range("Nm")) - (range("Nm") * range("Nm") * range("Nm")) > 0 Then
a = range("Nm") * range("Nm") * range("Nm")
Else
a = range("Ne") - range("Nm") - (range("Nm") * range("Nm"))
If a > 0 Then
If range("Ne") - range("Nm") - (range("Nm") * range("Nm")) - (range("Nm") * range("Nm") * range("Nm")) > 0 Then
a = range("Nm") * range("Nm") * range("Nm")
Else
a = range("Ne") - range("Nm") - (range("Nm") * range("Nm"))
End If
Else
a = 0
End If
End If
M4 = CLng(a * 4 / range("Nm") * 1000 / (range("Nm") * range("Nm")))
Else
If range("Ne") - range("Nm") - (range("Nm") * range("Nm")) - (range("Nm") * range("Nm") * range("Nm")) > 0 Then
a = range("Nm") * range("Nm") * range("Nm")
Else
a = range("Ne") - range("Nm") - (range("Nm") * range("Nm"))
If a > 0 Then
If range("Ne") - range("Nm") - (range("Nm") * range("Nm")) - (range("Nm") * range("Nm") * range("Nm")) > 0 Then
a = range("Nm") * range("Nm") * range("Nm")
Else
a = range("Ne") - range("Nm") - (range("Nm") * range("Nm"))
End If
Else
a = 0
End If
M4 = CLng((a * 1000 / range("Nm")) / range("Nm"))
End If
End If
'cinquième plus
If range("Ne") > range("I5") Then
If range("Ne") - range("Nm") - (range("Nm") * range("Nm")) - range("Nm") * range("Nm") * range("Nm") > 0 Then
a = range("Nm") * range("Nm") * range("Nm")
Else
a = range("Ne") - range("Nm") - (range("Nm") * range("Nm"))
If a > 0 Then
If range("Ne") - range("Nm") - (range("Nm") * range("Nm")) - (range("Nm") * range("Nm") * range("Nm")) > 0 Then
a = range("Nm") * range("Nm") * range("Nm")
Else
a = range("Ne") - range("Nm") - (range("Nm") * range("Nm"))
End If
Else
a = 0
End If
End If
M5 = CLng(a * (4 * 1000 / range("Nm")) / range("Nm"))
Else
If range("Ne") - range("Nm") - (range("Nm") * range("Nm")) - (range("Nm") * range("Nm") * range("Nm")) > 0 Then
a = range("Nm") * range("Nm") * range("Nm")
Else
a = range("Ne") - range("Nm") - (range("Nm") * range("Nm"))
If a > 0 Then
If range("Ne") - range("Nm") - (range("Nm") * range("Nm")) - (range("Nm") * range("Nm") * range("Nm")) > 0 Then
a = range("Nm") * range("Nm") * range("Nm")
Else
a = range("Ne") - range("Nm") - (range("Nm") * range("Nm"))
End If
Else
a = 0
End If
M5 = CLng(a * 1000 / range("Nm"))
End If
End If
'sixième plus

If range("Ne") > range("Pj") Then
If range("Ne") - range("Nm") - (range("Nm") * range("Nm")) - (range("Nm") * range("Nm") * range("Nm")) > 0 Then
a = range("Nm") * range("Nm") * range("Nm")
Else
a = range("Ne") - range("Nm") - (range("Nm") * range("Nm"))
If a > 0 Then
If range("Ne") - range("Nm") - (range("Nm") * range("Nm")) - (range("Nm") * range("Nm") * range("Nm")) > 0 Then
a = range("Nm") * range("Nm") * range("Nm")
Else
a = range("Ne") - range("Nm") - (range("Nm") * range("Nm"))
End If
Else
a = 0
End If
End If
M6 = CLng(a * 4 / range("Nm") * 1000)
Else
If range("Ne") - range("Nm") - (range("Nm") * range("Nm")) - 27 > 0 Then
a = range("Nm") * range("Nm") * range("Nm")
Else

a = range("Ne") - range("Nm") - (range("Nm") * range("Nm"))
If a > 0 Then
If range("Ne") - range("Nm") - (range("Nm") * range("Nm")) - (range("Nm") * range("Nm") * range("Nm")) > 0 Then
a = range("Nm") * range("Nm") * range("Nm")
Else
a = range("Ne") - range("Nm") - (range("Nm") * range("Nm"))
End If
Else
a = 0
End If
M6 = CLng(a * 1000)
End If
End If
range("Ptj") = CLng(M1 + M2 + M3 + M4 + M5 + M6)
End Function
A voir également:

4 réponses

Pierre1310 Messages postés 8554 Date d'inscription lundi 21 décembre 2015 Statut Membre Dernière intervention 21 juillet 2020 645
20 juil. 2016 à 11:47
Salut,

Si tu nous donnais la ligne et que tu mettais ton code dans un balise
basic
...
0
L'erreur se situe a ce niveau
/M2 = CLng(a * 1000 / range("Nm")) /
0
Pierre1310 Messages postés 8554 Date d'inscription lundi 21 décembre 2015 Statut Membre Dernière intervention 21 juillet 2020 645
20 juil. 2016 à 12:21
Si tu cherches la valeur de la range, tape
.value
après.
0
Yaramoh > Pierre1310 Messages postés 8554 Date d'inscription lundi 21 décembre 2015 Statut Membre Dernière intervention 21 juillet 2020
20 juil. 2016 à 12:33
Non je ne cherche pas la valeur des range, je cherche pourquoi on m'envoie un message d'erreur me disant "depassement de capacité " pourtant j'ai declarer toutes mes variable de type Long
0
Pierre1310 Messages postés 8554 Date d'inscription lundi 21 décembre 2015 Statut Membre Dernière intervention 21 juillet 2020 645
20 juil. 2016 à 12:38
Tu veux rentrer 1000 fois toutes les données de la colonne Nm, il y a surement un dépassement de capacité car c'est tout l'objet que tu utilises la ....
0
Non la colone Nm intervient plusieurs fois dans le calcule
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
20 juil. 2016 à 13:12
bonjour

--
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
20 juil. 2016 à 13:14
La déclaration des variables est mauvaise. En VBA, on type chaque variable. Comme ceci :
Dim a As Long, M2 As Long, M3 As Long

--
0
Yaramoh > pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024
20 juil. 2016 à 13:19
J'ai changé la declaration mais le probleme persiste
0
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 337
20 juil. 2016 à 13:44
Bonjour à tous
Mettez un point d'arrêt sur la ligne en défaut et relevez les valeurs de "a" et de "Nm"
ça peut vous aider à déterminer d'où vient l'erreur
Cdlt
0
L'erreur vient de M1 M2 M3 M4 M5 M6
0
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 337 > Yaramoh
20 juil. 2016 à 14:04
Je reprends ce que j'ai cru lire un peu plus haut
L'erreur se situe a ce niveau
/M2 = CLng(a * 1000 / range("Nm")) /

Avez-vous mis le point d'arrêt et relevé les valeurs comme demandé précédemment?
0
Pierre1310 Messages postés 8554 Date d'inscription lundi 21 décembre 2015 Statut Membre Dernière intervention 21 juillet 2020 645
20 juil. 2016 à 14:06
A mon avis tu lui en demande trop, comme je te l'ai dis plus haut,
range("Nm")
contient une valeur mais aussi X objets supplémentaires que tu demandes.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
Modifié par pijaku le 25/07/2016 à 10:57
Bonjour,

Après réflexion, il s'agit surement d'un problème de distributivité de la division par rapport à la multiplication.
Prenons cette formule mathématique par exemple :
M1 = CLng(a * 4 / range("Nm") * 1000)

Si a = 1 000 000 et que Range("Nm") contient 1, quel devrait être le résultat?
Ici Excel calcule cette formule comme ceci :
D'abord la division :
4 / range("Nm") ==> 4
Ensuite les multiplications
1 000 000 x 4 x 1000 ==> 4 000 000 000
=====> Dépassement de capacité !
pour mémoire : Long : Stocke les nombres compris entre -2 147 483 648 et 2 147 483 647
C'est comme si tu avais écrit :
M1 = CLng(a * (4 / range("Nm")) * 1000)


Maintenant, si le résultat doit être :
4 000 000 / 1000 => 4 000, il convient d'utiliser la formule :
M1 = CLng((a * 4) / (range("Nm") * 1000))


Quoiqu'il en soit, ajouter des parenthèses, qui peuvent, mathématiquement parlant, sembler inutile, n'est pas un luxe en Excel et en VBA...

Avant, j'arrivais jamais à finir mes phrases... mais maintenant je
0