Dépassement de capacité ? / Res = (7 * 3600) + ((62 * 3600) / 100)

laurent950

XLDnaute Accro
Bonsoir le Forum,

Je veux transformer 7h62 centièmes en seconde :

Donc en VBA = pour stocké le Résultat en secondes dans une variable Res :

- j’ai le message suivant (Dépassement de capacité) je ne comprends pas ? le calcul est simple !!

Sub test()

Res = (7 * 3600) + ((62 * 3600) / 100)

Cells(1, 1) = Res

End Sub

Je vous remercie pour votre aide.

Laurent
 

Pièces jointes

  • Depassement de capacité.xlsm
    13.2 KB · Affichages: 35
Dernière édition:

Littledave

XLDnaute Junior
Re : Dépassement de capacité ? / Res = (7 * 3600) + ((62 * 3600) / 100)

Salut Laurent,

En effet ton calcul retourne Dépassement de capacité.
Cependant tu peux réduire ton calcul en faisant Res= 7*3600+62*36
Et là le calcul ne retourne aucun dépassement de capacité ;-)

Je pense que c'est le calcul 62*3600 qui pose problème, il est en dehors des plages Integer (voir si c'est le type par défaut en vba d'un nombre ?)

Si tu veux conserver à tout prix cette formulation alors écrit la comme suit :

Res = (7*3600)+((62*clng(3600))/100)

Et là, idem, plus d'erreur de dépassement de capacité
@++
David
 
Dernière édition:

laurent950

XLDnaute Accro
Re : Dépassement de capacité ? / Res = (7 * 3600) + ((62 * 3600) / 100)

Bonsoir David,

Je vous remercie pour cette réponse, je pensais que je vous pouvais stoker ce calcule dans cette variable, certes je retiens votre solution, mais peut être que vous avez une réponse a ce dépassement de capacité ? Car là je ne comprends vraiment plus.

Merci

Laurent
 

Habitude

XLDnaute Accro
Re : Dépassement de capacité ? / Res = (7 * 3600) + ((62 * 3600) / 100)

Bonjour

Excel tente d'évaluer ton opération sur un integer! Je n'ai pas compris pourquoi.

Voici comme tu peux le contourner

Sub test()
Const baseHoraire = 60
Cells(1, 1) = (7 * baseHoraire ^ 2) + (62 * baseHoraire ^ 2 / 100)
End Sub
 

Littledave

XLDnaute Junior
Re : Dépassement de capacité ? / Res = (7 * 3600) + ((62 * 3600) / 100)

Re,

Ce n'est pas ton calcul qui est en cause mais bien VBA qui gère les calculs arithmétiques avec des nombres entier, et ce malgré le fait que tu déclares ou non avant ta variable de type long ou autre. Il faut pour contourner ce défaut de VBA transformer l'un des membres de la formule grâce à la fonction clng.

Ainsi si tu transformes ta formule par celle-ci dessous, jamais tu n'auras de dépassement de capacité :

Res = (7 * clng(3600))+((62 * clng(3600))/100)

Après tu pourras écrire utiliser ta variable Res comme bon te semble

Ton code modifié ci dessous :

Code:
Sub test()

Res = (7 * cLng(3600)) + ((62 * cLng(3600)) / 100)

Cells(1, 1) = Res

End Sub
[

En espérant avoir répondu plus profondément à ta question

@++
David
 

Dranreb

XLDnaute Barbatruc
Re : Dépassement de capacité ? / Res = (7 * 3600) + ((62 * 3600) / 100)

Bonsoir.
L'explication tient en les deux circonstances suivantes:
1) - En l’absence de suffixe de type, les constantes entières sont des Integer s'ils sont inférieur à 32767.
2) - Une expression est évaluée dans le type de l'opérande qui tolère la plus grande capacité ou la plus grande précision.
On reste donc en Integer puisque tous les opérandes sont spécifiés Integer. Or 62 * 3600 dépasse 32767.
62& * 3600 passait. Le suffixe "&" impose en effet de considérer la constante Long et non Integer.
Cordialement.
 

laurent950

XLDnaute Accro
Re : Dépassement de capacité ? / Res = (7 * 3600) + ((62 * 3600) / 100)

Mercie, Habitude et David,

Vos deux explications sont très claires. Je ne pouvais pas deviner mais à présent je serais comment faire pour contourner ce genre de soucie.

Je vous souhaite une bonne fin de soirée et je vais finaliser mon code.

PS pour DRANREB: Votre message est arrivé entre temps et cela faisait longtemps que je ne vous avez pas croisé sur le forum, je vous remercie pour votre explication qui est vraiment très précise. Je vous remercie pour votre efficacité et votre grande connaissance dans les divers problèmes que l'on peut rencontrer sur le Forum.

Laurent
 
Dernière édition:

Discussions similaires

Réponses
7
Affichages
377

Statistiques des forums

Discussions
312 366
Messages
2 087 641
Membres
103 627
dernier inscrit
nabil