Mise en forme Format CSV "*.cxr"

Mise en forme Format CSV "*.cxr" - VB/VBA/VBS - Programmation

Marsh Posté le 26-10-2017 à 11:00:09    

Bonjour à tous :hello: ,
 
voila j'arrive sur la dernière étape d'un classeur dans lequel j'ai développé quelques macros pour me faciliter un travail de saisie.
 
il s'agit maintenant d’exporter mes données au format XML CSV "*.cxr" pour les importer ensuite dans un logiciel.
 
jusque là tout va bien. je généré le fichier et les tabulations sont au bon endroit.
 
par contre j'ai relevé un problème de taille ......:
- la mise en forme des nombres à virgule est modifié 950.10 devient 950,1
 
alors j'ai fais un test d'importation, après avoir remplacé les "," par des "." et le résultat final devient 950.01 ce qui n'est plus du tout la valeur voulu......
 
Je ne connais pas grand chose au VBA et vu la boucle que j'utilise pour exporter mes données, je ne vois pas trop comment y intégrer la mise en forme des valeur numérique
c'est là que vos lumières m’intéresse!!!  :D  :D  :D  
 
je vous met mon petit bout de code ci-dessous, la partie qui nous intéresse est compris entres les ligne 14 et 27.
 
Merci d'avance pour votre aide
 

Code :
  1. 'Ecrit dans le fichier cxr
  2. 'Entête du fichier texte'
  3. Print #iFile, ("<LIBRARY>" )
  4. Print #iFile, ("<COMMENT>" )
  5. Print #iFile, ("    Essai2" )
  6. Print #iFile, ("  </COMMENT>" )
  7. Print #iFile, ("  <PLCTYPE>" )
  8. Print #iFile, ("    CJ2M" )
  9. Print #iFile, ("  </PLCTYPE>" )
  10. Print #iFile, ("  <SYMBOL>" )
  11. 'Création du tableau par une boucle
  12. '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  13. ar = Sheets("Format CX" ).Cells(5, 3).CurrentRegion.Value    '// valeurs dans un array (plus rapide)
  14.    For i = 1 To UBound(ar, 1)       '// boucle sur les lignes
  15.       str = ""
  16.       For j = 1 To UBound(ar, 2)    '// boucle sur les colonnes
  17.          str = str & ar(i, j) & vbTab  '// valeurs séparées par tabulations
  18.       Next j
  19.       Print #iFile, str             '// écrire dans le fichier
  20.    Next i
  21.  
  22. '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  23. 'Pied de page du fichier texte
  24. Print #iFile, ("  </SYMBOL>" )
  25. Print #iFile, ("  </LIBRARY>" )
  26. Close #iFile                     '// Fermer le fichier


Message édité par valerypetit le 31-10-2017 à 09:01:37

---------------
Il y a deux choses d'infini au monde : l'univers et la bêtise humaine... mais pour l'univers j'en suis pas très sûr
Reply

Marsh Posté le 26-10-2017 à 11:00:09   

Reply

Marsh Posté le 26-10-2017 à 14:01:04    

 
            Bonjour,
 
            modifier temporairement le séparateur décimal directement dans le paramétrage d'Excel !
            Et en activant l'Enregistreur de macro, l'instruction est vite trouvée …
 

Reply

Marsh Posté le 26-10-2017 à 17:27:43    

Merci de ta réponse Marc,
 
effectivement, j'ai trouvé : Selection.NumberFormat = "0.00" pour le format.
seulement j'ai des chiffres dans les colonnes "D" et "G" et je ne dois modifier que le format des chiffres pioché dans la colonne "D"
avec le code ci-dessus, je ne sais pas trop comment l'intégrer.
en sachant que actuellement mes cellules sont déjà formaté, le problème c'est pendant le transfert vers mon fichier texte.....
 
 


---------------
Il y a deux choses d'infini au monde : l'univers et la bêtise humaine... mais pour l'univers j'en suis pas très sûr
Reply

Marsh Posté le 26-10-2017 à 17:45:36    

 
            Cela ne change en rien le séparateur décimal défini dans Excel !
 
            Regarder donc l'aide VBA interne - tout y est ! - de la propriété  DecimalSeparator  …
 
            Et puis avant de modifier le code, juste changer dans le paramétrage d'Excel le séparateur décimal
            pour tester ensuite le code initial :  si c'est OK manuellement alors la modification du code est valable.
 

Reply

Marsh Posté le 27-10-2017 à 14:29:44    

Salut Marc,
Merci pour ton aide,

 

J'ai ajouté ceci à mon code:
 Application.DecimalSeparator = "."
 Application.UseSystemSeparators = False

 

toutes mes valeurs passent bien au format xxx.xx,
Rien ne change lorsque j'écrit mes données dans le fichier texte.....
j'ai toujours à l'intérieur le format xxx,xx.... et les valeur xxx.00 deviennent xxx


Message édité par valerypetit le 27-10-2017 à 16:45:09

---------------
Il y a deux choses d'infini au monde : l'univers et la bêtise humaine... mais pour l'univers j'en suis pas très sûr
Reply

Marsh Posté le 27-10-2017 à 16:49:32    

ça ne serait pas grand chose si je n'avais que les "," à remplacer avant d'envoyer vers mon logiciel,
mais la perte des décimales est beaucoup plus problématique je suis obligé de recontrôler chaque lignes du fichier texte avant de pouvoir l'importer....


---------------
Il y a deux choses d'infini au monde : l'univers et la bêtise humaine... mais pour l'univers j'en suis pas très sûr
Reply

Marsh Posté le 28-10-2017 à 12:16:51    

 
            Après la configuration du séparateur décimal dans Excel, le B-A-BA est de ne pas confondre valeur interne et valeur affichée !
 
            Donc si l'affichage des cellules est correct alors abandon de la variable tableau  - rapidité illusoire en lecture de cellules ! -
            et utiliser la propriété  Text  au lieu de  Value  …
 
            Sinon utiliser la fonction texte  Format  pour alourdir la boucle mais en convertissant le texte au résultat désiré.
 
           

Reply

Marsh Posté le 30-10-2017 à 11:59:53    

Salut Marc,
je me disais que c’était bizarre ;-)

 

La premiére méthode ne fonctionne pas.....
si je modifier:
ar = Sheets("Format CX" ).Cells(5, 3).CurrentRegion.Value
en:
ar = Sheets("Format CX" ).Cells(5, 3).CurrentRegion.Text

 

le fichier de sortie est vide.

 

j'ai essayé la fonction format, en ajoutant:
     

Code :
  1. For j = 1 To UBound(ar, 2)       '// boucle sur les colonnes
  2.       ar(i, j) = Format(ar(i, j), "###.##;;0" )
  3.          str = str & ar(i, j) & vbTab  '// valeurs séparées par tabulations
 

Résultat.....:

Code :
  1. Entrée_NX WORD 900,  Entrées_Rack_NX 0 IN
  2. Sortie_Nx WORD 950,  Sortie_Rack_NX 0 OUT
  3. RM_AG_Préparation_Floc BOOL 901,  DESH_AG5141 0
  4. RM_AG_cuve_Coagulation BOOL 901,01  DESH_AG6101 0
  5. DEF_Ppe_Dos_Coagulant BOOL 901,03  DESH_PD5111 0
  6. DISJ_Ppe_Dos_Coagulant BOOL 901,04  DESH_PD5111 0
  7. DEF_Ppe_Dos_pH BOOL 901,05  DESH_PD5121 0
  8. DISJ_Ppe_Dos_pH BOOL 901,06  DESH_PD5121 0
 

j'ai un virgule après 900 et 950 alors qu'il ne sont pas censé avoir de décimal.
les autres nombres ont gardé la leur.... et les décimals égal à zéro disparaisses....

 

avec une bibliothèque xml cela pourrait-il changer quelque chose? ça n'est pas prévu pour?
perso je n'est pas essayé ne sachant pas comment l'inclure au projet  :whistle:  :whistle:  :whistle:

Message cité 1 fois
Message édité par valerypetit le 30-10-2017 à 13:21:56

---------------
Il y a deux choses d'infini au monde : l'univers et la bêtise humaine... mais pour l'univers j'en suis pas très sûr
Reply

Marsh Posté le 31-10-2017 à 09:02:13    

En fait ça n'est absolument pas du XML mais du CSV :-))


---------------
Il y a deux choses d'infini au monde : l'univers et la bêtise humaine... mais pour l'univers j'en suis pas très sûr
Reply

Marsh Posté le 31-10-2017 à 11:59:52    

valerypetit a écrit :

ar = Sheets("Format CX" ).Cells(5, 3).CurrentRegion.Text
le fichier de sortie est vide.

             C'était pourtant clair :

Marc L a écrit :

Donc si l'affichage des cellules est correct alors abandon de la variable tableau

             En lecture travail direct sur les cellules …
 
 

valerypetit a écrit :

j'ai un virgule après 900 et 950 alors qu'il ne sont pas censé avoir de décimal.
les autres nombres ont gardé la leur.... et les décimals égal à zéro disparaisses....

             Là il s'agit juste de la création d'un pauvre fichier texte en formatant les valeurs numériques en texte …
             Évidemment si la source n'est pas numérique mais du texte …
             Il suffit juste de respecter les fondamentaux, à savoir les types de données des variables, à la portée d'un débutant.
             Et là ton format dans ta boucle n'est toujours pas bon car si tu veux conserver les décimales,
             ce n'est pas avec un dièse dans le format mais plutôt un zéro comme indiqué dans l'aide VBA
             Edit : et si ce n'est pas dans l'aide VBA alors c'est pire car il s'agit aussi du B-A-BA d'Excel !   (fonction TEXTE et formatage d'une cellule)
 
 

valerypetit a écrit :

En fait ça n'est absolument pas du XML mais du CSV :-))

             Je l'avais déjà compris …   Et encore CSV ne voulant rien dire à part fichier texte car on y trouve de tout,
             les séparateurs de données et décimaux pouvant changer d'une région à une autre !


Message édité par Marc L le 31-10-2017 à 12:05:48
Reply

Sujets relatifs:

Leave a Replay

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