Macro VBA sous Excel - VB/VBA/VBS - Programmation
Marsh Posté le 06-05-2003 à 15:10:11
elle fait appel à des activeX ta macro ?
Marsh Posté le 06-05-2003 à 15:16:58
walli a écrit : elle fait appel à des activeX ta macro ? |
nan c'est vraiment une macro bidon
avec une sub principale qui fait du blabla de récup de données dans un fichier texte et qui colle dans un fichier excel
+ 2 petites fonctions bidons
rien de compliqué
trop l'air d'un con, chez moi tout marche et arrivé chez le gars tout foire !
Marsh Posté le 06-05-2003 à 15:22:21
pbs de droits de lecture/ecriture des fichiers
edit : j'ai rien dit t'as dit qe ca plantait au niveau des fonctions de conversions...
Marsh Posté le 06-05-2003 à 15:31:53
Vérifie un coup les paramètres régionaux (séparateur de milliers, séparateur décimal) pour voir s'ils sont identiques sur les deux machines.
(désolé pour le retard, j'ai tendance à ignorer les titres avec Excel dedans )
Marsh Posté le 06-05-2003 à 15:33:36
drasche a écrit : Vérifie un coup les paramètres régionaux (séparateur de milliers, séparateur décimal) pour voir s'ils sont identiques sur les deux machines. |
ok vé voir ça merci !
faut que je prenne en compte le maximum de possibilités, comme ça je vérifie tous mes réglages et je comparerais là bas !
Marsh Posté le 06-05-2003 à 15:40:18
panneau de configuration car Excel en dépend
Marsh Posté le 06-05-2003 à 15:53:53
Loom the gloom a écrit : Bonjour |
vérifie que les chaines que tu convertis via cint, cdbl et consort sont bien des nombres avec la fonction isnumeric().
et si tu veux être sûr qu'il n'y a pas de dépassement de capacité, convertie d'abord ta chaine en double (cdbl()) et vérifie que le nombre ne dépasse pas les bornes de ton type "final".
Marsh Posté le 06-05-2003 à 16:03:06
mareek a écrit : |
en fait je t'explique
les données en question sont des nombres stockées sur 10 caractères
par exemple 0000045,10
donc je cherche à convertir la chaine en un numérique pour supprimer les zéros superflus
donc à priori pas de problème de dépassement de capacité sur de si ptits nombres, si ?
Marsh Posté le 06-05-2003 à 16:07:08
Loom the gloom a écrit : |
ben les Int sont très limités: 32767<x<-32768
Et puis si un caractère non numérique s'est glissé dans ta chaine, pof, ça plante.
Marsh Posté le 06-05-2003 à 16:09:06
mareek a écrit : ben les Int sont très limités: 32767<x<-32768 |
nan mais là j'ai testé en mode debug, ça crashe dès la première itération de ma boucle sur le premier champ qui ne contient ni caractère non numérique ni autres, et qui rentre bien dans l'intervalle
en fait le problème semble plus se situer du coté des converts en général
il plante sur tous les converts,et nul part d'autre
et chez moi ça marche
Marsh Posté le 06-05-2003 à 16:11:18
Loom the gloom a écrit : |
tip: VB ne connaît que le format anglo-saxon. Si tu tentes d'assigner "0000045,10", soit il plante, soit il interprète mal son contenu. Le point est le seul séparateur décimal acceptable dans ce cas: "0000045.10" est donc la bonne string à convertir en numérique.
Marsh Posté le 06-05-2003 à 16:13:27
drasche a écrit : |
VB se base sur les paramètres régionnaux donc il reconnait la virgule dans les nombres sur les PC Français.
Marsh Posté le 06-05-2003 à 16:14:10
drasche a écrit : |
ben non puisque dans chez moi ça marche avec la ,
Marsh Posté le 06-05-2003 à 16:14:45
mareek a écrit : VB se base sur les paramètres régionnaux donc il reconnait la virgule dans les nombres sur les PC Français. |
probablement que sur le pc en question, c'est le . qui est considéré comme séparateur d'ou l'erreur ???
Marsh Posté le 06-05-2003 à 16:16:10
Loom the gloom a écrit : |
peut-être.
c'est quoi le message d'erreur au fait ?
"erreur 13 type incompatible", je parie.
Marsh Posté le 06-05-2003 à 16:18:36
Loom the gloom a écrit : |
si tu vérifiais ta chaine avec la fonction isnumeric(), tu n'aurais pas eu ce message
Marsh Posté le 06-05-2003 à 16:21:04
mareek a écrit : si tu vérifiais ta chaine avec la fonction isnumeric(), tu n'aurais pas eu ce message |
mais chez moi ça marche
admettons que sur ce pc , le caractère par défaut est . et non ,
si j'avais fait un isnuméric, il aurait vu le souci ?
Marsh Posté le 06-05-2003 à 16:24:19
Loom the gloom a écrit : |
C'est pas une excuse, tu dois verifier toutes les conneries potentiels de tes utilisateurs (et les utilisateurs sont potentiellement très très cons).
Loom the gloom a écrit : admettons que sur ce pc , le caractère par défaut est . et non , |
ben oui, tu n'aurait pas traité cette case.
Marsh Posté le 06-05-2003 à 16:25:51
mareek a écrit : |
certes mais je n'avais pas grand chose à tester, la macro ne faisant presque rien
le problème c'est qu'il faut que je la traite.
ma donnée stockée sous forme 0000510,55 doit se retrouver dans le fichier excel sous la forme 510,55
Marsh Posté le 06-05-2003 à 16:31:50
Loom the gloom a écrit : |
en fait ton code doit être de la forme suivante
Code :
|
Marsh Posté le 06-05-2003 à 16:35:07
mareek a écrit :
|
ok je veux bien
moyennant des erreurs de saisie dans les données, le code serait ça
mais le problème, c'est que là ça plante sur une donnée qui est bonne ! pas de mauvais caractère etc...
la donnée est valide, et comme dit, j'ai fait du déboguage pas à pas, il semblerait que ça plante sur chaque conversion... ce n'est donc pas un problème de données !
Marsh Posté le 06-05-2003 à 17:10:05
bon alors je suis allé voir sur leur poste, et effectivement, chez eux le séparateur par défaut est le point et non la virgule
or si je fais la modif chez moi, le programme marche quand même !!
y'aurait il un moyen de contourner ça ?
c'est à dire que malgré le fait que le séparateur soit le . et que mon fichier contienne des , , faire en sorte que ça marche ?
Marsh Posté le 06-05-2003 à 17:16:41
faut détecter le séparateur utilisé sur la machine et remplacer la virgule par le séparateur en question.
comme ça:
Code :
|
enfin, ça ne marche que si tu es sûr que le separateur de decimal utilisé dans MaChaine est une virgule.
Marsh Posté le 06-05-2003 à 17:16:59
et effectivement, si je fais un pas à pas, j'ai une fonction qui récupère la donnée sous forme de string "0000540,52"
puis je fais un cdbl de cette chaine et je retrouve 540.52 avec le point (car j'ai changé ça dans les paramètres régionaux)
ça voudrait dire qu'en bas il ne fait pas cette transcription...
une idée ?
Marsh Posté le 06-05-2003 à 17:17:57
mareek a écrit : faut détecter le séparateur utilisé sur la machine et remplacer la virgule par le séparateur en question.
|
ben tout ce dont je suis sur c'est que dans ma donnée, j'ai des virgules
le séparateur par défaut sur le poste est le .
donc voilà
tu penses donc que je dois faire comme ça ?
Marsh Posté le 06-05-2003 à 17:22:47
Loom the gloom a écrit : |
je te donne une solution, c'est à toi de faire le choix
Marsh Posté le 06-05-2003 à 17:26:03
bon ton cstr(1.1) doit être foireux, puisque je récupère un 1 et non le .
n'empeche que je comprends pas trop ton truc en fait
edit : si en fait j'ai compris
Marsh Posté le 06-05-2003 à 17:32:55
Loom the gloom a écrit : |
MAIS ON S'EN FOUT !
Le problème c'est que ça marche pas sur l'autre poste et c'est pas en rajoutant des verifs sur les données que ça va moins bien marcher chez toi.
Marsh Posté le 06-05-2003 à 17:34:13
Loom the gloom a écrit : bon ton cstr(1.1) doit être foireux, puisque je récupère un 1 et non le . |
effectivement, je me suis gourré, il fallait remplacer par mid(cstr(1.1),2,1)
Marsh Posté le 06-05-2003 à 17:38:18
mareek a écrit : MAIS ON S'EN FOUT ! |
effectivement et c'est que je suis en train de faire
ta méthode a l'air de marcher pas mal
faudra que j'attende demain pour la tester en bas par contre
mais sinon, tu as une explication à ce problème ?
Marsh Posté le 06-05-2003 à 17:40:07
mareek a écrit : |
j'avais trouvé
bon effectivement ta méthode me semble vraiment pas mal
en tout cas reste à voir si ça fonctionnera en bas, sachant que chez moi ça marchait déja
j'espère qu'il n'y aura rien d'autre qui gène !!
Marsh Posté le 06-05-2003 à 17:41:46
Loom the gloom a écrit : |
ben oui, VB se base sur les paramètres régionnaux pour les fonctions de converstion (cstr, cint, cdate, etc ...) et comme la virgule n'était pas le séparateur de décimale du PC, VB ne reocnnaissait pas le format de ton nombre.
Marsh Posté le 06-05-2003 à 17:47:19
mareek a écrit : ben oui, VB se base sur les paramètres régionnaux pour les fonctions de converstion (cstr, cint, cdate, etc ...) et comme la virgule n'était pas le séparateur de décimale du PC, VB ne reocnnaissait pas le format de ton nombre. |
ok, jusque là tout roule...
mais comme je te l'avais dis, lorsque je le change chez moi, ça marche toujours, et c'est là que je ne comprends plus...
Marsh Posté le 06-05-2003 à 15:03:59
Bonjour
j'avais une petite macro à créer sous Excel qui permet d'automatiser du traitement de données
c'est à dire qu'au lieu de copier coller des données, la macro le fait automatiquement
il y a donc dans cette macro pas mal de fonction de conversions
cint, cstr, cdbl etc...
sur mon poste, tout va bien, je descends le tester sur la machine en question, tout plante, notamment au niveau de ces fonctions de conversions
y'aurait t'il des références ou des trucs à vérifier qui pourraient faire planter ça ?
merci
---------------
Music|Market|Feed|Loom|DVD