Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 VBA division : dépassement de capacité

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Bonjour,

Je ne comprends pas pourquoi je reçois une erreur de dépassement de capacité, alors que je voudrais juste diviser deux colonnes :


Les données sont bien numérique.
Merci pour votre aide !
 

Pièces jointes

  • test.xlsm
    270.3 KB · Affichages: 5
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonsoir.
Il est vraisemblable que vous ayez déclaré DernLigne ou i As Integer, c'est à dire comme entier signé sur 2 octets, qui ne peut supporter de valeur supérieure à 32767.
Si tel est le cas changez pour As Long.
Sinon joignez le classeur, qu'on puisse chercher une autre cause.
 

VBA_dev_Anne_Marie

XLDnaute Occasionnel

Bonjour,

Merci pour votre message, j'ai vérifié mais ça ne marche pas, j'ai joint le classeur à ma question.
 

JM27

XLDnaute Barbatruc
bonjour
As tu déja essayé de diviser zéro par une autre valeur ?
Diviser zéro par une valeur ou l'inverse : ca ne le fait pas

de plus il manque le point devant cells
.Cells(i, 3) = .Cells(i, 2) / .Cells(i, 4)
 

Dranreb

XLDnaute Barbatruc
J'ai dit dans la feuille "CALCUL", active lors du lancement, et donc assumée si non précisé devant les Cells par un point pour appliquer l'expression du With Worksheets("RESULTATS").
Là vous montrez ce qu'il y a dans "RESULTAT".
 

Dranreb

XLDnaute Barbatruc
Remarque: en ajoutant les points à .Cells(i, 3) = .Cells(i, 2) / .Cells(i, 4) pour que l'expression du With soit assumée au lieu de ActiveSheet, on tombe sur l'erreur pour i = 8275 où à cette ligne effectivement D = 0
 

Dranreb

XLDnaute Barbatruc
Je l'aurais écrit assez différemment, car je ne travaille jamais directement avec les cellules individuelles, c'est trop lent, toujours via des tableaux dynamiques :
VB:
Option Explicit
Sub Test()
   Dim Wsh As Worksheet, TD(), LMax As Long, TR(), L As Long
   On Error Resume Next
   Set Wsh = Worksheets("Résultats")
   If Err Then Err.Clear: Set Wsh = Worksheets("RESULTATS")
   If Err Then MsgBox "L'onglet ""RESULTAT"" n'existe pas dans le classeur actif.", _
      vbCritical, "Test": Exit Sub
   If Wsh.[C1].Value = "Coût" Then Wsh.Columns("C").Delete
   TD = Wsh.[B2].Resize(Wsh.[A1000000].End(xlUp).Row - 1, 2).Value
   LMax = UBound(TD, 1)
   ReDim TR(1 To LMax, 1 To 1)
   For L = 1 To LMax
      If TD(L, 2) <> 0 Then TR(L, 1) = TD(L, 1) / TD(L, 2)
      If Err Then
         Application.Goto Wsh.[B1:C1].Offset(L)
         MsgBox "Err " & Err & " sur :" & vbLf & TD(L, 1) & " / " & TD(L, 2) _
            & vbLf & Err.Description, vbCritical, "Test"
         Exit Sub: End If
      Next L
   Wsh.Columns("C").Insert
   With Wsh.[C1]: .Value = "Coût": .Interior.Color = RGB(0, 128, 0): End With
   Wsh.[C2].Resize(LMax).Value = TR
   End Sub
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…