Depassement de capacité

Yaramoh -  
pijaku Messages postés 12263 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 8564 Date d'inscription   Statut Membre Dernière intervention   651
 
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 8564 Date d'inscription   Statut Membre Dernière intervention   651
 
Si tu cherches la valeur de la range, tape
.value
après.
0
Yaramoh > Pierre1310 Messages postés 8564 Date d'inscription   Statut Membre Dernière intervention  
 
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 8564 Date d'inscription   Statut Membre Dernière intervention   651
 
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 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
bonjour

--
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
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   Statut Modérateur Dernière intervention  
 
J'ai changé la declaration mais le probleme persiste
0
Frenchie83 Messages postés 2240 Date d'inscription   Statut Membre Dernière intervention   338
 
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 2240 Date d'inscription   Statut Membre Dernière intervention   338 > 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 8564 Date d'inscription   Statut Membre Dernière intervention   651
 
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   Statut Modérateur Dernière intervention   2 761
 
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