Identifier la variable qui fait overflow

Résolu/Fermé
borntobealive Messages postés 138 Date d'inscription jeudi 17 juillet 2014 Statut Membre Dernière intervention 25 février 2019 - 30 juil. 2014 à 15:41
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 - 20 août 2014 à 18:01
Salut,

J'ai une macro VBA qui fait quelque chose d'étrange :

j'appuie sur F5 la macro part s'arrête sur une ligne (tjrs la même) et me met "overflow"

Je regarde les variables de la ligne en question avec add watch, elles ont toutes une valeur donc sans rien changer j'appuie sur F8 et le code s'execute sans problème

Je rappuie donc sur F5 et de temps en temps il s'arrete sur la même ligne ( elle fait partie d'une boucle) en me remettant overflow et je passe la ligne manuellement avec F8.

Question comment identifier la variable qui genere l'overflow ?

3 réponses

borntobealive Messages postés 138 Date d'inscription jeudi 17 juillet 2014 Statut Membre Dernière intervention 25 février 2019 7
30 juil. 2014 à 17:25
On est jamais mieux servi que par soi-même :
On ne peut pas convertir une variable d'un format vers le même format (dans mon cas
Cdat(blabla)

blalbla déjà au format date.

Une fois l'erreur corrigé tout roule

des bisoux
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
Modifié par Patrice33740 le 1/08/2014 à 16:20
Bonjour,

« On est jamais mieux servi que par soi-même » : C'est parfois vrai mais pas toujours, parfois on le croit et on se persuade d'avoir trouvé la solution,
par exemple : « On ne peut pas convertir une variable d'un format vers le même format » C'est absolument Faux !!!
Ce n'est pas ce qui a provoqué l'overflow (en français, dépassement de capacité).
C'est plutôt une mauvaise utilisation des variables (mauvaise déclaration ou pire, absence de déclaration)!!!
L'overflow se produit lorsqu'on tente d'affecter à une variable une valeur (ou une variable) qu'elle n'est pas capable de contenir (qui dépasse ses capacités)

Pour limiter les erreurs, il est très fortement conseillé de commencer chaque module par :
Option Explicit
.
, si cela n'empêche pas une mauvaise affectation qui provoquerait un overflow ça reduit le risque que cela se produise dans une boucle.

Cordialement
Patrice
0
borntobealive Messages postés 138 Date d'inscription jeudi 17 juillet 2014 Statut Membre Dernière intervention 25 février 2019 7
20 août 2014 à 12:07
il n'y avait aucune animosité dans mon propos (j'étais juste content d'avoir trouvé tout seul pour une fois)

je commence toujours par
option.explicit
au risque d'alourdir mes procedure parce que j'ai déjà été sermoné sur ce point.

les classeurs que je traite font exploser mes capacités en permanence ( j'ai déjà du réécrire la moitier de mes procédure pour passer de single à double et de integer à long...) donc je comprend bien ce que veut dire overflow mais il y a quand même eu un avant et un après modification (au pire on supprime le topic si je raconte des âneries comme ça je dérangerai personne)

tendresse et chocolat
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
20 août 2014 à 18:01
Bonjour,

Il n'y a pas non plu d'animosité dans mes propos.

Je tenais simplement à préciser (à toi et surtout aux futurs lecteurs de ce post résolu !) que l'origine de ton overflow n'est pas celle que tu donnes.

« convertir une variable d'un format vers le même format » est une opération tout à fait normale qui ne provoque pas d'erreur ni d'overflow,

Par contre il faut être certain que la variable à convertir est du même format (dans ton cas, qu'elle représente bien une date). Il est bien plus probable que le problème vienne de là.

Par exemple, ce n'est pas parce qu'une cellule est au format date qu'elle contient une date, la valeur 21/13/2014 sera un texte et provoquera l'overflow !.
En l'absence du fichier contenant le problème, il n'était pas possible de pousser l'analyse pour trouver la cause réelle.

Cordialement
Patrice
0