[Excel/VBA]Macro copier/coller à partir d'un CSV
Tags :
Dernière réponse : dans Programmation
Bonjour,
Je souhaite faire la chose suivante :
1, Ouvrir tous les fichiers CSV d'un dossier (ce sont des nombres qui s'incrémente)
2, Copier certaines cellules (à chaque fois les mêmes dans le CSV)
3, Coller le contenu dans une ligne d'un classeur XLS (où seront stockées toutes les infos), chaque ligne correspond à un CSV.
4, Fermer les CSV
L'idéal étant d'automatiser cette opération, en changeant de ligne automatiquement à chaque fois.
Les problèmes :
1, Ca ne marche qu'avec 129718.csv
2, Une fois 1, réglé si je souhaite prendre un autre csv les données seront écrasés, il faudrait qu'avec chaque nouveau csv ouvert je descende d'une ligne automatiquement.
3, Peut on ouvrir "n" csv dans un même dossier pour automatiser le traitement ?
4, A la fin le fichier Statistik se ferme sans enregistrer
Merci d'avance pour votre aide
Je souhaite faire la chose suivante :
1, Ouvrir tous les fichiers CSV d'un dossier (ce sont des nombres qui s'incrémente)
2, Copier certaines cellules (à chaque fois les mêmes dans le CSV)
3, Coller le contenu dans une ligne d'un classeur XLS (où seront stockées toutes les infos), chaque ligne correspond à un CSV.
4, Fermer les CSV
L'idéal étant d'automatiser cette opération, en changeant de ligne automatiquement à chaque fois.
Les problèmes :
1, Ca ne marche qu'avec 129718.csv
2, Une fois 1, réglé si je souhaite prendre un autre csv les données seront écrasés, il faudrait qu'avec chaque nouveau csv ouvert je descende d'une ligne automatiquement.
3, Peut on ouvrir "n" csv dans un même dossier pour automatiser le traitement ?
4, A la fin le fichier Statistik se ferme sans enregistrer
Sub macro() Dim i As Long For i = 119 To 497 NomFic = Application.GetOpenFilename(, , "programmes Presses") If NomFic <> False Then Workbooks.OpenText Filename:=NomFic, DataType:=1, Semicolon:=True, local:=True End If Workbooks("Statistik.xls").Sheets("Tabelle1").Cells(i, 1).Value = Range("B6").Value Workbooks("Statistik.xls").Sheets("Tabelle1").Cells(i, 2).Value = Range("C133").Value Workbooks("Statistik.xls").Sheets("Tabelle1").Cells(i, 3).Value = Range("C137").Value Workbooks("Statistik.xls").Sheets("Tabelle1").Cells(i, 4).Value = Range("C141").Value Workbooks("Statistik.xls").Sheets("Tabelle1").Cells(i, 5).Value = Range("C156").Value Workbooks("Statistik.xls").Sheets("Tabelle1").Cells(i, 6).Value = Range("C160").Value Workbooks("Statistik.xls").Sheets("Tabelle1").Cells(i, 7).Value = Range("C164").Value Workbooks("Statistik.xls").Sheets("Tabelle1").Cells(i, 8).Value = Range("C179").Value Workbooks("Statistik.xls").Sheets("Tabelle1").Cells(i, 9).Value = Range("C183").Value Workbooks("Statistik.xls").Sheets("Tabelle1").Cells(i, 10).Value = Range("C187").Value Workbooks("Statistik.xls").Sheets("Tabelle1").Cells(i, 11).Value = Range("C202").Value Workbooks("Statistik.xls").Sheets("Tabelle1").Cells(i, 12).Value = Range("C206").Value Workbooks("Statistik.xls").Sheets("Tabelle1").Cells(i, 13).Value = Range("C210").Value Workbooks("Statistik.xls").Sheets("Tabelle1").Cells(i, 14).Value = Range("C225").Value Workbooks("Statistik.xls").Sheets("Tabelle1").Cells(i, 15).Value = Range("C229").Value Workbooks("Statistik.xls").Sheets("Tabelle1").Cells(i, 16).Value = Range("C233").Value ActiveWorkbook.Saved = True ActiveWorkbook.Close Next i End Sub
Merci d'avance pour votre aide
Autres pages sur : excel vba macro copier coller partir csv
Lassé par la pub ? Créez un compte
Salut,
Tu jongles avec plusieurs classeurs et bien sûr, tu te prends une quille sur le pied
.
.
.
Bon, j'arrête de faire le clown et je t'explique.
Excel décide tout seul de ce qui est actif ou pas, de ce qui est sélectionner ou pas. Aussi, ne faut-il pas trop s'y fier.
Je mène ici un combat contre ça. Juges-en par toi-même : http://www.google.fr/search?q=zeb+activetruc+site%3Apre...
Donc avant de commencer à ouvrir les CSV, on va retenir le classeur Statistik !
Et tant qu'à faire, on va aussi le faire pour un CSV, ce sera plus facile pour travailler sur un autre sans tout changer
.
Bon, ce code est trop long. Il y a 16 fois la même ligne !
Bon, digère déjà un peu tout ça.
Ensuite, je te parlerai de la bibliothèque FileSystemObject, et de ses objets Folder et File.
Je te laisse même l'occasion de faire toi-même quelques recherches...
Tu jongles avec plusieurs classeurs et bien sûr, tu te prends une quille sur le pied
.
.
.
Bon, j'arrête de faire le clown et je t'explique.
Excel décide tout seul de ce qui est actif ou pas, de ce qui est sélectionner ou pas. Aussi, ne faut-il pas trop s'y fier.
Je mène ici un combat contre ça. Juges-en par toi-même : http://www.google.fr/search?q=zeb+activetruc+site%3Apre...
Donc avant de commencer à ouvrir les CSV, on va retenir le classeur Statistik !
Et tant qu'à faire, on va aussi le faire pour un CSV, ce sera plus facile pour travailler sur un autre sans tout changer
.
Dim i As Long Dim wb_statistik As Workbook Dim ws_statistik As Worksheet Dim wb_csv As Workbook Dim NomFic As String Set wb_statistik = ActiveWorkbook Set ws_statistik = wb_statistik.Sheets("Tabelle1" ) For i = 119 To 497 NomFic = Application.GetOpenFilename(, , "programmes Presses" ) If Not NomFic Then Exit Sub '// Ben quoi, si on veut pas l'ouvrir, on s'arrête ! Workbooks.OpenText Filename:=NomFic, DataType:=1, Semicolon:=True, local:=True Set wb_csv = ActiveWorkbook ws_statistik.Cells(i, 1).Value = wb_csv.Worksheets(1).Range("B6" ).Value ws_statistik.Cells(i, 2).Value = wb_csv.Worksheets(1).Range("C133" ).Value ws_statistik.Cells(i, 3).Value = wb_csv.Worksheets(1).Range("C137" ).Value ws_statistik.Cells(i, 4).Value = wb_csv.Worksheets(1).Range("C141" ).Value ws_statistik.Cells(i, 5).Value = wb_csv.Worksheets(1).Range("C156" ).Value ws_statistik.Cells(i, 6).Value = wb_csv.Worksheets(1).Range("C160" ).Value ws_statistik.Cells(i, 7).Value = wb_csv.Worksheets(1).Range("C164" ).Value ws_statistik.Cells(i, 8).Value = wb_csv.Worksheets(1).Range("C179" ).Value ws_statistik.Cells(i, 9).Value = wb_csv.Worksheets(1).Range("C183" ).Value ws_statistik.Cells(i, 10).Value = wb_csv.Worksheets(1).Range("C187" ).Value ws_statistik.Cells(i, 11).Value = wb_csv.Worksheets(1).Range("C202" ).Value ws_statistik.Cells(i, 12).Value = wb_csv.Worksheets(1).Range("C206" ).Value ws_statistik.Cells(i, 13).Value = wb_csv.Worksheets(1).Range("C210" ).Value ws_statistik.Cells(i, 14).Value = wb_csv.Worksheets(1).Range("C225" ).Value ws_statistik.Cells(i, 15).Value = wb_csv.Worksheets(1).Range("C229" ).Value ws_statistik.Cells(i, 16).Value = wb_csv.Worksheets(1).Range("C233" ).Value wb_csv.Close SaveChanges=False Next '// Hey, pas de variable de rappel. On n'est plus en 1985! wb_statistik.Save
Bon, ce code est trop long. Il y a 16 fois la même ligne !
Dim cel_statistik As Range '// La cellule dans laquelle on va écrire Dim addr As String Set cel_statistik = ws_statistik.Cells(119, 1) For i = 119 To 497 NomFic = Application.GetOpenFilename(, , "programmes Presses" ) If Not NomFic Then Exit Sub '// Ben quoi, si on veut pas l'ouvrir, on s'arrête ! Workbooks.OpenText Filename:=NomFic, DataType:=1, Semicolon:=True, local:=True Set wb_csv = ActiveWorkbook For Each addr In ("B6", "C133", "C137", "C141", "C156", "C160", "C164", "C179", "C183", "C187", "C202", "C206", "C210", "C225", "C229", "C233") cel_statistik.Value = wb_csv.Worksheets(1).Range(addr).Value Set cel_statistik = cel_statistik.Offset(0, 1) Next Set cel_statistik = cel_statistik.EntireRow.Cells(1,1).Offset(1, 0) '// Retour chariot, à la ligne wb_csv.Close SaveChanges=False Next
Bon, digère déjà un peu tout ça.
Ensuite, je te parlerai de la bibliothèque FileSystemObject, et de ses objets Folder et File.
Je te laisse même l'occasion de faire toi-même quelques recherches...
- | Alerter
Salut Zeb,
Tout d'abord merci pour ton aide. En fait en ne voyant pas de réponse arriver j'ai essayé d'améliorer mon code qui est le suivant :
J'ai changé l'ouverture du fichier pour que ca soit automatiaque grâce à l'incrément. Seulement le problème c'est que si excel ne trouve pas le fichier (il en manque des fois) il s'arrête et j'aimerais bien qu'il continue.
Je vais voir avec ton code si je peux alléger le mien.
Merci !
Tout d'abord merci pour ton aide. En fait en ne voyant pas de réponse arriver j'ai essayé d'améliorer mon code qui est le suivant :
Sub macro()
Dim i As Long
Dim nomfichier As String
Application.ScreenUpdating = False
For i = 1000 To 9999
nomfichier = "M:\Blabla\000000" & i & ".csv"
Workbooks.OpenText Filename:=nomfichier, DataType:=1, Semicolon:=True, local:=True
Workbooks("Statistik.xls").Sheets("Tabelle1").Cells(i, 1).Value = Range("B6").Value
Workbooks("Statistik.xls").Sheets("Tabelle1").Cells(i, 2).Value = Range("C131").Value
Workbooks("Statistik.xls").Sheets("Tabelle1").Cells(i, 3).Value = Range("C133").Value
Workbooks("Statistik.xls").Sheets("Tabelle1").Cells(i, 4).Value = Range("C137").Value
Workbooks("Statistik.xls").Sheets("Tabelle1").Cells(i , 5).Value = Range("C141").Value
Workbooks("Statistik.xls").Sheets("Tabelle1").Cells(i , 6).Value = Range("C154").Value
Workbooks("Statistik.xls").Sheets("Tabelle1").Cells(i , 7).Value = Range("C156").Value
Workbooks("Statistik.xls").Sheets("Tabelle1").Cells(i , 8).Value = Range("C160").Value
Workbooks("Statistik.xls").Sheets("Tabelle1").Cells(i , 9).Value = Range("C164").Value
Workbooks("Statistik.xls").Sheets("Tabelle1").Cells(i , 10).Value = Range("C177").Value
Workbooks("Statistik.xls").Sheets("Tabelle1").Cells(i , 11).Value = Range("C179").Value
Workbooks("Statistik.xls").Sheets("Tabelle1").Cells(i , 12).Value = Range("C183").Value
Workbooks("Statistik.xls").Sheets("Tabelle1").Cells(i , 13).Value = Range("C187").Value
Workbooks("Statistik.xls").Sheets("Tabelle1").Cells(i , 14).Value = Range("C200").Value
Workbooks("Statistik.xls").Sheets("Tabelle1").Cells(i , 15).Value = Range("C202").Value
Workbooks("Statistik.xls").Sheets("Tabelle1").Cells(i , 16).Value = Range("C206").Value
Workbooks("Statistik.xls").Sheets("Tabelle1").Cells(i , 17).Value = Range("C210").Value
Workbooks("Statistik.xls").Sheets("Tabelle1").Cells(i , 18).Value = Range("C223").Value
Workbooks("Statistik.xls").Sheets("Tabelle1").Cells(i , 19).Value = Range("C225").Value
Workbooks("Statistik.xls").Sheets("Tabelle1").Cells(i , 20).Value = Range("C229").Value
Workbooks("Statistik.xls").Sheets("Tabelle1").Cells(i , 21).Value = Range("C233").Value
ActiveWorkbook.Saved = True
ActiveWorkbook.Close
Next i
Application.ScreenUpdating = False
End Sub
J'ai changé l'ouverture du fichier pour que ca soit automatiaque grâce à l'incrément. Seulement le problème c'est que si excel ne trouve pas le fichier (il en manque des fois) il s'arrête et j'aimerais bien qu'il continue.
Je vais voir avec ton code si je peux alléger le mien.
Merci !
- | Alerter
- | Alerter
Contenus similaires
- Copier coller macro excel - Forum
- Macro excel copier coller - Forum
- Macro copier coller feuille excel - Forum
- Macro copier coller excel - Forum
M'enfin Thore, ne serais-tu pas un peu voyeur ?
------
Dis-donc Acrun, spa parce que tu as amélioré ton code que tu dois ne pas lire ce que je te propose.
En cas de problème, Excel s'arrête. En fait, tu veux dire qu'il pose une question : débogage ou fin ?
C'est bien ça ?
Si oui, il faut gérer les erreurs. Regarde dans l'aide du côté de On Error....
Si tu as des questions, je reste dispo
------
Dis-donc Acrun, spa parce que tu as amélioré ton code que tu dois ne pas lire ce que je te propose.
En cas de problème, Excel s'arrête. En fait, tu veux dire qu'il pose une question : débogage ou fin ?
C'est bien ça ?
Si oui, il faut gérer les erreurs. Regarde dans l'aide du côté de On Error....
Si tu as des questions, je reste dispo
- | Alerter
- | Alerter
Salut,
Je suis désolé mais les informations ne peuvent pas être publiées ce sont des tests effectués, donc toujours les mêmes c'est pour ça que je suis obligé de faire une macro car il y a un trop grand nombre de CSV à traiter.
Excel s'arrête et me dit d'arrêter ou de débugger, je fais arrêter et il me met le numéro du fichier ex: 000004089.csv alors au niveau du "i" je change le 1000 par 4090 et je relance, donc à chaque fois qu'il trouve pas un fichier il me fait ça et je dois entrer manuellement la nouvelle valeur dans la macro.
Je suis désolé mais les informations ne peuvent pas être publiées ce sont des tests effectués, donc toujours les mêmes c'est pour ça que je suis obligé de faire une macro car il y a un trop grand nombre de CSV à traiter.
Dim cel_statistik As Range Dim addr As String Dim nomfichier As String Set cel_statistik = ws_statistik.Cells(119, 1) // Je comprends ce que fait cette ligne, ça prend le fichier Statistik.xls en mémoire ? For i = 1000 To 9999 nomfichier = "M:\Blabla\000000" & i & ".csv"* If Not nomfichier Then Exit Sub // C'est quoi l'intérêt de cette ligne ? Workbooks.OpenText Filename:=nomfichier, DataType:=1, Semicolon:=True, local:=True Set wb_csv = ActiveWorkbook //Même question que pour statistik For Each addr In ("B6", "C133", "C137", "C141", "C156", "C160", "C164", "C179", "C183", "C187", "C202", "C206", "C210", "C225", "C229", "C233" ) cel_statistik.Value = wb_csv.Worksheets(1).Range(addr).Value Set cel_statistik = cel_statistik.Offset(0, 1) //Là j'ai compris mais ça à l'air de bugger Next Set cel_statistik = cel_statistik.EntireRow.Cells(1,1).Offset(1, 0) wb_csv.Close SaveChanges=False
Excel s'arrête et me dit d'arrêter ou de débugger, je fais arrêter et il me met le numéro du fichier ex: 000004089.csv alors au niveau du "i" je change le 1000 par 4090 et je relance, donc à chaque fois qu'il trouve pas un fichier il me fait ça et je dois entrer manuellement la nouvelle valeur dans la macro.
- | Alerter
Salut,
En effet, je gère l'erreur (abandon par l'utilisateur)
Si tu n'as pas de GetOpenFilename, il va quand même falloir gérer les erreurs. Mais ça, je te l'ai déjà dit. Regarde donc On Error...
Une autre manière est de faire des vérifications. Par exemple, vérifier si le fichier existe.
La fonction FileExists() n'existe pas directement en VB. Mais si tu cherches bien tu devrais en trouver une - Google et Zeb sont tes amis
Eh, cette ligne est en relation avec le GetOpenFilename de mon exemple.
If Not nomfichier Then Exit Sub // C'est quoi l'intérêt de cette ligne ?
En effet, je gère l'erreur (abandon par l'utilisateur)
Si tu n'as pas de GetOpenFilename, il va quand même falloir gérer les erreurs. Mais ça, je te l'ai déjà dit. Regarde donc On Error...
Une autre manière est de faire des vérifications. Par exemple, vérifier si le fichier existe.
La fonction FileExists() n'existe pas directement en VB. Mais si tu cherches bien tu devrais en trouver une - Google et Zeb sont tes amis
- | Alerter
- | Alerter
Lassé par la pub ? Créez un compte