Long datatype act as an Integer

Fermé
Pred - 20 déc. 2020 à 14:16
eriiic Messages postés 24595 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 2 septembre 2024 - 20 déc. 2020 à 18:59
Bonjour,

J'ai un petit problème de dépassement de capacité (Erreur 6) avec les types de variable Long depuis quelque temps. (En fait depuis le dernier update de Windows 10 version 19041.685)

Dim nn as long

nn = 36 * 36 * 36
--- VBA me donne une erreur 6 Dépassement de capacité

Toutefois si je fais ça en 2 étapes, ça fonctionne:
nn = 36 * 36
nn = nn * 36
--- Pas d'erreur 6

Quelqu'un a une idée

2 réponses

franc38 Messages postés 197 Date d'inscription mercredi 23 avril 2008 Statut Membre Dernière intervention 27 février 2023 38
20 déc. 2020 à 15:39
Bonjour
J'ai essayé et j'ai eu le même tour!!!!!
J'ai trouvé dans l'aide windows (mais j'ai pas compris)
https://docs.microsoft.com/fr-fr/office/vba/Language/Reference/User-Interface-Help/overflow-error-6
et en effet ça marche
  Dim nn As Long
nn = CLng(36) * CLng(36) * CLng(36)
MsgBox (nn)


A+ François
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 778
Modifié le 20 déc. 2020 à 17:17
Bonjour,

Par défaut de précision, 36 est un Integer d'où le problème (sinon voir lignes 14, 15, 16, 17) :
Sub test()
Dim I As Integer, L As Long, S As Single, D As Double, C As Currency, V As Variant, T As String
Dim nn As Long

  I = 36: L = 36: S = 36: D = 36: C = 36: V = 36: T = "36"
  
  ' Pas d'erreur
  nn = L * L * L
  nn = S * S * S
  nn = D * D * D
  nn = C * C * C
  nn = V * V * V
  nn = T * T * T
  nn = 36# * 36# * 36#
  nn = 36 * 36 * 36#
  nn = 36# * 36 * 36
  nn = 36& * 36 * 36
  nn = 36 * 36: nn = nn * 36
  nn = CLng(36) * CLng(36) * CLng(36)
  nn = CSng(36) * CSng(36) * CSng(36)
  nn = CDbl(36) * CDbl(36) * CDbl(36)
  nn = CCur(36) * CCur(36) * CCur(36)
  nn = CStr(36) * CStr(36) * CStr(36)
  
  ' Dépassements de capacité
  nn = 36 * 36 * 36
  nn = I * I * I
  nn = CInt(36) * CInt(36) * CInt(36)
  
End Sub



0
eriiic Messages postés 24595 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 2 septembre 2024 7 234
20 déc. 2020 à 18:59
Bonjour à tous,

ils font quand même de drôles de choix chez MS.
Il va falloir qu'ils changent de dealer, il leur refourgue de la m...
nn=36 * 36 * 36 il ne convertit pas .
Par contre nn = "36" * "36" * "36" là il convertit automatiquement.
eric
0