Transformer une feuille Excel en CSV en modifiant la mise en forme

re

voici

toutes les manoeuvres sont montrées, à toi d'ajouter des colonnes vides et les colonnes à zéro (comme montré dans l'exemple)

ensuite, il te faut faire une macro qui :

  • clique sur menu Requête / Actualiser
  • exporte l'onglet au formal csv
ça je ne sais pas faire

et personnellement je te déconseille de le faire : tes utilisateurs devraient au moins savoir le faire. C'est mon avis perso de moi

amitiés

Bonjour Jms

Je suis en extérieur pour l'instant mais crois moi j'essaye des que je rentre et surtout je te tiens informé

Merci

Jean

Bonjour

La solution de jms oblige à pal mal de manips : mettre sous forme de tableau notamment (la mienne évitait cela) ... et les solutions PQ n'évitant pas le VBA, ci-joint une solution tout VBA

Le chemin d'export est défini en cellule H1

Reste à nettoyer les 2 feuilles en fin de procédure : par VBA ou pas...

13test-csv-vba.xlsm (32.16 Ko)

RE, JMD et Chris,

Merci pour vos retour, je me suis jeté sur mon ordinateurs, j'ai testé vos fichiers, JMD, comme dit par Chris ton fichier est très intéressant, il va surtout me permettre d'essayer d'apprendre power query.

Cependant comme le précise Chris, il est trop manuel, par contre je pense qu'avec un peu de VBA il sera TOP.

Chris, je pensais passer ce post en résolu, en voyant ton code VBA et en testant, j'ai même eu un court moment de joie.

En effet tout fonctionne, sauf que lorsque j'ouvre mon CSV avec Excel toutes les données sont en A1; B1; C1...

Alors que je devrais en avoir une dans chaque cellule.

du coup je ne peux pas charger mon fichier CSV , car inexploitable.

Nous sommes presque au bout

Merci vraiment de m'accorder du temps et votre aide.

Jean

csv vba

Chris,

Juste pour info je sais que c'est normal d'avoir ce type d'écriture en CSV, mais quand je l'ouvre en texte csv.

Normalement quand j'ouvre avec Excel, il respectent la mise en forme des colonnes.

Jean

Bonjour,

Bonjour Chris,

Dans la procédure ajoute Local:=True, comme ci-dessous :

ActiveWorkbook.SaveAs Filename:=Chemin & "test.csv", FileFormat:=xlCSV, CreateBackup:=False, local:=True

Cdlt.

Bonsoir à Tous,

LE code de Chris fonctionne, mais pas la mise en forme.

Le code de Jean-Eric fonctionne pour la mise en page, ... mais du coup si j'ai un chiffre entier il ne le transforme plus...

Exemple 50 dans la colonne L ne devient pas 50.00 et donc cela fausse mon fichiers CSV...

Je sens que nous touchons la solution du bout des doigts et c'est frustrant...

Je ne sais que vous dire a part merci encore une fois.

Bonne soirée

Jean

RE

J'ai bien demandé quelle était la destination du CSV : csv à la base veut dire valeurs séparées par des virgules.

Les question que l'on pose ont une finalité autre que la curiosité !

Tu as répondu "Ce CSV est destiné a être utilisé par un outil qui a besoin des informations précises du CSV". Donc as-tu testé le CSV dans cet outil et non dans Excel ?

Dans Excel, si on passe par Données, A partir de texte, on peut préciser que le séparateur est une virgule et tout se réparti dans les colonnes

Sinon en modifiant juste la ligne de mon code comme indiqué par Jean Eric cela donne des ; sans modifier la mise en forme que j'ai faite selon ta demande... Donc tout va bien...

Re,

J'ai trouvé pour le problème de mise en forme, il fallait supprimer la seconde ligne du code de Chris.

En effet si on remplace :

ActiveWorkbook.SaveAs Filename:=Chemin & "test.csv", FileFormat:=xlCSV, CreateBackup:=False

ActiveWorkbook.Close SaveChanges:=False

Par :

ActiveWorkbook.SaveAs Filename:=Chemin & "test.csv", FileFormat:=xlCSV, CreateBackup:=False, local:=True

Cela fonctionne,

Par contre j'ai charger des autres données par copier colle et cela ne fonctionne plus , pouvez m'expliquer ce que fait le code suivant, et comment le débugger?

Merci

Jean

code 13

RE

La seconde ligne ferme le classeur csv donc si tu la supprimes il faut le fermer à la main...

Pour la 1ère c'est ce que Jean Eric et moi-même t'avons dit...

Comme précédemment tu ne réponds pas aux questions : as-tu testé sur l'outil cible ?

Je crois qu'on va avoir du mal à avancer.

Comme je l'ai dit dans un précédent post "On semble copier/coller tout et n'importe quoi ce qui a un fort risque de planter que l'on utilise VBA ou autre chose..."

Il faut un exemple représentatif mais avec des couper/coller, la représentativité me parait peu fiable et le risque important...

De façon générale, pour débuguer un code sert-toi des variables locales et des variables espions.

Le code correspond au traitement de 3 colonnes contiguës dont la seconde peut contenir des nombres avec ou sans décimales et un séparateur décimal . le cas échéant et la 3ème des nombres avec ou sans décimales et un séparateur décimal virgule ou point.

Si les règles ne sont pas celles-là met les règles à plat avant...

Bonjour Chris,

Peut être que mon projet est trop ambitieux, pour mon niveau, je pensais avoir répondu aux questions

Oui bien sur que j'ai testé dans l'outil le csv, c'est pour cela que je pensais avoir décrit précisément mon besoin.

Ce n'est visiblement pas le cas car il te manque des informations semble t il.

Je vais donc tout remettre à plat, et redéfinir je l'espère de manière clair mon besoin pour pouvoir avancer sans vous faire perdre votre temps.

En tout cas ce qui est sur c'est que nous avons déjà bien avancé et que le résultat est déjà très intéressant et proche du but.

Je réécris tout cela ce soir au "propre".

Merci à tous de votre contribution.

Bonne journée

Jean

RE, JMD et Chris,

.... tout fonctionne, sauf que lorsque j'ouvre mon CSV avec Excel toutes les données sont en A1; B1; C1...

Alors que je devrais en avoir une dans chaque cellule.

du coup je ne peux pas charger mon fichier CSV , car inexploitable.

ben... non !

un csv ouvert dans Excel directement donne toujours des données en colonne A

si tu veux l'ouvrir en tant que table réellement séparée en colonnes, utilise "ouvrir" ou Power Query (je préfère)

Bonjour,

Petit contretemps, pour hier soir, donc je vais essayer de nouveau de décrire précisément mon besoin:

Je travaille dans une petite entreprise d'électricité, certains de nos clients nous passent des commandes, que je dois saisir dans notre système.

Cela est fastidieux et prend beaucoup de temps, car chaque client a son propre formulaire, (PDF, Word, Open Office...) certains nous l'envoi par mail, d'autres par fax, ou courrier...

Par contre je peux exploiter certains document en récupérant des données tel que , Référence, quantité et prix, le hic c'est qu'elle sont souvent sous des format différents.

Comme dans notre système en trifouillant j'ai vu qu'on pouvait charger un fichiers CSV, j'ai donc passer du temps pour trouver les colonnes et après de nombreux test j'ai réussi a faire une commande en chargeant mon csv, voila pourquoi je connais le format et sait que cela fonctionne.

En effet par contre comme les données peuvent être de "toutes" sortes, il risque d'être difficile de faire fonctionner mon besoin avec VBA comme le dit Chris.

Pour résumé je souhaite dans un premier onglet coller en Col A les références, en B les quantités, en C les prix , puis une mise en forme dans un autre onglet en A référence, E quantités, C les prix sous format 0.00 pour être compatible.

De plus si j'ai un prix je souhaite que chaque cellule (J; N) de la même ligne se remplissent automatiquement par un zéro

Une fois fait exporter cela en format CSV sous le bureau.

Il faut que si l'on ouvre le fichier avec excel on doit voir toutes les colonnes avec les données et pas en A1.

Voilà j'espère que cette fois ci j'ai été assez clair, après relecture je ne vois pas quoi ajouter.

En vous remerciant encore de votre aide, je sais je me répète mais c'est surement l'âge ...

Bonne journée

Jean

Bonjour

On a compris le principe mais le souci c'est qu'en copiant depuis des documents hétéroclites, tu a sans doute des éléments parasites, espaces ou caractères non imprimables qui n'existent pas dans ton petit exemple ayant servi à créer le code.

On ne peut donc savoir pourquoi le code ne marche pas si tu ne fournis pas l'exemple qui ne fonctionne pas puisque le code fonctionne parfaitement sur le 1er exemple...

Bonjour

j'ais un peux changer la macro de JMD

et j'ais fait un macro Import a voir

le fichier CSV se trouve dans le répertoire ou se trouve ton fichier

A Voir

A+

Maurice

16test-csv-vba-1.xlsm (40.01 Ko)

RE

JMD n'écrit pas de VBA, c'est donc celle de Chris

Le souci n'est plus l'export en soit (résolu par ,local:=True) c'est les données copiées collées (pas d'import dans Excel....)

Merci de suivre ce post qui va finir par avoir raison de ma raison...

Bon Bin bonne nouvelle si le principe est compris on avance. En effet maintenant la plupart du code fonctionne je réussi à exporter. Par contre je pense que vu les donnés hétéroclites que je dépose cela va être difficile.

Je vous envoi un fi tiers qui "bugg" en fin de journée

Jean

Me revoilà, bienvenue à Maurice qui se joint à nous pour tenter d'élucider le mystère.

Cela fonctionne maintenant, par contre quand je fait un copier coller avec références d'un client cela ne fonctionne plus...

je joint les exemples

Un autre problème qui au fond ne me dérange pas plus que cela est que si tu n'écris qu'une ligne la macro plante

Cela ne pose pas de souci car pour une commande inférieure a 5 lignes je le fait à la main ça va plus vite.

J'ai laissé tout comme après utilisation, le fichier CSV_VBA et le fichier CSV exporté.

Jean

Bonjour

j'ais changer la macro pour la gestion des zéro

A+

Maurice

Je dois m'absenter un moment mais je regarde ce soir !!!

Rechercher des sujets similaires à "transformer feuille csv modifiant mise forme"