Macro Excel : Copie Csv vers xls
Bakou
-
TraderAS Messages postés 119 Statut Membre -
TraderAS Messages postés 119 Statut Membre -
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
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:
- Macro Excel : Copie Csv vers xls
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Si ou excel - Guide
- Déplacer colonne excel - Guide
5 réponses
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
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
Bakou
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?
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
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
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?
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?
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.
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.
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...
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...
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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