Copier/coller les valeurs d'1 fichier CSV vers un autre classeur
Sof2Lyon
Messages postés
26
Statut
Membre
-
f894009 Messages postés 17413 Statut Membre -
f894009 Messages postés 17413 Statut Membre -
Bonjour,
Je ne suis pas experte en macro VBA mais j'essaie de me débrouiller pour en faire un peu. Je suis curieuse de nature et aime chercher la solution à un problème.
Mais j'avoue ma défaite car je parcours depuis plusieurs jours les forums de différents sites et n'arrive pas à trouver LA solution à mon besoin.
Je récupère un fichier d'extraction "export.csv" avec des données séparées par des ";" mais certaines cellules contiennent des données avec retour chariot (info utile pour plus tard).
Je souhaite customiser ce fichier de façon à avoir une mise en forme un peu plus sympa que le format basique CSV et surtout des entêtes de colonnes plus parlants.
J'ai créé un autre classeur "custom.xlsm" dans lequel se trouve une feuille "custom" où la 1ère ligne est déjà remplie avec entêtes de colonnes au format définitif.
Mon objectif est de créer une macro via un bouton dans un menu pour :
1- copier les valeurs du fichier "export.csv" sauf la 1ère ligne
2- coller seulement les valeurs, en démarrant mon collage spécial à partir de la 2ème ligne de la feuille "custom" du classeur "custom.xlsm".
Via 2 macro séparées le résultat obtenu n'était pas celui souhaité.
J'ai donc tenté d'enregistrer ma macro mais ça ne semble pas marcher pour le format du collage. Je me retrouve avec les données insérées à partir de la 2ème ligne mais sur une seule colonne : certains champs contenant des retours chariot se retrouvent séparés sur plusieurs lignes ...
La solution de contournement est de faire moi-même le copier/coller du fichier CSV sur une feuille "export" dans le classeur "custom.xlsm" puis de lancer une macro pour copier/coller les valeurs vers la feuille "custom".
Cette macro marche mais ce n'est qu'une solution de contournement.
La voici.
Macro qui marche pour copier/coller au sein d'un même ficher :
Ci-dessous la macro enregistrée qui copie la feuille du fichier CSV pour les coller dans une nouvelle feuille du classeur "custom.xlsm" mais elle ne me colle pas les données sur toutes les colonnes :
Et enfin une autre macro enregistrée pour déplacer la feuille du fichier CSV avant la feuille "custom". Mais là encore le contenu réparti sur les différentes colonnes est perdu ... :-(
Si quelqu'un peut m'aider sur ce sujet, ce serait extra.
D'avance merci ! :-)
Je ne suis pas experte en macro VBA mais j'essaie de me débrouiller pour en faire un peu. Je suis curieuse de nature et aime chercher la solution à un problème.
Mais j'avoue ma défaite car je parcours depuis plusieurs jours les forums de différents sites et n'arrive pas à trouver LA solution à mon besoin.
Je récupère un fichier d'extraction "export.csv" avec des données séparées par des ";" mais certaines cellules contiennent des données avec retour chariot (info utile pour plus tard).
Je souhaite customiser ce fichier de façon à avoir une mise en forme un peu plus sympa que le format basique CSV et surtout des entêtes de colonnes plus parlants.
J'ai créé un autre classeur "custom.xlsm" dans lequel se trouve une feuille "custom" où la 1ère ligne est déjà remplie avec entêtes de colonnes au format définitif.
Mon objectif est de créer une macro via un bouton dans un menu pour :
1- copier les valeurs du fichier "export.csv" sauf la 1ère ligne
2- coller seulement les valeurs, en démarrant mon collage spécial à partir de la 2ème ligne de la feuille "custom" du classeur "custom.xlsm".
Via 2 macro séparées le résultat obtenu n'était pas celui souhaité.
J'ai donc tenté d'enregistrer ma macro mais ça ne semble pas marcher pour le format du collage. Je me retrouve avec les données insérées à partir de la 2ème ligne mais sur une seule colonne : certains champs contenant des retours chariot se retrouvent séparés sur plusieurs lignes ...
La solution de contournement est de faire moi-même le copier/coller du fichier CSV sur une feuille "export" dans le classeur "custom.xlsm" puis de lancer une macro pour copier/coller les valeurs vers la feuille "custom".
Cette macro marche mais ce n'est qu'une solution de contournement.
La voici.
Macro qui marche pour copier/coller au sein d'un même ficher :
Sub Custom()
Dim i As Long
Dim ref As String
Dim rng1 As Range
Dim f As Worksheet
Dim llnglignemax As Long
Set f = ActiveSheet
'détermine la dernière ligne de la feuille "export"
llnglignemax = Worksheets("export").Cells(Application.Rows.Count, 1).End(xlUp).Row
'efface le contenu de la feuille "Custom" sauf la 1ère ligne
Worksheets("Custom").Range("A2:AE10000").ClearContents
i = 2
'copie/colle la feuille "export" vers la feuille "Custom" en collage spécial des valeurs à partir de la 2ème ligne
Worksheets("export").Range("A" & 2 & ":AE" & llnglignemax).Copy
Worksheets("Custom").Range("A" & i).PasteSpecial xlPasteValues
'Ajouter une bordure aux cellules sélectionnées
'Worksheets("Custom").Selection.Borders.Value = 1
While f.Cells(i, 1) <> ""
i = i + 1
Wend
Set f = Nothing
End Sub
Ci-dessous la macro enregistrée qui copie la feuille du fichier CSV pour les coller dans une nouvelle feuille du classeur "custom.xlsm" mais elle ne me colle pas les données sur toutes les colonnes :
Sub Macro_enreg()
'
' Enregistrement_Macro
Workbooks.Open Filename:= _
"P:\export.csv"
Cells.Select
Selection.Copy
Windows("Custom.xlsm").Activate
Sheets("Custom").Select
Sheets.Add
Selection.Paste
End Sub
Et enfin une autre macro enregistrée pour déplacer la feuille du fichier CSV avant la feuille "custom". Mais là encore le contenu réparti sur les différentes colonnes est perdu ... :-(
Sub Move_Export()
'
' Déplacement_Export Macro
'
Workbooks.Open Filename:= _
"P:\POLE AQ PRODUIT\REVUE QUALITE PRODUIT\OUTILS de TRAVAIL\QMS - ENNOV\export.csv"
Sheets("export").Select
Sheets("export").Move Before:=Workbooks("Custom_extract_RQP_20170606_OK.xlsm" _
).Sheets(2)
End Sub
Si quelqu'un peut m'aider sur ce sujet, ce serait extra.
D'avance merci ! :-)
A voir également:
- Copier/coller les valeurs d'1 fichier CSV vers un autre classeur
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Retrouver un copier-coller android - Guide
4 réponses
Bonjour,
Comprends pas tout ce que vous voulez!!!!!
Mais pour: pour déplacer la feuille du fichier CSV
dans ce code il y a le choix du fichier. Regardez, adaptez et dites nous si ok ou modif a faire
Comprends pas tout ce que vous voulez!!!!!
Mais pour: pour déplacer la feuille du fichier CSV
dans ce code il y a le choix du fichier. Regardez, adaptez et dites nous si ok ou modif a faire
Sub test()
'on recherche le fichier texte
Fichier = Application.GetOpenFilename("Text Files (*.csv), *.csv")
If Fichier <> False Then
With Worksheets("feuil1")
derlig = .Range("A" & Rows.Count).End(xlUp).Row
.Rows("2:" & derlig).Clear
.QueryTables.Add("TEXT;" & Fichier, [A2]).Refresh 'à adapter le cellule de reception
.Rows(2).Delete
derlig = .Range("A" & Rows.Count).End(xlUp).Row
.Range("A2:A" & derlig).TextToColumns Destination:=Range("A2"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=True, Comma:=False, Space:=False, Other:=False
End With
End If
End Sub
Le voici ... dans une forme un peu épurée (j'ai laissé des champs avec des données avec retour chariot.
https://www.cjoint.com/c/GFiovaWNgtM
Et en bonus mon fichier Excel de destination pour voir l'onglet avec les entêtes à conserver :
https://www.cjoint.com/c/GFioHJALBHM
Vos codes sont dans le Module 2.
Les miens sont dans le Module 1 (je ne les ai pas retouchés après nos échanges).
"Sub CustomRQP" est la macro qui marchait comme souhaité mais qui m'obligeait à copier/coller moi-même dans une feuille export (du fichier de destination)
Je ne l'ai pas dit mais pourtant je le pense, un grand merci pour votre aide !
J'avais espoir d'y arriver seule mais avais franchement des doutes ... et grâce à votre aide je me sens remotivée. ;-)
https://www.cjoint.com/c/GFiovaWNgtM
Et en bonus mon fichier Excel de destination pour voir l'onglet avec les entêtes à conserver :
https://www.cjoint.com/c/GFioHJALBHM
Vos codes sont dans le Module 2.
Les miens sont dans le Module 1 (je ne les ai pas retouchés après nos échanges).
"Sub CustomRQP" est la macro qui marchait comme souhaité mais qui m'obligeait à copier/coller moi-même dans une feuille export (du fichier de destination)
Je ne l'ai pas dit mais pourtant je le pense, un grand merci pour votre aide !
J'avais espoir d'y arriver seule mais avais franchement des doutes ... et grâce à votre aide je me sens remotivée. ;-)
Re,
En epurant, vou n'auriez pas semer la zizanie, il y a une chiee de lignes vide entre deux zones avec des donnees?
Le fichier complet, pas possible ????????????????????????
En epurant, vou n'auriez pas semer la zizanie, il y a une chiee de lignes vide entre deux zones avec des donnees?
Le fichier complet, pas possible ????????????????????????
J'adapte et teste de suite et reviens vers vous pour donner le résultat.
Mais je n'étais pas sûre à 100% de l'adaptation à faire et cela doit être l’origine de mon message d'erreur.
Sur la ligne With Worksheets("export"), j'obtiens ce message : "Erreur d'exécution '9': L'indice n'appartient pas à la sélection."
Ci-dessous votre code adapté à ma façon :
Sub a_tester() 'on recherche le fichier texte Fichier = Application.GetOpenFilename("Text Files (*.csv), *.csv") If Fichier <> False Then With Worksheets("export") derlig = .Range("A" & Rows.Count).End(xlUp).Row .Rows("2:" & derlig).Clear .QueryTables.Add("export" & custom.xlsm, [A2]).Refresh 'à adapter le cellule de reception .Rows(2).Delete derlig = .Range("A" & Rows.Count).End(xlUp).Row .Range("A2:A" & derlig).TextToColumns Destination:=Range("A2"), DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _ Semicolon:=True, Comma:=False, Space:=False, Other:=False End With End If End SubPour essayer d'être plus claire, mon objectif est le suivant : récupérer les données du fichier "export.csv" dans la feuille "custom" d'un autre classeur "custom.xlsm" MAIS en ne collant qu'à partir de la 2ème ligne et seulement les valeurs.
Merci d'avance pour votre aide.
Et pourquoi pas recuperer les donnees directement du fichier csv au lieu de passer par une feuille excel? Le code fournit fait cela tres bien
Désolée j'ai dû mal m'exprimer.
Mon objectif est bien d'avoir sur la feuille de destination "Custom" (de mon classeur final "Custom") les données (uniquement les valeurs) du fichier source "export.csv" mais sans la 1ère ligne puisque dans ma feuille "Custom" cette 1ère ligne est déjà remplie avec texte et format définitifs.
Dans l'idéal j'aurais voulu faire ce que vous décrivez mais n'y arrivais pas.
Le chemin pour y arriver m'importe peu, seul le résultat compte à mes yeux, pourvu qu'il soit utilisable via un seul clic sur un bouton de macro.
Si vous avez possibilité de m'aider à adapter votre code, cela devrait être parfait. :-)
Ok, ce code sera a mettre dans votre fichier custom.xlsm. Vous y etiez presque.
Le fichier csv a toujours le meme nom et chemin ou vous voulez choisir?