Macro pour formater un fichier texte ou excel [Résolu] - VB/VBA/VBS - Programmation
Marsh Posté le 07-04-2010 à 14:31:40
Hello
Moi j'aime bien ton exemple ! C'est green green green !
Il suffit d'enregistrer une macro, d'enregistrer ton fichier au format CSV, de specifier dans les options d'enregistrements que la 1ere ligne contient les noms de champ.
Cordialement
Marsh Posté le 07-04-2010 à 15:05:57
Merci de ta réponse mais je souhaite automatiser tout ça.
Le but est d'ajouter un un VBA dans ce que j'ai deja créer (pour remplacer des caractere, virer des espaces, etc).
Je doit ensuite pouvoir mettre à disposition cette macro et les gens auront juste à l'executée pour mettre en forme le fichier qu'il on ouvert.
Pour cette partie de la macro, elle doit comporter une partie Exportation avec le séparateur ";".
Je travail actuellement sur la partie qui met des guillemets dans chaque cellules (elle met tout entre guillemets)
Sinon je connaissais deja cette possibilité ^^ mais merci comme même!
Marsh Posté le 07-04-2010 à 15:59:50
Je ne comprends pas...
Pourquoi gérer le separateur alors que l'export en CSV le fait tout seul...
Gérer les guillemets ok, si tu as du texte dans une cellule comme cela :
Corben a dit "mais green comment ?"
donne
"Corben a dit ""mais green comment ?"""
Forcement, il faut doubler les guillemets...
Sauf, qu'avec l'export en CSV il le gere tout seul aussi...
Dans Excel :
Col1 Col2
1 Corben a dit "mais green comment ?"
On exporte, et on a bien un fichier CSV :
Col1;Col2
1;"Corben a dit ""mais green comment ?"""
Donc... c'est quoi ta question concretement ?
Marsh Posté le 07-04-2010 à 16:49:14
lol bon c'est vrai que je ne suis peut-être pas trés clair.
Le but:
On dispose d'une base de données sur laquelle on peut importer des données au format .txt . Ce fichier n'est pas utilisable en l'état par un logiciel de traitement de données. Je souhaite donc que la personne qui ouvre ce fichier txt avec Excel n'est plus qu'à exécuter ma macro pour obtenir un fichier txt lisible par le logiciel de traitement de données.
Disons qu'il me semblait que l'exportation était possible avec une macro.
Sans que la tiers personne n'est à cliquer à droite et à gauche pour exporter son fichier comme il faut, avec les bons séparateur. Il faudrait que ce soit transparent pour elle.
Marsh Posté le 08-04-2010 à 11:29:28
Donc, tu importes un fichier, que tu traites, et ensuite tu l'exportes pour etre exploitable dans ta base de données ?
Marsh Posté le 08-04-2010 à 15:01:24
Tout à fait, enfin pour être exploitable par le logiciel de traitement.
BDD -> Fichier TXT -> Traitement par Macro -> Exportation fichier (CSV, TXT) -> importation dans logiciel de traitement
Marsh Posté le 08-04-2010 à 16:24:43
C'est quoi la BDD en question ?
C'est elle qui exporte ou un logiciel tiers l'attaque pour en extraire un TXT ?
Marsh Posté le 08-04-2010 à 17:05:51
On exporte manuellement.
Les gens se débrouille avec ça, car ils vont choisir leurs propres paramétres à intégrés dans le fichier txt. C'est aprés cela que ma macro rentre en jeu. Je l'ais bientot fini mais tes idées sont les bienvenues. Le dernier probléme que j'ai c'est que lorsque ma macro exporte au format CSV, tout va bien, mais dés que je change l'extension par txt, cela me triple mes guillemets au lieu de garder les simple guillemets.
Je posterais mon code demain.
Mais je suis preneur de toute suggestion ^^
Marsh Posté le 08-04-2010 à 19:43:48
Etant donné que tu recodes tout, ";" guillemets etc. n'exporte pas en csv mais directement en txt
J'attends de voir ta macro
Marsh Posté le 09-04-2010 à 09:09:56
Bon voila mon code :
Tout n'est pas de moi, j'ai mis une semaine a regarder se qui se fait, piocher des bouts de code et les adapter.
Code :
|
Bon il n'est peut-être pas bien mis en forme et il y a peut-être plus simple mais au moin il fait ce que je lui demande
Pour ce qui est de l'exportation, elle se fait au format CSV ce qui induit un séparateur.
Il faudrait que je trouve une fonction qui me permet de choisir mon séparateur et mon fichier de sortie.
Je vais travailler sur ça se matin histoire de finir cette macro avant ce soir.
Marsh Posté le 09-04-2010 à 09:14:14
Ah oui et lorsque je change dans le code en .txt à la ligne 37 et 45, ça me fait le même délire de triplage des guillemet, alors je me suis dis "Bah je n'est qu'à zaper la partie sur l'ajout des guillemets et au changement d'extension il me mettra des guillemets!!" ... et bin non .. il me met rien
Marsh Posté le 09-04-2010 à 10:01:51
bon j'ai trouver ce qu'il me faut pour l'exportation:
Code :
|
Mais maintenant j'ai une erreur "Declaration existante dans la portée en cours" ça veut dire quoi !!! J'ai jamais défini "Dim Range" dans mon code
Marsh Posté le 09-04-2010 à 10:10:26
Salut, un exmple vite fait , à adapter sur http://cjoint.com/?ejkjGTEq4U
Marsh Posté le 09-04-2010 à 10:31:09
Trés bien ta macro elle fait exactement ce que je veux, cependant je souhaiterais l'insérée dans ma macro. Mais elle est constituée de deux parties et je sais pas quel bout prendre, (a priori le premier mais il semble dépendre d'autre chose)
Marsh Posté le 09-04-2010 à 10:49:01
Losque j'insére entiérement dans ma macro l'exportation plante à la ligne:
LastRow = ShDatas.Range("A" & Application.Rows.Count).End(xlUp).Row
Pour ceux que ça interresse voici ma macro compléte:
Code :
|
Marsh Posté le 09-04-2010 à 10:54:19
Re,Salut, en gros tu copies la procédure Private Sub Ecrire(ByVal NomFichier As String, ByVal Separateur As String)
et dans ta procédure principale tu insères
Ecrire "Essai.txt", Sep
Supprimer toutes les scories pour le temps de calcul
Te renseigner sur CodeName sur http://www.ozgrid.com/VBA/excel-vba-sheet-names.htm et l'intérêt de son utilisation
( ShDatas dans l'exemple )
Marsh Posté le 09-04-2010 à 11:13:15
Bon ça y est j'ai réussi !!!!!! !!!!!!!
J'ai réutilisé l'ancien code (avant le tiens kiki29) il fallait juste modifier Range dans la partie exportation, je l'ais donc nommée Ranges.
Et maintenant ça marche !!!!! il me demande où enregistrer le fichier et c'est tout bon.
Merci de votre aide comme quoi avec de l'acharnement je passe de Mardi = Noob des Macro (genre c'était du chinois !!) à Vendredi Low- des Macro
Je vous transmet ma relique un grand merci à vous deux Kiki29 et DJE69R et merci à tout les gens du net diffuse leur idée !!
Code :
|
Par contre j'ai rien compri à ton dernier message kiki29
Même si c'est moins important maintenant tu veux bien m'expliquer que je ne reste pas sur une interogation ^^
Marsh Posté le 09-04-2010 à 11:18:13
Re,Utiliser systématiquement Option Explicit
2 utilitaires indispensables : http://www.oaltd.co.uk/Indenter/Default.htm
http://www.mztools.com/v3/mztools3.aspx
L'intérêt de CodeName c'est de permettre d'insérer, de déplacer des feuilles, de renommer les onglets sans avoir à retoucher au code VBA qui lui pointera toujours sur la feuille concernée
Sur un test grossier, la solution proposée semble plus rapide que la tienne
Marsh Posté le 09-04-2010 à 11:30:23
Merci bien je peux terminer cette semaine en paix maintenant
Il est certains qu'il doit exister des solutions beaucoup plus simples et rapides.
Mais ceci rempli mon cahier des charges :
- L'utilisateur ouvre excel avec ma macro
- Il ouvre le fichier texte de données à partir d'excel
- Il execute la macro
- Il insére le nouveau fichier dans le logiciel de traitement
Je me pencherais sur ces utilitaires lorsque j'aurais du temps pour les améliorations du projet
Merci encore.
Cordialement,
Marsh Posté le 09-04-2010 à 11:32:24
DIIIEEEUUUU comment fait-on pour mettre "[Résolu]" dans mon titre ?
(ça me fait toujours penser à ça quand je parle au modérateur mdr)
Marsh Posté le 07-04-2010 à 11:12:18
Bonjour à tous,
Je tiens dans un premier temps à dire que je suis un noob en matiére de Macro sous Excel.
J'ai juste fais un peu de VBA au lycée et je sais qu'on commence une macro par Sub et on fini par End Sub
Je souhaiterais exporter dans un fichier texte, une base de données sous excel.
La premiére ligne correspond au nom des champs.
La macro en question doit pouvoir créer un fichier texte avec toutes les valeurs de cellules (mot, chiffre et nom de champs) entre guillemets et créer une sépration en point-virgule.
On doit obtenir quelque chose comme ça dans le fichier texte final:
"Nom";"Prenom";"Age"
"Lilou";"Dallas";"25"
"Corbene";"Dallas";"32"
(désolé pour l'exemple j'avais que ça en tête )
J'espére avoir été le plus clair possible.
Je vous remercie de votre aide.
Cordialement,
Message édité par GohanSSj2 le 03-05-2010 à 13:52:45