Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
850 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Mise en forme Format CSV "*.cxr"

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Mise en forme Format CSV "*.cxr"

n°2306967
valerypeti​t
mode initiative
Posté le 26-10-2017 à 11:00:09  profilanswer
 

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
mood
Publicité
Posté le 26-10-2017 à 11:00:09  profilanswer
 

n°2306994
Marc L
Posté le 26-10-2017 à 14:01:04  profilanswer
 

 
            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 …
 

n°2307014
valerypeti​t
mode initiative
Posté le 26-10-2017 à 17:27:43  profilanswer
 

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
n°2307015
Marc L
Posté le 26-10-2017 à 17:45:36  profilanswer
 

 
            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.
 

n°2307038
valerypeti​t
mode initiative
Posté le 27-10-2017 à 14:29:44  profilanswer
 

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
n°2307041
valerypeti​t
mode initiative
Posté le 27-10-2017 à 16:49:32  profilanswer
 

ç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
n°2307056
Marc L
Posté le 28-10-2017 à 12:16:51  profilanswer
 

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

n°2307117
valerypeti​t
mode initiative
Posté le 30-10-2017 à 11:59:53  profilanswer
 

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
n°2307137
valerypeti​t
mode initiative
Posté le 31-10-2017 à 09:02:13  profilanswer
 

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
n°2307157
Marc L
Posté le 31-10-2017 à 11:59:52  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Mise en forme Format CSV "*.cxr"

 

Sujets relatifs
[PERL] remplacer un mot dans un fichierRobocopy *.bat
Suppression accents d'un fichier UTF8 [RESOLU]modifier un char *
macro qui me renvoie le nom et le chemin d'un fichierquestion sur python triangle * couronne
Formulaire d'envoi de fichierSAP SQL Importer un fichier excel
[PRC]Ouvrir un fichier au format PRC?Nommer un fichier aléatoirement
Plus de sujets relatifs à : Mise en forme Format CSV "*.cxr"


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR