Macro Excel : Copie Csv vers xls

Fermé
Bakou - 18 nov. 2009 à 11:37
TraderAS Messages postés 110 Date d'inscription lundi 3 décembre 2012 Statut Membre Dernière intervention 26 avril 2018 - 22 mars 2013 à 22:40
Bonjour,
J'aimerai faire fonctionner une macro Excel qui est censée ouvrir, un à un, un grand nombre de fichier csv pour alimenter, un grand nombre de xls correspondants.
Le problème que je rencontre, c'est que le Csv étant un fichier plat, quand je le copie dans ma sheet/xls, il considère que le séparateur de cellule est la virgule alors qu'il s'agit du point virgule....(Du coup tous mes décimaux sont cassés en deux, et toutes les lignes contenant uniquement des ";" sont stockées sur la première colonne)

J'ai bien tenté de faire des OpenText avec DataType:=xlDelimited et Semicolon:=True mais il s'en fiche royalement. De même avec Other:=True et OtherChar:=";" .....

Bref, à ce stade de la compétition, mon code ressemble à peu prêt à ceci :

repos = ThisWorkbook.Path + "\"
Workbooks.OpenText repos + source
Range("A1:AH41").Select
Selection.Copy
Workbooks.Open repos + dest
Set wks = Workbooks(dest).Worksheets("Data")
Range("A1:AH41").Select
ActiveSheet.Paste
Workbooks(dest).Application.DisplayAlerts = False
Workbooks(dest).Close savechanges:=True
Workbooks(source).Close savechanges:=False
Application.DisplayAlerts = True


Source et Dest sont reçus en paramètres bien entendu.

Voilà toute contribution est bien entendu bienvenue !
Merci d'avance
A voir également:

5 réponses

pou pouille Messages postés 207 Date d'inscription mardi 20 octobre 2009 Statut Membre Dernière intervention 20 juillet 2012 31
18 nov. 2009 à 11:58
bonjour,
moi je fais en sorte que l'importation se fasse sur une seul colonne (A:A) (en séparation je met le tabulation comme ca je suis tranquil ) ensuite je converti le a:a avec texttocolumns
    Selection.TextToColumns Destination:=Range("A:A"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
        Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _
        :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1)), TrailingMinusNumbers:= _
        True

1
Comment fais tu pour que l'import se fasse par une seule colonne? tu fais un openText ? A la limite, quand je le copie, je présume qu'il est sous forme de texte brut, j'ai l'impression que c'est en le collant qu'il se dit "oh tiens une virgule, faisont une cellule"..... Y a t il un moyen de coller en forçant une seule colonne (quitte à convertir ensuite) ou alors un moyen de le forcer à considérer les ";" comme séparateurs?
0
pou pouille Messages postés 207 Date d'inscription mardi 20 octobre 2009 Statut Membre Dernière intervention 20 juillet 2012 31
18 nov. 2009 à 15:31
en réalité j'ouvre le fichier csv, les cases sont bien séparées dans leurs colones
et je l'enregistre au format xls
si tu pouvai me metre un exemple de fichier sur Cijoin ca pourai m'aider a comprendre comment arrive ton fichier et comment tu veut le transformer . merci
0
En fait, c'est pour éviter d'avoir à ouvrir les 70 fichiers et a les enregistrer en excel à la main que j'aurai besoin d'une manip.

En gros le csv contient quelque chose du genre :
texte | 2,5 | 3,4
texte | 7,5 | ploum


une fois copié, mon xls donne :
texte;2 | 5;3 | 4;
texte;7 | 5;ploum;;


ce qui ne m'arrange pas du tout ^^'

c'est plus clair?
0
pou pouille Messages postés 207 Date d'inscription mardi 20 octobre 2009 Statut Membre Dernière intervention 20 juillet 2012 31
19 nov. 2009 à 08:58
bonjour,
cela m'éclair un peut plus mais j'ais des questions:
-les cases d'origines sont séparées correctement au format .csv ?
-les | représentent les tabulations?

si c'est bien le cas je pense que le problème peut venir du copier coller ( peut etre faire un collage spécial sans mise en forme !)
de plus si les 70 fichier ont des noms soit connu dans un fichier soi qui se suivent ex : toto1.csv , toto2.csv ... dans ce cas on peut faire une boucle pour répéter l'opération sur les 70 fichier.
ex:
for i=1 to 70
...
Next i

pour ma part cela ne me dérange pas du tout de créer un fichier Excel "tampon" puisque avec Excel on peut aussi supprimer des fichier du disque.
0
Non, pas de tab, le cvs ressemble plutôt à un truc du genre :
Utilisation;;
;Temps de reponse moyen;324,6;2275,0;3194,8;9247,1;465,6;323,8;


et du coup il coupe mes décimaux.... et se fiche royalement de mes ";", bien que j'ai essayé de l'ouvrir de la manière suivante :
Workbooks.OpenText Filename:=repos + source, Origin:=xlWindows, _
StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlNone, DecimalSeparator:=",", _
ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=True, Comma:=False _
, Space:=False, Other:=True, OtherChar:=";"

il s'en moque...
0
pou pouille Messages postés 207 Date d'inscription mardi 20 octobre 2009 Statut Membre Dernière intervention 20 juillet 2012 31
19 nov. 2009 à 12:01
je plante un peut la ,
pourais-tu déposer (au moin une partie j'ai pas besoin de tous) les fichiers, sans données confidentielles
le mieux serai : 1 fichier *.csv (juste quelques lignes)
1fichier *.xls (pour le format final)
et le fichier ou est la macro
ici http://www.cijoint.fr/index.php
que je puisse apporter mon aide
0
(j'essaye de faire ça demain)
0

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

Posez votre question
TraderAS Messages postés 110 Date d'inscription lundi 3 décembre 2012 Statut Membre Dernière intervention 26 avril 2018 1
22 mars 2013 à 22:40
Bonjour,

j'ai cherché mais je n'ai pas trouvé de réponse au problème inverse c'est à dire je veux savoir comment on peut copier une ligne à partir d'un fichier excel .xlsm et la copier dans un fichier .csv

j'ai cette macro mais elle endommage min fichier .csv et je n'arrive pas à obtenir le résultat

Sub Macro6CSV()

Application.ScreenUpdating = False
Rep = "C:\Users\toshiba\Desktop\TechnicalAnalysis\"
FichD = ActiveWorkbook.Name
FichTest = "AirLiquide - Copie.csv"
'

Workbooks.Open Rep & FichTest
Rows("1:1").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

With Workbooks(FichD)
.Sheets("Technical").Range("C5:I5").Copy
Workbooks(FichTest).Sheets("AirLiquide - Copie").Range("A1:G1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A2:G2").Select
Selection.Copy
Range("A1:G1").Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False

ActiveWorkbook.Save
ActiveWorkbook.Save
ActiveWindow.Close

End With
End Sub
0