IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Copier-coller entre fichier CSV et XLS


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2007
    Messages : 93
    Points : 73
    Points
    73
    Par défaut Copier-coller entre fichier CSV et XLS
    Bonjour, Bien mon premier message sur votre forum, j'espere le mesage est convenablement ecrit.

    Voila le topo:

    Je dois recuperer des informations dans plusieurs fichiers CSV qui se situent dans un meme repertoire. Pour recuperer les information la macro ouvre chaque fichier et copy toutes les cellules dans une feuille "TEMP" de mon fichier excel. Ensuite elle ferme le fichier CSV et elle travaile avec la feuille TEMP pour compiler mes donnees dans d'autres feuilles.

    Grosso modo ca donne comme pseudo code:
    - ouvrir le fichier CSV
    - selectionner toutes les cellules et copier
    - activer la feuille Temp de mon fichier Excel
    - selectionner toutes les cellules et coller
    - fermer le fichier CSV

    recommencer pour tous les fichiers CSV.

    mon probleme est que cela fonctionne pour 5 ou six fichiers puis apres j'ai bien ma selection sur mon fichier CSV mais mon collage dans ma feuille"Temp" ne marche plus.

    Je ne comprend pas pourquoi d'un seul coup la fonction paste me fait defaut.

    Merci pour votre aide


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Sub CopierFichier(path As String, nomFichier As String)
     
    Workbooks.Open Filename:=path
    Cells.Select
    Selection.Copy
    ThisWorkbook.Sheets("temp").Activate
    Cells.Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Workbooks(nomFichier).Close SaveChanges:=False
     
    Range("A1").Select
    End Sub

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Bonjour cousin, bienvenue sur le forum,
    Le systère a besoin de temps pour Ouverture/fermeture de fichier et copier/coller. Pour ça, tu as la fonction DoEvents (l'aide en ligne t'en dira plus que moi)
    Ensuite, n'utilise pas une propriété comme nom de variable (Path est une propriété VBA ou Office) Remplacé ici par "Chemin".
    Enfin, les selects que tu as mis ne sont pas indispensables et allourdissent le code pour rien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub CopierFichier(Chemin, nomFichier, LaFeuille)
    application.screenUpdating = false
        Workbooks.Open Filename:=Chemin & nomFichier
        DoEvents
        Cells.Copy Destination:=ThisWorkbook.Sheets(LaFeuille).Cells
        DoEvents
        Workbooks(nomFichier).Close False
        DoEvents
    application.screenUpdating = true
    End Sub
    Teste ça et dis-nous
    A+

    NB - Donne un nom à "LaFeuille"

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2007
    Messages : 93
    Points : 73
    Points
    73
    Par défaut
    Merci ouskel'n'or pour ta reponse.

    J'ai essaye ton code mais j'ai toujours le meme probleme.
    Arrive au cinquieme fichier ca ne copie plus.

    Cependant je me pose des questions.

    Pourquoi dans ton code tu passes la feuille cible LaFeuille en parametre (d'ailleurs est ce que c'est le nom(string) ou bien la feuille au complet)?

    CopierFichier(Chemin, nomFichier, LaFeuille)
    Est ce que ca serait plus simple de ramerner les donnees dans la feuille "temp" en transformant le fichier CSV en fichier TXT comme je l'ai vu dans un tutoriel du site?
    Je vais essayer ca meme si je ne vois pas vraiment de difference que cela pourra faire.



    PS: Desole de te decevoir ouskel'n'or mais je ne suis pas un cousin. Si on reste dans la lignee familliale, je suis plutot un frangin qui a tape l'incruste chez les cousins.

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Citation Envoyé par da991319
    Pourquoi dans ton code tu passes la feuille cible LaFeuille en parametre (d'ailleurs est ce que c'est le nom(string) ou bien la feuille au complet)?
    Parce que j'ai pensé que tu copiais chaque csv sur une feuille différente. En relisant je vois bien "que je m'ai trompé"
    Si tu copies tous tes fichiers sur la même feuille, tu as dû adapter.

    Citation Envoyé par da
    Est ce que ca serait plus simple de ramerner les donnees dans la feuille "temp" en transformant le fichier CSV en fichier TXT comme je l'ai vu dans un tutoriel du site?
    Si tu parles de cette discussion, c'est effectivement l'une des solutions que je conseille en cas de difficultés d'ouverture.
    As-tu biens mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.screenUpdating = false
    en début de code pour le repasser à True à la fin ?

    Desole de te decevoir ouskel'n'or mais je ne suis pas un cousin. Si on reste dans la lignee familliale, je suis plutot un frangin qui a tape l'incruste chez les cousins.
    Alors tu as dois connaître mon fils... Il en revient... tu ne l'as pas vu ?

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2007
    Messages : 93
    Points : 73
    Points
    73
    Par défaut
    J'ai essaye en utilisant la methode que tu preconisais en changeant le nom du fichier CSv en TXT. mais je me retrouve avec le meme probleme. Au bout du cinquieme fichier la copie sur ma feuille temp ne marche pas.

    As-tu biens mis

    Code :
    Application.screenUpdating = falseen début de code pour le repasser à True à la fin ?
    Oui je l'ai bien mis et ca ne change rien.

    Je vais essayer de passer par un textstream. Ca va m'obliger a traiter chaque ligne de mon fichier individuellement et je vais etre oblige de changer tout le code d'aquisition des donnees mais je ne vois pas comment je pourrais faire autrement. Ca m'intrigue quand meme que ma copie stoppe comme ca sans raison apparente.

    Je reposterai si j'ai reussi avec le textstream. Si jamais tu as d'autres idees a essayer pour m'eviter de tout retaper, je suis preneur.

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Une question : Au total, avec quatre fichiers, tu ne dépasses pas 65535 lignes ?

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2007
    Messages : 93
    Points : 73
    Points
    73
    Par défaut
    Une question : Au total, avec quatre fichiers, tu ne dépasses pas 65535 lignes ?
    Non je ne depasse pas le max de lignes de ma feuille "temp".

    En fait une fois la copie effectuee, la macro traite les donnees(qui correspond a copier certaines valeurs de "temp" dans d'autres feuilles du meme workbook) puis la macro efface les valeurs de "temp" puis va chercher un autre fichier qu'elle va copier dans "temp" et ainsi va la vie....jusqu'au 5eme fichier.

    Ce qui est bizarre c'est que si j'y vais en mode debug pas a pas et qu'apres avoir realise que le coller ne fonctionne pas dans "temp", si je fais coller dans la feuille "temp" manuellement (edit-> coller) ca copie sans probleme. donc ca voudrait dire que le copier marche mais pas le coller.

    Vraiment bizarre.

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Tu as essayé mon code sans sélection ?

    Un autre idée, déplacer les feuilles de chaque csv dans ton classeur principal puis traiter les données feuille par feuille ?

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2007
    Messages : 93
    Points : 73
    Points
    73
    Par défaut
    Tu as essayé mon code sans sélection ?
    Oui dans ton code il n'y a pas de selection je les avais enleve comme tu me l'avais dit dans ton premier message.

    Un autre idée, déplacer les feuilles de chaque csv dans ton classeur principal puis traiter les données feuille par feuille ?
    comment puis je deplacer une feuille d'un fichier CSV vers un fichier xls.
    Si je comprend bien tu voudrais que je prenne la feuil1 du fichier monfichier.csv et que je l'ammene dans mesfichiers.xls. C'est pas un copier coller ca. Desole je ne vois ppas trop ce que tu veux dire. Quelle fonction je peux utiliser pour deplacer les feuilles d'un classeur a un autre?

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2007
    Messages : 93
    Points : 73
    Points
    73
    Par défaut
    Resalut,

    Je suis finalement passe par la fonction openastextstream. j'ai du me casser un peu plus la tete pour reecrire comment recuperer mes donnees mais bon jusqu'a present ca a l'air de fonctionner.
    Je vais continuer mes tests.

    Je ne sais tjrs pas pourquoi ca a plante mais bon c'est pas grave.

    merci pour ton temps

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Boucle copier coller entre 2 fichiers pour chaque ligne
    Par cheerleaders dans le forum Excel
    Réponses: 3
    Dernier message: 19/05/2015, 18h09
  2. Copier / Coller entre 2 fichiers excel
    Par roberto75 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 21/03/2011, 12h25
  3. Copier coller entre deux fichiers excel par macro
    Par miss-o-21 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 26/11/2009, 14h45
  4. VBA-E: Pb copier-coller entre Excel et .csv
    Par tiger118 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 14/06/2006, 11h08
  5. Enregistrer un fichier ".CSV" en ".XLS"
    Par Isa31 dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 13/03/2006, 14h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo