Convertir un fichier CSV vers XLS

Bonjour, ^^"

J'ai besoin de votre aide pour faire fonctionner la macro suivante qui malheureusement ne fonctionne pas comme je le voudrai :

J'ai un bouton qui lorsque je clique dessus :

  • Demande d'ouvrir un fichier csv qui pointe vers le dossier F:\analyse\
  • Ouvre le fichier dans Excel et le converti directement avec comme séparateur des points-virgules ( ; )
  • l'enregistre sous le même nom et dans le même répertoire avec l'extension xls

Voici ce que j'ai crée comme macro mais sa marche mal x.x:

Sub Macro1()

    Dim Fichier As Variant

    msgbox "Veuillez ouvrir votre fichier"

    'Mets le répertoire F:\analyse comme répertoire pointé avec la liberté de choisir un autre répertoire dans boite de dialogue Ouvrir
     'Affiche la boîte de dialogue "Ouvrir"
     Fichier = Application.GetOpenFilename("F:\analyse")

    'Si cliqué sur bouton annuler annule tout
     If Fichier = False Then Exit Sub

    'Converti avec séparateur ";"
     Workbooks.OpenText Filename:=Fichier, DataType:=xlDelimited, TextQualifier:=xlNone, Other:=True, OtherChar:=";", ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, Comma:=False, TrailingMinusNumbers:=True

   'Sauvegarde du fichier sous le même nom que le fichier csv
    '(ex: fichier1.csv ---> fichier1.xls ou monnom.csv ---> monnom.xls)
    ActiveWorkbook.SaveAs Filename:="" & ".xls", Local:=True, FileFormat:=xlExcel8, ReadOnlyRecommended:=False, CreateBackup:=False

    msgbox "votre fichier est sauvegardé sur" & Fichier
End Sub

Merci de bien vouloir m'aider une seconde fois ^^"

Cordialement.

bonjour,

qu'est-ce qui marche mal ?

si tu mettais un exemple de ton fichier csv, ce serait plus simple pour déboger.

voici un exemple

70boc1.csv (989.00 Octets)

et quand je lance le script il m'affiche:

La méthode 'GetOpenFilename' de l'objet '_Application' à échouer

bonjour,

essaie ceci

    ChDir "f:\analyse"
    Fichier = Application.GetOpenFilename("csv file (*.csv),*.csv")

Je regarde ton code dans deux secondes, je te passe le code que Jean-Eric avais fait pour m'aider sur un projet.

Permet à l'utilisateur d'aller chercher un fichier .csv, de l'ouvrir, le convertir, le mettre en forme (ne t'intéresse pas dans l'immédiat) et l'enregistre au format .xlsX

Par contre besoin presssaaannttt aaahhhh

h2so4> sa marche mais maintenant j'ai l'erreur:

La méthode 'SaveAs' de l'objet '_Workbook' à échouer :/

Timothe URVOY> les gens qui vont utiliser ce fichiers vont être sur office 2003 et qui plus est il y a des macro qui seront intégré (sur une autre feuille) lors de l'enregistrement du fichier

en ce qui concerne ton fichier c'est un peux ce que je cherche: il le place dans le bon dossier mais ne possède pas le nom original ni la bonne extension :/ et je n'arrive pas à l'entrer dans mon code :/ sans qu'il m'affiche d'erreur :/ donc bon

Tu remplaces le format de sauvegarde :

Le format 97-2003

FileFormat:=xlExcel8

Et ça sauvegardera avec la bonne extension (.xls)

Je regarde pour le nom du fichier de sauvegarde

Timothe URVOY> oui si tu regarde ma macro tu trouve cette ligne

mais ce qui me pose problème dans ma macro c'est l'enregistrement du fichier dans le répertoire même

       ' enregistrement fichier
        myPath = ActiveWorkbook.Path & Application.PathSeparator
        myFile = ActiveWorkbook.Name
        ActiveWorkbook.SaveAs FileName:=myPath & myFile, FileFormat:=xlExcel8
        wbSource.Close False]

J'ai changé pour que cela prenne le nom du classeur actif. Ca à l'air de fonctionner, tu me dis si ça marche aussi pour toi ?

Oula attend j'ai parlé un peu vite

Ok donc il copie le nom complet, je regarde pour virer le .csv qui fait bugger la partie sauvegarde et normalement ça va marcher

il me demande si je veux remplacer le fichier csv original:

si je fais oui il m'affiche une erreur 424 en me demandant "Objet requis"

si je fais non il m'affiche erreur d’exécution 1004 disant que le format de fichier est différent de celui spécifié par l’extension de fichier et il me demande de regarder si mon fichier n'est pas corrompu x.x

  ' enregistrement fichier
        myPath = ActiveWorkbook.Path & Application.PathSeparator
        myFile = ActiveWorkbook.Name
        myFile = Left(myFile, Len(myFile) - 4)
        ActiveWorkbook.SaveAs FileName:=myPath & myFile, FileFormat:=xlExcel8

Normalement c'est la bonne, ce coup-ci on retire le .csv du nom d'origine, on rajoute l'extension et on a le même fichier au format .xls (Avant il copiait tout le nom donc Machin.csv et du coup il comprenait pas pourquoi on voulais rajouter dérrière le .xls et il nous insultait en Suédois, Aaaah l'informatique)

Tu confirmes ?

si je garde l'extension csv

j'ai erreur 424 objet requis sa ma bien crée mon fichier en xls

et ma conversion ne fonctionne plus x.x

si j'enleve l'extension csv

erreur 1004 fichier inaccessible

On va en venir à bout, alors attend je te renvoi le programme entier (j'ai virer tout ce qui n'avais pas lieu d'être)

Je suis tellement en train de saturer d'Excel que je fais des fautes à chaque phrases

Le fichier que je t'ai envoyé Prend le nom du classeur que tu as ouvert, retire les 4 derniers caractères (donc si le fichier s'appelle Machin.csv il garde seulement Machin), puis finalement il rajoute le .xls derrière.

Oui sa marche, mais ça ne pointe pas sur "F:\analyse" quand je dois choisir le fichier :/ (J'ai essayé ChDir "F:\analyse" avant le "Application.GetOpenFilename" sa ne marche pas non plus)

Et j'ai quelque fichier qui n'ont pas l'extension.csv" et malheureusement sa ne les convertis pas non plus :/

on n'est pas tous parfait en orthographe ni en grammaire hein x) on a le droit de se tromper

J'avais complétement zapé le chemin, attend je rajoute ça dans le code.

Le code à été écrit pour aider l'utilisateur en n'affichant que les fichiers .csv, du coup si il n'y a qu'un seul autre types de fichiers, on le rajoute, si il y en a plusieurs, je retire le filtre pour qu'il affiche tous les fichiers, tu me dis pour que je l'arrange.

Là j'ai rajouté de façon à ce qu'il ouvre directement sur :

 ChDrive "F"
        ChDir "F:\analyse"

Tu peux tester, voir si ça fonctionne, si c'est le cas, tu me dis quels sont les formats de fichiers que tu utilises, voir si on retire le filtre ou si on ajoute à celui-ci d'autres formats

il y en a plusieurs malheureusement :/

et j'ai essayé de supprimer le csv de cette façon FileToOpen = Application.GetOpenFilename("Tous les fichiers (*.*),*.*")

mais sa ne marche pas non plus et mon fichiers CSV fonctionne avec des point virgules ( ; )

FileToOpen = Application.GetOpenFilename()

Normalement si tu l'écris comme ça ...

Ca pourra t'aider à mieux comprendre la fonction si jamais tu veux la réutiliser

http://msdn.microsoft.com/fr-fr/library/office/ff834966(v=office.15).aspx

j'ai essayé aussi :/ il ouvre bien le fichier mais ne le convertis pas les points virgules ( ; ) :/

il y a aussi cette phrase qui ne marche plus non plus:

msgbox "votre fichier est sauvegardé sur" & Fichier

le "Fichier" c'est le chemin de destination autrement dit: lettre:\chemindufichier\nomdufichier.xls

et je connais ce site c'étais ma première sources.

EDIT: j'ai remarquer aussi que quand le fichier n'a pas l'extension CSV, la sauvegarde ne fonctionne pas non plus x.x

Juste une question, quand tu ouvre un fichier .csv, tout se retrouve dans la colonne A, séparé seulement par un point virgule?

Auquel cas :

        'Convertis le contenu (Excel regroupe tout dans la colonne A, il faut donc lui redonner sa forme d'origine)
        Columns("A:A").Select
        Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
        Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
        :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _
        Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1)), TrailingMinusNumbers:=True

C'est gros, c'est moche, mais Excel le fais comme ça (enregistrer macro, convertir).

Pour le chemin c'est plus compliqué, je n'ai pas le même bureau que toi, mais dans l'idée si par exemple tu veux aller à un endroit sur ton bureau ça sera du genre:

ChDrive "F"
        ChDir "F:\lettre\chemindufichier"

C'est le chemin écrit au dessus dans ta fenêtre quand tu ouvres un dossier (exemple : T:\Photos\PhotosDeChat\LolCats), ne connaissant pas le nom du dossier que tu veux ouvrir, tu va jusqu'au dossier le contenant (ou au plus près))

J'avais oublier dans le fichier, à dégager (je ne convertissais les valeurs que de la colonne 5 à la dernière colonne ayant du contenu) ou sinon tu remplace le 5 par un 1, mais ça ne convertis que . en séparateur décimal (l'équivalent de la , chez nous; vu que en .csv tout est considéré comme du texte, même les nombres) :

 ' conversion données numériques
        For iCol = 5 To lastCol
            Columns(iCol).TextToColumns DecimalSeparator:="."
        Next iCol

Oui tout se retrouve dans la colonne A :/

Si tu regarde mon 1er code sur la première page, on peux choisir le caractère à ajouter pour séparer les tableaux :/ (Other:=True, OtherChar:=";") .

et non je ne veux pas aller dans un autre répertoire, je veux que:

une fois la macro exécuter entièrement, il affiche une msgbox affichant le chemin où le fichier xls à été enregistrer

ex: Votre fichier est sauvegardé sur F:\analyse\monfichier.xls

c'est tout :/

EDIT: j'ai remarqué que sa ouvrai un nouveau document x.x mais je ne veux pas que sa louvre dans un nouveau document mais dans la Feuil1 qui se trouve à côté.

Rechercher des sujets similaires à "convertir fichier csv xls"