Copier/coller les valeurs d'1 fichier CSV vers un autre classeur

Sof2Lyon Messages postés 25 Date d'inscription   Statut Membre Dernière intervention   -  
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   -
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 :

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:

4 réponses

f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
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

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
1
Sof2Lyon Messages postés 25 Date d'inscription   Statut Membre Dernière intervention  
 
Merci beaucoup pour la réponse.
J'adapte et teste de suite et reviens vers vous pour donner le résultat.
0
Sof2Lyon Messages postés 25 Date d'inscription   Statut Membre Dernière intervention  
 
Résultat du test : cela ne fonctionne pas.
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 Sub


Pour 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.
0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713 > Sof2Lyon Messages postés 25 Date d'inscription   Statut Membre Dernière intervention  
 
Re,
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
0
Sof2Lyon Messages postés 25 Date d'inscription   Statut Membre Dernière intervention   > f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention  
 
Re,

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. :-)
0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713 > Sof2Lyon Messages postés 25 Date d'inscription   Statut Membre Dernière intervention  
 
Re,
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?
0
Sof2Lyon Messages postés 25 Date d'inscription   Statut Membre Dernière intervention  
 
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. ;-)
0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Re,

Je recupere tout ca et vous tiens au courant
A+
0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
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 ????????????????????????
0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Re,
J'ai une solution à l'ancienne, mais j'attends demain si j'ai le fichier csv complet je pourrais confirmer
0
Sof2Lyon Messages postés 25 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour,
Désolée je n'ai pas pu vous répondre hier.
Voici le fichier complet.
http://www.cjoint.com/c/GFjgR26k8YM
Merci d'avance pour votre aide.
0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713 > Sof2Lyon Messages postés 25 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour,

Désolée je n'ai pas pu vous répondre hier
Y a pas d'lezard, mais le format du fichier n'est pas du tout celui d'hier et par contre correspond au code que je vous ai donnes.
Je regarde la chose. Changez pas de format suivant votre humeur.......Hien!!!!!
0
Sof2Lyon Messages postés 25 Date d'inscription   Statut Membre Dernière intervention   > f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention  
 
Merci beaucoup !
0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713 > Sof2Lyon Messages postés 25 Date d'inscription   Statut Membre Dernière intervention  
 
Re,

Va pas etre simple a decouper ce format, mais je cherche

Je pense avoir trouver

Ad t'alheur
0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Bonjour,

J'ai reussi a lire et decouper votre fichier CSV par enregistrement, pour le moment brut de decoffrage.
https://mon-partage.fr/f/o4oejqTS/

Vous verrez les enregistrements en rouge ne sont pas normaux, probleme a la creation ou/et anomalie d'encodage sur le fichier source

A+
0