Dépassement de capacité inexpliqué

Bonjour,

Je suis autodidacte et nouveau sur le forum. Je me permets de vous soumettre une question de bas niveau, mais que je ne sais pas résoudre.

Le code concerné se trouve en pièce jointe.

1 - Objet du code

A partir de la liste des opérations bancaires du mois et du solde de la période précédente, l'utilitaire affiche le solde progressif du compte après chaque opération.

2 - Le contexte

Cet utilitaire tourne parfaitement avec excel 2007 sous windows.

Je suis passé sous mac avec office famille et étudiants 2019; C'est là que ça ne fonctionne plus.

3 - L'erreur rencontrée

A la validation du solde de la période précédente saisi dans l'inputbox, le message suivant s'affiche :"erreur 6 - dépassement de capacité".

Merci par avance pour votre aide.

18calcul-de-solde.rtf (903.00 Octets)

Bonjour,

Essaies :

Solde_depart = Application.InputBox(Prompt:="Solde du mois précédent ?", Type:=1)

Bonjour,

Merci pour cette réponse très rapide.

La solution proposée fonctionne parfaitement 👍

J’aimerais tout de même comprendre le pourquoi du problème, et là, j’aurai (un peu) progressé 🐌

Bien cordialement,

Bernard

J’aimerais tout de même comprendre le pourquoi du problème, et là, j’aurai (un peu) progressé 🐌

Bonjour,
C'est un problème de typage des variables

Ton code d'origine tu as écrit :

Solde_depart = InputBox("Solde du mois précédent ?")

C'est l'équivalent de :

 Solde_depart = VBA.Interaction.InputBox("Solde du mois précédent ?")

C'est à dire que tu utilises l'inputbox du VBA, qui renvoie une variable de type String, mais ta variable Solde_depart est déclarée de type Double.

L'erreur survient lors du transtypage implicite effectué par le VBA lorsqu'il rencontre l'opérateur = pour affecter le String provenant de l'inputbox à la variable de type Double.

Mon code utilise l'InputBox d'Excel qui permet de typer la variable renvoyée (Type:=1 renvoie une variable numérique) donc pas de transtypage et pas d'erreur.

La différence fondamentale est que celui du VBA attend un nombre en syntaxe US (avec point) alors que celui d'Excel attend une syntaxe locale (avec virgule).

Voir l'aide de chaque Inputbox :

Fonction InputBox (Visual Basic pour Applications) | Microsoft Docs

Méthode Application.InputBox (Excel) | Microsoft Docs

Bonjour,

Merci pour cette explication.

En modifiant le type de la variable Solde_précédent (intéger, long, variant), j’observe que mon code fonctionne, seul le type « double » générant un dépassement de capacité.

Sachant par ailleurs que « double » est parfaitement accepté par excel 2007, il subsiste une part de mystère que je renonce à essayer d’expliquer.

Merci infiniment pour ton aide

En modifiant le type de la variable Solde_précédent (intéger, long, variant), j’observe que mon code fonctionne, seul le type « double » générant un dépassement de capacité.

C'est normal :
- les types integer et long reçoivent des nombres entiers (sans partie décimale)
- le type variant reçoit le texte de l'inputbox
- le type double est un format binaire à virgule flottante en double précision. Il représente toujours les nombres avec des décimales

Rechercher des sujets similaires à "depassement capacite inexplique"