IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Fichier CSV en virgule vers point virgule [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2012
    Messages : 14
    Points : 3
    Points
    3
    Par défaut Fichier CSV en virgule vers point virgule
    Bonjour,

    Voilà que n'ayant pas des connaissances en Excel, je me trouve avec un fichier en CSV qu'un de mes utilisateurs (je suis admin systèmes) télécharge depuis les US. Le problème est que ce fichier arrive en virgule et le Windows est en Français, donc en Point virgule. L'idée de changer les
    Paramètres Régionaux ne peut pas s’appliquer car un logiciel tiers a besoin des paramètres en Français.
    Je cherche à créer une macros qui permettrait de rendre les données lisibles et dans l'ordre d'origine.
    Sur un site quelqu'un avait publié la ligne suivante comme solution:

    ActiveWorkbook.SaveAs Filename:="C:\tmp\cpp+\test4.csv", FileFormat:=xlCSV, CreateBackup:=False, local :=True

    Mais elle ne marche pas sur la version 2010.

    Quelqu'un aurait une idée ou saurait me guider sur cette macros?

    Il est possible que cette question existe déjà, mais après avoir cherché pas mal de temps, je n'ai pas vraiment trouvé.

    merci d'avance.

  2. #2
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Bonjour,

    Si tu cherches a ouvrir le fichier avec séparateur "," alors essais le code ci dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    'Ouvre le fichier CSV avec virgule
    Application.Workbooks.OpenText Filename:="C:\tmp\cpp+\test4.csv", Comma:=True
    'Enregistre au format CSV avec séparateur system
    ActiveWorkbook.SaveAs Filename:="C:\tmp\cpp+\test4.csv", FileFormat:=xlCSV, local :=True
    'Ferme le classeur
    ActiveWorkbook.Close False

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2012
    Messages : 14
    Points : 3
    Points
    3
    Par défaut
    Bonjour jfontaine,
    Merci de venir aussi vite avec une solution. Il serait sûrement résultat de mon ignorance, mais je n'arrive pas à enregistrer la macro.
    Je procède comme suit:
    sur Excel, onglet développeur, je clique sur Insertion/Modules
    Dans la fenêtre en blanc, je copie et colle ta suggestion, et je modifie le répertoire de destination en: C:\temps\nomdufichier.csv à deux endroits.
    Ensuite j'enregistre directement sur Visual en choisissant la version en csv avec point virgule. Un message me demande si je veux garder ou pas la version. Si je clique sur Oui, rien ne s'enregistre. Si je prends le choix de Non, j'entre dans une boucle que ne finie jamais.
    La question est donc, qu'est-ce que je ne fais pas correctement?

  4. #4
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Si tu essais de mettre la macro dans le fichier CSV il est normal que ça ne fonctionne pas.
    Dans ton cas, je placerais le code dans un module du Classeur de macros personnalisés (Perso.xls).
    Cette macro sera alors disponible, sur le poste, à n'importe quel moment

  5. #5
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2012
    Messages : 14
    Points : 3
    Points
    3
    Par défaut
    Mais alors, allons un peu plus loin car même appliquer la solution que tu me donnes, et que je te remercie d'avance, je ne sais pas faire.
    Ma tentative de création était faite sur une page Excel vierge avec justement cette idée. Mais, lorsque j’essaie de l'enregistrer en tant qu'Excel (en xlsx) un message me dit que les fonctionnalités suivantes ne peuvent pas être enregistrées dans des classeurs sans macros.
    en def, c'est la phrase: ...je placerais le code dans un module du Classeur de macros personnalisés (Perso.xls)... que je ne sais pas faire.
    Encore une fois, je m'excuse pour mon ignorance.

  6. #6
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2012
    Messages : 14
    Points : 3
    Points
    3
    Par défaut
    Bien, en attendant, je crois que j'ai réussi à créer le fichier Perso. En tout cas, lorsque je l'ouvre, il y a bien la macro voulut. Le fichier porte l'extension .xlsm, est-ce correct? Après confirmation je posterai la méthode à suivre pour ceux qui s'intéressent.
    Alors, j'ouvre le fichier Perso.xlsm et vais chercher la macro, qui je trouve. Je clique ensuite sur Exécuter et le document en virgule s'ouvre bien... mais toujours en virgule, donc illisible, et très rapidement la page devienne une page Excel vierge.Qu'est-ce qui manque? Pourquoi tout est supprimé? On dirait que reprends les propriétés de la page Perso.xlsm et non pas celle que je veux modifier...

  7. #7
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Avec les version antérieur à 2007, les fichiers excel avaient l'extension xls
    A partir de la version 2007, les fichiers ont une extension xlsx pour les fichiers sans macros et xlsm pour les fichiers avec macros.

    La première ligne de code doit ouvrir le fichier CSV dans un nouveau classeur en mettant chaque champs dans une cellule. Est ce bien le cas ?
    Mais les autres lignes en commentaire pour tester (apostrophe devant la ligne)

  8. #8
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2012
    Messages : 14
    Points : 3
    Points
    3
    Par défaut
    D'accord pour l'extension. Je déduis donc que j'ai bien choisi le format à utiliser pour la création de la macro, merci.
    Quant à la question, la réponse est: je ne sais pas. Lorsqu'il s'ouvre, le temps qu'il me laisse pour voir est de moins d'un seconde. Ensuite le fichier s'ouvre sur une page vierge.

    Jérôme,
    J'ai mis un apostrophe devant la ligne: ActiveWorkbook.Close False, afin d'éviter que le document se ferme. Comme ça j'ai pu voir que le document s'ouvre à l'état d'origine. Le champs ne sont pas dans les cellules comme voulut.
    Merci.

  9. #9
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2012
    Messages : 14
    Points : 3
    Points
    3
    Par défaut
    Je dois m'excuses à ceux qui suivent le dossier, mais je dois rectifier mon tir.

    Le document s'ouvre finalement correctement et dans le format voulut. Mon erreur était que je continuais à faire des test sur un "original" qui avait été modifié par les successifs tests.

    Donc, actuellement j'ai le fichier en ";" et les champs sont à leurs places.
    Je voudrais toute de même spécifier que finalement je ne vais pas utiliser la ligne de SaveAs. Cependant,, il y a un détail à revoir:

    lorsque la commande s'exécute, un nouveau fichier est créé avec le nom donné dans la ligne SaveAs. Malgré cela, lorsqu'on va fermer le fichier, le système demandera si on veut enregistrer ou pas ce fichier. Si le fichier est en CSV sur la ligne SaveAs, il vont avoir pas mal de petites fenêtres à valider qui ne sont pas toujours faciles à gérer lorsque la personne est pressé ou avec la tête ailleurs. Pour cette raison, j'ai modifié la ligne comme suit:

    Ligne originale:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWorkbook.SaveAs Filename:="C:\tmp\cpp+\test4.csv", FileFormat:=xlCSV, local :=True
    Ligne modifié par moi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWorkbook.SaveAs Filename:="C:\tmp\cpp+\test4.xlsx", FileFormat:=xlCurrentPlatformText, local :=True
    Malgré cette modification il faut de toute façon cliquer sur Enregistrer à la fin de la consultation. Cependant, la fenêtre qui s'ouvrira sera déjà en format .xlsx et après avoir cliqué sur "Enregistrer" un message demandera si l'on veut modifier le fichier déjà existant. On dit "Oui" et le tour est joué!
    La question est s'il y a un moyen d'exécuter la commande SaveAs sans avoir besoin de la répéter lorsque l'on veut fermer le fichier et que, bien évidement, on n'a pas fait des modifications.

    Bien, pour moi c'est donc bon. Je ferrais un petit recap dans un autre message afin de résumer les étapes à suivre, en espérant que des ignorants comme moi puisse l’exécuter seuls.
    Merci. Je vais clôturer le dossier après le recap.

  10. #10
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2012
    Messages : 14
    Points : 3
    Points
    3
    Par défaut
    Récapitulatif,

    La première étape est de créer un fichier Excel qui puisse contenir une macro. pour celle-là:

    1. ouvrir un fichier Excel vierge.
    2. Aller dans l'onglet "Fichier"/ Options et cliquer sur Personnaliser le ruban.
    3. Dans la fenêtre de gauche, cocher la case nommée: Développeur.
    4. Cliquer sur OK.
    5. Aller sur l'onglet "Développeur" qui s'est ouvert sur la page Excel.
    6. Modifier le niveau de sécurité en "Activer toutes les Macros"
    7. Cliquer sur Visual Basic.
    8. Aller sur Outils dans le menu en haut de la page et choisir "Macros"
    9. Dans la fenêtre écrire le nom de la macros voulut et cliquer sur "Créér.
    10. Dans la nouvelle fenêtre, écrire les commandes qui exécuteront la macro. Ces lignes doivent se trouver entre la commande "Sub" (ou autre) et "End Sub".
    11. Cliquer sur "Enregistrer sous".
    12. Dans la fenêtre d’Enregistrer sous... Choisir le répertoire ou se trouvera le fichier. Nommer le fichier "Perso" et dans la petite fenêtre en dessous "Type" choisir: Classuer Excel (prenant en charge les macros) (*.xlsm).
    13. Fermer la page Excel.
    14. Aller sur le document sur lequel on veut exécuter la macro.
    15. Aller dans l'onglet "Développeur" et cliquer sur "Macros".
    16 Dans la fenêtre qui s'ouvrira, il devrait apparaître la macro. Cliquer sur "Exécuter".
    17. Si tout va bien, petite astuce à suivre pour faciliter son exécution: http://excel-competence.over-blog.co...-48929555.html

    Remarques:

    1. Dans la proposition faite par jfontaine le dossier C:\tmp... n'est qu'un exemple. C'est ici qu'il faut spécifier lors de l'écriture de la macro (point 10) le répertoire où sera enregistré le fichier Excel avec la macro (point 12).

    2. Dans mon dernier post, j'ai fais un changement sur la ligne de SaveAs que je trouve pertinente lorsque l'utilisateur qui va travailler avec la macro n'est soit même mais une tiers personne.

    3. Dans la proposition faite par jfontaine la macro finie par la ligne: ActiveWorkbook.Close False. Cette commande ferme le fichier Excel sur lequel on doit finalement travailler. J'ai ajouté un " ' " (apostrophe (bouton 4 en minuscule)) au début de la ligne afin de la rendre invalide, ce qui m'a permit de rectifier un mauvais tir et tenir la main sur le document que je voulais voir.

    En remerciant l'aide de jfontaine, j'espère que ce post puisse servir à d'autres.

    Dolchan

  11. #11
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    pour éviter de confirmer l'écrasement du précédent fichier, tu peux désactiver les alertes via DisplayAlerts

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Application.DisplayAlerts = False
    ActiveWorkbook.SaveAs Filename:="C:\test4.csv", FileFormat:=xlCSV, local:=True
    ActiveWorkbook.Close False
    Application.DisplayAlerts = True

  12. #12
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2012
    Messages : 14
    Points : 3
    Points
    3
    Par défaut
    Merci pour la recommandation jfontaine.
    Je crois aussi que j'ai fermé trop vite cette discussion. Que faut-il faire pour le réactiver?
    En effet, tous les tests ont été fait sur un PC avec le fichier en question et la macro en local aussi. Cependant, ces fichiers se trouve en réalité sur le réseau et chaque mois ce fichier sera mis avec le même nom mais dans un répertoire différent (par nom du mois). Lorsque je clique sur un de ces fichiers (sur le réseau), je reçois un message d'erreur, bien évidement, de type 1004 ou Excel n'est pas autorisé à accéder à ce répertoire...
    La question est donc quelle est la commande à utiliser lorsque la macros est sur le PC et le document dans un répertoire sur le réseau?
    Merci de nouveau.

  13. #13
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2012
    Messages : 14
    Points : 3
    Points
    3
    Par défaut
    Bien, je n'ai pas eu des réponses et je ne trouve pas non plus de solution. Etant donné que je dois avancer, je vais essayer ma chance par un autre chemin.
    Je vais clôturer ce dossier et rouvrir un autre avec un intitulé différent (macros sur PC, fichier en réseau).
    Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 02/11/2012, 17h24
  2. Séparateur virgule ou point virgule pour validation données
    Par steelspirit dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/09/2010, 11h47
  3. [AC-2003] Conversion automatique virgule vers point
    Par pal017 dans le forum VBA Access
    Réponses: 2
    Dernier message: 11/08/2009, 21h57
  4. Séparateur virgule ou point virgule pour validation données
    Par INeedHelp dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 15/05/2008, 11h12
  5. Import fichier csv dans access (séparateur décimal = virgule)
    Par Averroes dans le forum Modélisation
    Réponses: 16
    Dernier message: 16/09/2007, 11h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo