Depassement de capacité

Yaramoh -  
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   -
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

4 réponses

Pierre1310 Messages postés 8854 Statut Membre 652
 
Salut,

Si tu nous donnais la ligne et que tu mettais ton code dans un balise
basic
...
0
Yaramoh
 
L'erreur se situe a ce niveau
/M2 = CLng(a * 1000 / range("Nm")) /
0
Pierre1310 Messages postés 8854 Statut Membre 652
 
Si tu cherches la valeur de la range, tape
.value
après.
0
Yaramoh > Pierre1310 Messages postés 8854 Statut Membre
 
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 8854 Statut Membre 652
 
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
Yaramoh
 
Non la colone Nm intervient plusieurs fois dans le calcule
0
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 763
 
bonjour

--
0
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 763
 
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 13513 Date d'inscription   Statut Modérateur Dernière intervention  
 
J'ai changé la declaration mais le probleme persiste
0
Frenchie83 Messages postés 2254 Statut Membre 339
 
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
Yaramoh
 
L'erreur vient de M1 M2 M3 M4 M5 M6
0
Frenchie83 Messages postés 2254 Statut Membre 339 > Yaramoh
 
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 8854 Statut Membre 652
 
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 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 763
 
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