Macro VBA sous Excel

Macro VBA sous Excel - VB/VBA/VBS - Programmation

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
Reply

Marsh Posté le 06-05-2003 à 15:03:59   

Reply

Marsh Posté le 06-05-2003 à 15:10:11    

elle fait appel à des activeX ta macro ?


---------------
NP :
Reply

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 !


---------------
Music|Market|Feed|Loom|DVD
Reply

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...


Message édité par walli le 06-05-2003 à 15:23:30

---------------
NP :
Reply

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 :D)


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

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.
 
(désolé pour le retard, j'ai tendance à ignorer les titres avec Excel dedans :D)
 


 
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 !


---------------
Music|Market|Feed|Loom|DVD
Reply

Marsh Posté le 06-05-2003 à 15:35:31    

je vérifie ça dans le panneau de conf ou directement sous excel ?


---------------
Music|Market|Feed|Loom|DVD
Reply

Marsh Posté le 06-05-2003 à 15:40:18    

panneau de configuration car Excel en dépend :jap:


Message édité par drasche le 06-05-2003 à 15:40:53

---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 06-05-2003 à 15:40:47    

drasche a écrit :

panneau de configuration :jap:


 
ok ben je vais noter mes paramètres et vérifier les leurs !
 
d'autres idées ?


---------------
Music|Market|Feed|Loom|DVD
Reply

Marsh Posté le 06-05-2003 à 15:53:53    

Loom the gloom a écrit :

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


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".


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 06-05-2003 à 15:53:53   

Reply

Marsh Posté le 06-05-2003 à 16:03:06    

mareek a écrit :


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".


 
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 ?


---------------
Music|Market|Feed|Loom|DVD
Reply

Marsh Posté le 06-05-2003 à 16:07:08    

Loom the gloom 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 ?

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.


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 06-05-2003 à 16:09:06    

mareek 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.


 
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  :fou:


---------------
Music|Market|Feed|Loom|DVD
Reply

Marsh Posté le 06-05-2003 à 16:11:18    

Loom the gloom 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 ?


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.


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 06-05-2003 à 16:13:27    

drasche 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.

:non: VB se base sur les paramètres régionnaux donc il reconnait la virgule dans les nombres sur les PC Français.


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 06-05-2003 à 16:14:10    

drasche 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.


 
ben non puisque dans chez moi ça marche avec la ,


---------------
Music|Market|Feed|Loom|DVD
Reply

Marsh Posté le 06-05-2003 à 16:14:45    

mareek a écrit :

:non: 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 ???


---------------
Music|Market|Feed|Loom|DVD
Reply

Marsh Posté le 06-05-2003 à 16:16:10    

Loom the gloom a écrit :


 
probablement que sur le pc en question, c'est le . qui est considéré comme séparateur d'ou l'erreur ???

peut-être.
 
c'est quoi le message d'erreur au fait ?
"erreur 13 type incompatible", je parie.


Message édité par mareek le 06-05-2003 à 16:16:31

---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 06-05-2003 à 16:17:11    

mareek a écrit :

peut-être.
 
c'est quoi le message d'erreur au fait ?
"erreur 13 type incompatible", je parie.


 
ouais [:ddr555]


---------------
Music|Market|Feed|Loom|DVD
Reply

Marsh Posté le 06-05-2003 à 16:18:36    

si tu vérifiais ta chaine avec la fonction isnumeric(), tu n'aurais pas eu ce message :o


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

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 :o


 
mais chez moi ça marche :o
 
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 ?


---------------
Music|Market|Feed|Loom|DVD
Reply

Marsh Posté le 06-05-2003 à 16:22:19    

et si je testais en changeant la , en . ? [:meganne]


---------------
Music|Market|Feed|Loom|DVD
Reply

Marsh Posté le 06-05-2003 à 16:23:50    

bon j'ai donc changé le caractère
 
et ça ne plante pas
mieux, il me remplace même le caractère , par . dans le fichier excel final !!!!!


---------------
Music|Market|Feed|Loom|DVD
Reply

Marsh Posté le 06-05-2003 à 16:24:19    

Loom the gloom a écrit :


 
mais chez moi ça marche :o


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 ,
 
si j'avais fait un isnuméric, il aurait vu le souci ?

ben oui, tu n'aurait pas traité cette case.


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 06-05-2003 à 16:25:51    

mareek 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).
 
ben oui, tu n'aurait pas traité cette case.


 
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


---------------
Music|Market|Feed|Loom|DVD
Reply

Marsh Posté le 06-05-2003 à 16:31:50    

Loom the gloom 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


 
en fait ton code doit être de la forme suivante

Code :
  1. If IsNumeric(MaChaine) then
  2.     MonNombre = CDbl(MaChaine)
  3. else
  4.     'Message d'erreur ou traitement spécifique de la chaine
  5. end if


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 06-05-2003 à 16:35:07    

mareek a écrit :


 
en fait ton code doit être de la forme suivante

Code :
  1. If IsNumeric(MaChaine) then
  2.     MonNombre = CDbl(MaChaine)
  3. else
  4.     'Message d'erreur ou traitement spécifique de la chaine
  5. end if




 
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 !


---------------
Music|Market|Feed|Loom|DVD
Reply

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 ?


---------------
Music|Market|Feed|Loom|DVD
Reply

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 :
  1. dim sep as string
  2. sep = mid(cstr(1.1),1,1)
  3. MaChaine=replace(machaine,",",sep)
  4. 'traitement de MaChaine


 
enfin, ça ne marche que si tu es sûr que le separateur de decimal utilisé dans MaChaine est une virgule.


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

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 ?


---------------
Music|Market|Feed|Loom|DVD
Reply

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.
comme ça:
 

Code :
  1. dim sep as string
  2. sep = mid(cstr(1.1),1,1)
  3. MaChaine=replace(machaine,",",sep)
  4. 'traitement de MaChaine


 
enfin, ça ne marche que si tu es sûr que le separateur de decimal utilisé dans MaChaine est une virgule.


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 ?


---------------
Music|Market|Feed|Loom|DVD
Reply

Marsh Posté le 06-05-2003 à 17:22:47    

Loom the gloom a écrit :


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 ?

je te donne une solution, c'est à toi de faire le choix [:spamafote]


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 06-05-2003 à 17:23:39    

mareek a écrit :

je te donne une solution, c'est à toi de faire le choix [:spamafote]


 
ok je tente
le souci c'est que chez moi ça marche quoi que je fasse, je ne pourrais même pas te dire si ta sol est bonne !


---------------
Music|Market|Feed|Loom|DVD
Reply

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 :pt1cable:
 
edit : si en fait j'ai compris :jap: :D


Message édité par Loom the Gloom le 06-05-2003 à 17:28:54

---------------
Music|Market|Feed|Loom|DVD
Reply

Marsh Posté le 06-05-2003 à 17:32:55    

Loom the gloom a écrit :


 
ok je tente
le souci c'est que chez moi ça marche quoi que je fasse, je ne pourrais même pas te dire si ta sol est bonne !
 

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.
 
 :hello:


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

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 .
 
n'empeche que je comprends pas trop ton truc en fait :pt1cable:
 
edit : si en fait j'ai compris :jap: :D


effectivement, je me suis gourré, il fallait remplacer par mid(cstr(1.1),2,1)


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 06-05-2003 à 17:38:18    

mareek 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.
 
 :hello:  


 
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 ?


---------------
Music|Market|Feed|Loom|DVD
Reply

Marsh Posté le 06-05-2003 à 17:40:07    

mareek a écrit :


effectivement, je me suis gourré, il fallait remplacer par mid(cstr(1.1),2,1)


 
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 !!


---------------
Music|Market|Feed|Loom|DVD
Reply

Marsh Posté le 06-05-2003 à 17:41:46    

Loom the gloom a écrit :


 
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 ?

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.


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

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...


---------------
Music|Market|Feed|Loom|DVD
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed