Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème mystérieux

5 réponses
Avatar
Patrice Henrio
Le code suivant s'exécute sur le même fichier en VBA et en VB mais ne donne
pas le même résultat !!!

Open CHEMIN & "LIMES.LST" For Binary As #1
NbLLimes = LOF(1) / Len(LLimes)
ReDim TabLLimes(1 To NbLLimes)
Get 1, , TabLLimes
Close

Je précise que NbLLimes est un long et que LLimes est un type défini et
TabLLimes est un tableau dynamique
Le type défini est

Public Type tListeLimes
NuméroLimes As Long 'Le numéro du limes dans le tableau des
limes
SensPositif As Boolean 'si SensPositif est Vrai, le Limes est
dessiné du premier au
'dernier point, dans l'autre sens
sinon.
End Type

En VB on trouve
0,V
0,V
0,V
4,V
5,V

(ce sont les bonnes valeurs)

En VBA
0,V
-65536,F
327679,F
5,V

Si on traduit tout cela en octet

En VB 0,0,0,0,ff,ff,0,0,0,0,ff,ff,0,0,0,0,ff,ff,0,0,0,4,ff,ff,0,0,0,5,ff,ff

En VBA 0,0,0,0,ff,ff,ff,ff,0,0,0,0,0,4,ff,ff,0,0,0,0,0,5,ff,ff

Qui a une idée ?

5 réponses

Avatar
Patrice Henrio
"Patrice Henrio" a écrit dans le message de
news:
Le code suivant s'exécute sur le même fichier en VBA et en VB mais ne
donne pas le même résultat !!!

Open CHEMIN & "LIMES.LST" For Binary As #1
NbLLimes = LOF(1) / Len(LLimes)
ReDim TabLLimes(1 To NbLLimes)
Get 1, , TabLLimes
Close

Je précise que NbLLimes est un long et que LLimes est un type défini et
TabLLimes est un tableau dynamique
Le type défini est

Public Type tListeLimes
NuméroLimes As Long 'Le numéro du limes dans le tableau
des limes
SensPositif As Boolean 'si SensPositif est Vrai, le Limes est
dessiné du premier au
'dernier point, dans l'autre sens
sinon.
End Type

En VB on trouve
0,V
0,V
0,V
4,V
5,V

(ce sont les bonnes valeurs)

En VBA
0,V
-65536,F
327679,F
5,V

Si on traduit tout cela en octet

En VB
0,0,0,0,ff,ff,0,0,0,0,ff,ff,0,0,0,0,ff,ff,0,0,0,4,ff,ff,0,0,0,5,ff,ff

En VBA 0,0,0,0,ff,ff,ff,ff,0,0,0,0,0,4,ff,ff,0,0,0,0,0,5,ff,ff

Qui a une idée ?





Pour ajouter à la perplexité je précise que la variable NbLLimes a la même
valeur dans les deux cas, et qu'une manip de ce genre avec un type de
données de 9 octets passe sans problème.
Avatar
Fred
http://www.cerbermail.com/?3kA6ftaCvT
"Patrice Henrio" a écrit dans le message de
news:%

"Patrice Henrio" a écrit dans le message


de
news:
> Le code suivant s'exécute sur le même fichier en VBA et en VB mais


ne
> donne pas le même résultat !!!



Bonjour Patrice,

Sur le même fichier (à priori) de 30 octets, cela passe chez moi en VBA.
En version Office 2003.
Je n'ai pas le vb6 installé ici pour tester.
Vérifie la taille de ton fichier. Je ne vois que cela qui peut différer
entre ton test et le mien.
(Ou alors la déclaration de LLimes qui ne figure pas dans ton code)


--
Fred
http://www.cerbermail.com/?3kA6ftaCvT
Avatar
Patrice Henrio
La taille du fichier est de 10 KO (je n'ai donné que le début). La
déclaration est faite et de toutes façons redim a la fonction d'un dim
(c'est aussi une déclaration de variable)
Et pire sans rien changer cela marche ce matin comme il y deux jours.
Peut-être l'oubli d'un erase qui perturbe sa gestion du tas ?
Je n'ai rien trouvé de cohérent même si la structure lue semble suivre une
logique précise.
En tout cas cela reste bien mystérieux.

"Fred" a écrit dans le message de news:

http://www.cerbermail.com/?3kA6ftaCvT
"Patrice Henrio" a écrit dans le message de
news:%

"Patrice Henrio" a écrit dans le message


de
news:
> Le code suivant s'exécute sur le même fichier en VBA et en VB mais


ne
> donne pas le même résultat !!!



Bonjour Patrice,

Sur le même fichier (à priori) de 30 octets, cela passe chez moi en VBA.
En version Office 2003.
Je n'ai pas le vb6 installé ici pour tester.
Vérifie la taille de ton fichier. Je ne vois que cela qui peut différer
entre ton test et le mien.
(Ou alors la déclaration de LLimes qui ne figure pas dans ton code)


--
Fred
http://www.cerbermail.com/?3kA6ftaCvT



Avatar
Fred
Dans le message:,
Patrice Henrio écrit:
La taille du fichier est de 10 KO (je n'ai donné que le début).



Oui, je voulais surtout signaler qu'il peut être bon de vérifier la
taille en octets du fichier pour voir si elle correspond bien au nombre
d'enregistrements stockés (x6 la taille attendue d'un enregistrement)
:-)

La déclaration est faite et de toutes façons redim a la fonction d'un
dim
(c'est aussi une déclaration de variable)



C'est LLimes et non TabLLimes qui manquait dans ton bout de code. Et
comme cela intervient dans le calcul du ReDim ... D'où ma supposition.

Et pire sans rien changer cela marche ce matin comme il y deux jours.
Peut-être l'oubli d'un erase qui perturbe sa gestion du tas ?
Je n'ai rien trouvé de cohérent même si la structure lue semble
suivre une logique précise.



On dirait que le fichier a été réécrit entre tes deux essais (vb et
vba). Tu n'as pas une procédure d'enregistrement systématique en fin de
programme qui utilise des Put avec une adresse en octets erronée ?

En tout cas cela reste bien mystérieux.



Si cela fonctionne maintenant, c'est le principal. Mais c'est frustrant
de ne pas trouver une explication rationnelle :-D


--
Fred
http://www.cerbermail.com/?3kA6ftaCvT
Avatar
Patrice Henrio
Le problème est réapparu sur le portable. Il semble que le rpoblème
intervient quand la mémoir eest largement utilisée.
Je n'en sais pas plus.
J'ai trouvé une solution : lire chaque enregistrement un par un (dommage)

Pour VB et VBA il s'agit bien du même fcihizer lu (je l'ai vérifié).

Tant pis.


"Fred" a écrit dans le message de news:
%
Dans le message:,
Patrice Henrio écrit:
La taille du fichier est de 10 KO (je n'ai donné que le début).



Oui, je voulais surtout signaler qu'il peut être bon de vérifier la taille
en octets du fichier pour voir si elle correspond bien au nombre
d'enregistrements stockés (x6 la taille attendue d'un enregistrement) :-)

La déclaration est faite et de toutes façons redim a la fonction d'un dim
(c'est aussi une déclaration de variable)



C'est LLimes et non TabLLimes qui manquait dans ton bout de code. Et comme
cela intervient dans le calcul du ReDim ... D'où ma supposition.

Et pire sans rien changer cela marche ce matin comme il y deux jours.
Peut-être l'oubli d'un erase qui perturbe sa gestion du tas ?
Je n'ai rien trouvé de cohérent même si la structure lue semble
suivre une logique précise.



On dirait que le fichier a été réécrit entre tes deux essais (vb et vba).
Tu n'as pas une procédure d'enregistrement systématique en fin de
programme qui utilise des Put avec une adresse en octets erronée ?

En tout cas cela reste bien mystérieux.



Si cela fonctionne maintenant, c'est le principal. Mais c'est frustrant de
ne pas trouver une explication rationnelle :-D


--
Fred
http://www.cerbermail.com/?3kA6ftaCvT