jax54000
Messages postés44Date d'inscriptionmercredi 8 septembre 2004StatutMembreDernière intervention24 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 ?
jax54000
Messages postés44Date d'inscriptionmercredi 8 septembre 2004StatutMembreDernière intervention24 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.
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 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
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 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 ?
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 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
jax54000
Messages postés44Date d'inscriptionmercredi 8 septembre 2004StatutMembreDernière intervention24 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)...
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 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
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 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 #