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

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

    --
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
      1. 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
  3. 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
    1. Yaramoh
       
      L'erreur vient de M1 M2 M3 M4 M5 M6
      0
      1. 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
    2. 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
  4. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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