VBA - Excel - copie d'un CSV vers un XLS

jax54000 Messages postés 44 Date d'inscription mercredi 8 septembre 2004 Statut Membre Dernière intervention 24 mai 2008 - 23 mai 2008 à 23:52
 jepassaisparla - 24 mai 2008 à 16:29
Bonjour,

Je cherche à copier le contenu d'une feuille d'un fichier CSV, dans une feuille d'un fichierXLS.

Mon problème:
Lorsque j'ouvre un fichier CSV à la main (double clic), il apparaît comme un fichier xls (données réparties dans les différentes cellules) et je peux copier/coller son contenu sans problème.

Lorsque j'ouvre un fichier CSV via VBA (Set book = Workbooks.Open("C:\file.csv")) il m'ouvre le fichier mais il m'affiche le contenu en CSV (avec les ;) et non pas comme quand je le fais à la main.
Du coup lorsque j'essaie de copier coller (via VBA/ou à la main) ce contenu dans un fichier xls, le xls contient un contenu CSV (avec les ;) mais en aucun cas me met en forme les données CSV dans les différentes lignes/colonnes.

Y a-t-il d'autre moyen d'ouvrir un CSV de sorte à ce qu'il apparaîsse comme un fichier XLS ?

Merci de votre aide.

A+

23 réponses

mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
24 mai 2008 à 00:17
salut,

c'est bizarre, normalement les csv s'ouvre avec Excel s'il est installé.
Au pire ouvre le comme un fichier texte, c'est pas compliqué

@++

le mystérieux chevalier,"Provençal, le gaulois"
0
jax54000 Messages postés 44 Date d'inscription mercredi 8 septembre 2004 Statut Membre Dernière intervention 24 mai 2008
24 mai 2008 à 00:27
Merci mais j'ai mal du me faire comprendre.

Lorsque je l'ouvre via VBA, le fichier s'ouvre avec Excel simplement le contenu est un contenu CSV (un espèce de format txt avec les ;). Je souhaiterais que les données soient mises en page (dispersées sur les tableau) et non présentées en CSV brut.

J'espère que je me fais comprendre.

Merci. A+
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
24 mai 2008 à 00:59
Arf, tu as raison, bug bizarre !!
Pire que ça, avec l'enregistreur de macro, t'as juste la commande ..Open.., mais rien n'indique le choix du Txt / csv..
Pourtant, dans mes config régionales de mon pc, le séparateur de liste est bien le point-virgule..

Bref, j'ai tenté Workbooks.Open "C:\file.csv", , 4
Ca marche pas,

Mais j'ai remplacer dans le csv les point virgules par des virgules, et là ça s'ouvre nickel.

C'est pour le moment la seule alternative que je te propose, ouvrir ton fichier csv avec le bloc notes, CTRL H pour remplacer tous tes ; en , puis :
Workbooks.Open "C:\file.csv", , 2

@++

le mystérieux chevalier,"Provençal, le gaulois"
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
24 mai 2008 à 01:00
.. rajoute une virgule avant 2 :
Workbooks.Open "C:\file.csv", , , 2

(en avais oublié une )
@++

le mystérieux chevalier,"Provençal, le gaulois"
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jax54000 Messages postés 44 Date d'inscription mercredi 8 septembre 2004 Statut Membre Dernière intervention 24 mai 2008
24 mai 2008 à 08:16
Merci.

Mais cela m'étonne qu'il n'existe pas un moyen tout fait tout propre.

D'autres idées ou solutions ?

Je rappelle mon problème : copier (via VBA) une feuille d'un fichier CSV vers une feuille d'une fichier XLS.

Merci.
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
24 mai 2008 à 08:20
Ca m'intrigue aussi
Je vais essayer de trouver quelque chose pour que ça fonctionne, j''ai ma petite idée, bien que ce ne soit pas top
Ton fichier est-il toujours au même endroit et nommé pareil ?

@++

le mystérieux chevalier,"Provençal, le gaulois"
0
jax54000 Messages postés 44 Date d'inscription mercredi 8 septembre 2004 Statut Membre Dernière intervention 24 mai 2008
24 mai 2008 à 08:22
Oui tu peux le considérer.
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
24 mai 2008 à 08:29
Ok,

Arf, j'ai planté Excel
Je persévère

@++

le mystérieux chevalier,"Provençal, le gaulois"
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
24 mai 2008 à 08:36
Elle est pas mal celle là...

je tente de lancer le fichier avec ShellExecute, il me plante Excel..
Mais c'est bizarre, seul les fichier csv et xls plante. J'avais tenté ceci :

Option Explicit

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As
Long

Private Const sFile As String = "Nouveau.csv"
Private Const SW_SHOWNORMAL = 1

Sub Test()
    Dim lRet As Long
    
MsgBox ThisWorkbook.Path

lRet = ShellExecute(0&, vbNullString, ThisWorkbook.Path & "" & sFile, vbNullString, ThisWorkbook.Path,
SW_SHOWNORMAL)

Workbooks(sFile).Activate
Cells.Copy

ThisWorkbook.Activate
Range("A1").PasteSpecial xlPasteAll
Workbooks(sFile).Close False

End Sub
~
<small>[code.aspx?ID=39466 Mortalino] ~
Colorisation automatique</small>

Peut être car cette appli est déjà instanciée, va savoir !
Je cherche autre chose

@++

le mystérieux chevalier,"Provençal, le gaulois"
0
jax54000 Messages postés 44 Date d'inscription mercredi 8 septembre 2004 Statut Membre Dernière intervention 24 mai 2008
24 mai 2008 à 08:40
La solution pourrait aussi être cherchée dans cet axe:

réussir à ce que Excel, après avoir ouvert le fichier CSV via Workbooks.Open "C:\file.csv", affiche les données dans les cellules (comme il le fait quand j'ouvre le fichier CSV avec un double clic)...
0
jax54000 Messages postés 44 Date d'inscription mercredi 8 septembre 2004 Statut Membre Dernière intervention 24 mai 2008
24 mai 2008 à 08:41
En tout cas bien tenté.
0
jax54000 Messages postés 44 Date d'inscription mercredi 8 septembre 2004 Statut Membre Dernière intervention 24 mai 2008
24 mai 2008 à 08:54
Je viens de tomber sur ça :


une solution consiste à changer ton extension de fichier en txt et d'utiliser


Workbooks.OpenText


les paramètres de opentext te permettent de définir tes délimiteurs

je vais essayer
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
24 mai 2008 à 08:58
Mouais,

je suis tombé aussi dessus, mais mes tests sont infructueux, tente chez toi en Pas à pas (F8), on ne sait jamais :

Option Explicit

Private Const sFile     As String = "\Nouveau.csv"
Private Const sFileTxt  As String = "\Nouveau.txt"

Sub Test()
    Dim lRet As Long
    
Name ThisWorkbook.Path & sFile As ThisWorkbook.Path &
sFileTxt

Workbooks.OpenText ThisWorkbook.Path & sFileTxt, xlWindows,
1, xlDelimited,
True

Workbooks(sFileTxt).Activate
Cells.Copy

ThisWorkbook.Activate
Range("A1").PasteSpecial xlPasteAll
Workbooks(sFileTxt).Close False

End Sub
~
<small>[code.aspx?ID=39466 Mortalino] ~
Colorisation automatique</small>

@++

le mystérieux chevalier,"Provençal, le gaulois"
0
jax54000 Messages postés 44 Date d'inscription mercredi 8 septembre 2004 Statut Membre Dernière intervention 24 mai 2008
24 mai 2008 à 09:00
Pour moi ça ça marche :

    Set mnemonics_book = Workbooks.Open(mnemonics_csv.Text)
    mnemonics_book.SaveAs Filename:=Replace(mnemonics_csv.Text, ".csv", ".txt")
    Workbooks.OpenText Filename:=Replace(mnemonics_csv.Text, ".csv", ".txt"), DataType:=xlDelimited, Other:=True, OtherChar:=";"

Toujours ouvert à de meilleurs propositions

Merci.
A+
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
24 mai 2008 à 09:11
Bah je sais pas si il y a une meilleur solution, mais malgrè les péripéties du dev que je te propose, on arrive à nos fins
Je t'ai tout commenté :

Option Explicit

Private Const sFile     As String = "Nouveau.csv"
Private Const sFileTxt  As String = "Nouveau.txt"

Sub Test()
' je ne connaissais pas, mais appremment ça sert à renommer le XLS
en CSV
    Name ThisWorkbook.Path & "" & sFile As ThisWorkbook.Path & "" & sFileTxt

' là il ouvre le fichier texte (et donc ce n'est plus un csv ...
temporairement)
Workbooks.OpenText Filename:=ThisWorkbook.Path & "" & sFileTxt, Origin:=xlWindows, _
    StartRow:=1, DataType:=xlDelimited, Semicolon:=True

' on l'active et copie
toutes ses données
Workbooks(sFileTxt).Activate
Cells.Copy

'on active le
classeur contenant le code pour coller les données
ThisWorkbook.Activate
Range("A1").PasteSpecial xlPasteAll

' on
enregistre le fichier texte transformé, mais en cvs à nouveau
Workbooks(sFileTxt).SaveAs ThisWorkbook.Path & "" & sFile

' on le ferme
Workbooks(sFile).Close False

' et on efface le fichier
texte créé temporairement
Kill ThisWorkbook.Path & "" & sFileTxt

End Sub
~
<small>[code.aspx?ID=39466 Mortalino] ~
Colorisation automatique</small>

Content d'avoir trouvé cette soluce, j'espère qu'elle te conviendra

@++

le mystérieux chevalier,"Provençal, le gaulois"
0
jax54000 Messages postés 44 Date d'inscription mercredi 8 septembre 2004 Statut Membre Dernière intervention 24 mai 2008
24 mai 2008 à 09:27
It is perfect.

Merci beaucoup pour ton temps.

A+
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
24 mai 2008 à 09:30
de rien, après une nuit de travail, vais me coucher
Bon WE ;)

@++

le mystérieux chevalier,"Provençal, le gaulois"
0
jax54000 Messages postés 44 Date d'inscription mercredi 8 septembre 2004 Statut Membre Dernière intervention 24 mai 2008
24 mai 2008 à 09:31
Lol

Merci.

Bonne nuit.
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
24 mai 2008 à 10:29
Mortalino,

j'ai pas l'aide excel sous la main, mais il me semble que dans l'instruction WorkBook.Open, tu as la possibilité d'ouvrir un fichier texte en lui spécifiant le séparateur.

Certainement avec l'option 4, comme tu étais parti au départ, mais il faut en plus spécifier le séparateur dans un autre argument de l'instruction.

Je l'avais déjà fait pour un fichier tabulé, car effectivement depuis VBA, il ne me reconnaissais pas le format.

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #   
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
24 mai 2008 à 10:33
Voila ce que je viens de trouver dans la liste des sujets en rapport ci-dessous.

C'est pas WorkBook.Open, mais WorkBook.OpenText :

Workbooks.OpenText Filename:= NomDuFichier , _
                    Origin: =xlWindows, _
                    StartRow:= 1, _
                    DataType:=xlDelimited, _
                    TextQualifier:= _
                    xlDoubleQuote, _
                    ConsecutiveDelimiter:=False, _
                    Tab:=False, _
                    Semicolon:=True, _
                    Comma:=False, _
                    Space:=False, _
                    Other:=False

---- Sevyc64  (alias Casy) ---- <hr size ="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #   
0
Rejoignez-nous