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 :

Opérations sur fichiers multiples .csv [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Février 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2014
    Messages : 21
    Par défaut Opérations sur fichiers multiples .csv
    Bonjour,

    Je vais essayer d'être clair dans ma demande :
    J'ai sur un répertoire plus de 200 fichiers .csv. Ces fichiers sont tous constitués de la même façon :
    - La première ligne constituée d'infos sur le fichier
    - La deuxième ligne les entêtes de colonnes (12 colonnes utilisées)
    - les lignes suivantes sont constituées des données (le nombre de lignes varie entre 2 et 1000)

    Mon besoin sur chaque fichier :
    1 - Recopier la valeur de la cellule F1 en fin de toutes les lignes constituées des données (dans la colonne M)
    2 - ensuite supprimer la ligne 1 (infos sur le fichier)

    Une fois cela fait sur chaque fichier, il faut que tous ces fichiers se transforme en 1 seul (avec une seule ligne d'entêtes bien sûr ! lol)

    Voilà... jz sais j'en demande beaucoup mais j'y pige queudale et ça fait 3 jours que je cherche mais bon quand on est nul on est nul!!!

    En PJ je vous mets un des fichiers mais en format xls car le csv est pas toléré en PJ
    Fichiers attachés Fichiers attachés

  2. #2
    Membre émérite
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Par défaut
    Bonjour CyberLudo,
    Voici quelques liens qui pourront te servir
    http://www.developpez.net/forums/d21...r-excel-macro/
    Remplace .xls par .csv

    Sinon ceci que je considère comme une référence
    http://silkyroad.developpez.com/

    Bonne lecture, bon courage et bon apprentissage, si tu as des questions n’hésites pas à revenir par ici
    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Février 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2014
    Messages : 21
    Par défaut merci pour les liens
    Je bidouille mais pour l'instant j'arrive juste à "compiler" des fichier en un seul mais pas à faire la copie de valeur sur chaque ligne de fichier...

  4. #4
    Membre émérite
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Par défaut
    Salut Ludo,
    Tu as peut-être trouvé une solution par toi-même, sinon voici ce que j'ai fais et testé.
    Il faut que tu crée un sous-dossier contenant tes fichier Csv dans le dossier où tu enregistrera le fichier joint qui contient la macro et que tu nommes ce sous-dossier "Fichier Csv" (Tu peut lui donner un autre nom mais il faut aussi renommer la ligne qui suit dans le code)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CheminSrc = CheminDest & "\" & "Fichier Csv"
    Voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    Sub Synthese()
    Dim Recap As Worksheet 'Défini la feuille où les données seront copiées
    Dim ShCsv As Worksheet 'Défini la feuille du fichier Csv à copier
    Dim Orig As Range
    Dim Dest As Range
    Dim NbLigne1 As Integer
    Dim NbLigne2 As Integer
    Dim i As Integer
    Dim CheminDest As String
    Dim CheminSrc As String
    Dim Fichier As String
    Dim SF As Object 'déclare la variable SF (Système de Fichiers)
    Dim D As Object 'déclare la variable D (Dossier)
    Dim EF As Object 'déclare la variable EF (Ensemble de Fichiers)
    Dim F As Object 'déclare la variable F (Fichier)
    Set Recap = ThisWorkbook.Sheets("RECAP") 'Défini la feuille où coller les données
    Set Dest = Recap.Range("A2") 'Défini la cellule où coller les données
    Application.DisplayAlerts = False 'désactive les fenetres de demande de confirmation avant suppression
     
     
    CheminDest = ThisWorkbook.Path ' Chemin de ce fichier - celui qui contient la Macro-
    CheminSrc = CheminDest & "\" & "Fichier Csv" 'Chemin du dossier qui contient les fichier Csv (J'ai mis mes fichiers test dans un sous-dossier nommé "Fichier Csv" qui est lui même dans le dossier qui contient mon fichier avec ma macro. Clair??? ;-0 )
     
    Set SF = CreateObject("Scripting.FileSystemObject") 'définit le système de fichier SF
    Set D = SF.GetFolder(CheminSrc) 'définit le dossiers D
    Set EF = D.Files 'définit l'ensembles des fichiers EF du dossier D
     
    For Each F In EF 'boucle sour tous les fichiers F de l'ensemble de ficiers EF
     
         Workbooks.Open F 'On ouvre le fichier
         Set ShCsv = Sheets(1) 'On Défini la feuille Source
     
         With ShCsv
            NbLigne1 = .Cells(.Rows.Count, 1).End(xlUp).Row ' Compte le nombre de ligne de la feuille source
         End With
     
         For i = 3 To NbLigne1 ' On boucle sur toutes les lignes
            Range("M" & i) = Range("F1") 'On colle la valeur de la Cellule "F1" en colonne M
         Next i
     
         With Recap
            NbLigne2 = .Cells(.Rows.Count, 1).End(xlUp).Row ' Compte le nombre de ligne de la feuille source
         End With
     
         Range("A3", "M" & NbLigne1).Copy 'On copie les données de la feuille
     
         Dest.Offset(NbLigne2 - 1, 0).PasteSpecial 'On colle les données
     
         ActiveWorkbook.Close True 'ferme et enregistre le classeur F
     
    Next F 'prochain fichier de la boucle
     
     
     
     
    End Sub
    Dis moi si ça te vas
    Fichier Recap.xlsm
    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  5. #5
    Membre émérite
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Par défaut
    Rebonjour,
    J'avais oublié un détail
    La suppression de la première ligne de chaque fichier CSV
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Rows("1:1").Delete Shift:=xlUp ' On supprime la premiere ligne
    J'ai egalement ajouté ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ScreenUpdating = False
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ScreenUpdating = True
    ces deux lignes, placées en début et en fin de code empêchent le "rafraîchissement" de l'écran ce qui fait que tu ne verras plus les fichiers CSV s'ouvrir, copier les données etc... tu resteras sur la feuille que tu vois quand tu lances la macro.

    Voici donc le code modifié et le fichier joint

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    Sub Synthese()
    Dim Recap As Worksheet 'Défini la feuille où les données seront copiées
    Dim ShCsv As Worksheet 'Défini la feuille du fichier Csv à copier
    Dim Dest As Range
    Dim NbLigne1 As Integer
    Dim NbLigne2 As Integer
    Dim i As Integer
    Dim CheminDest As String
    Dim CheminSrc As String
    Dim Fichier As String
    Dim SF As Object 'déclare la variable SF (Système de Fichiers)
    Dim D As Object 'déclare la variable D (Dossier)
    Dim EF As Object 'déclare la variable EF (Ensemble de Fichiers)
    Dim F As Object 'déclare la variable F (Fichier)
    Set Recap = ThisWorkbook.Sheets("RECAP") 'Défini la feuille où coller les données
    Set Dest = Recap.Range("A2") 'Défini la cellule où coller les données
    Application.DisplayAlerts = False 'désactive les fenetres de demande de confirmation avant suppression
    Application.ScreenUpdating = False
     
     
    CheminDest = ThisWorkbook.Path ' Chemin de ce fichier - celui qui contient la Macro-
    CheminSrc = CheminDest & "\" & "Fichier Csv" 'Cemin du dossier qui contient les fichier Csv (J'ai mis mes fichiers test dans un sous-dossier nommé "Fichier Csv" qui est lui même dans le dossier qui contient mon fichier avec ma macro. Clair??? ;-0 )
     
    Set SF = CreateObject("Scripting.FileSystemObject") 'définit le système de fichier SF
    Set D = SF.GetFolder(CheminSrc) 'définit le dossiers D
    Set EF = D.Files 'définit l'ensembles des fichiers EF du dossier D
     
    For Each F In EF 'boucle sour tous les fichiers F de l'ensemble de ficiers EF
     
         Workbooks.Open F 'On ouvre le fichier
         Set ShCsv = Sheets(1) 'On Défini la feuille Source
     
         With ShCsv
            NbLigne1 = .Cells(.Rows.Count, 1).End(xlUp).Row ' Compte le nombre de ligne de la feuille source
         End With
     
         For i = 3 To NbLigne1 ' On boucle sur toutes les lignes
            Range("M" & i) = Range("F1") 'On colle la valeur de la Cellule "F1" en colonne M
         Next i
     
         Rows("1:1").Delete Shift:=xlUp ' On supprime la premiere ligne
     
         With Recap
            NbLigne2 = .Cells(.Rows.Count, 1).End(xlUp).Row ' Compte le nombre de ligne de la feuille source
         End With
     
         Range("A2", "M" & NbLigne1).Copy 'On copie les données de la feuille
     
         Dest.Offset(NbLigne2 - 1, 0).PasteSpecial 'On colle les données
     
         ActiveWorkbook.Close True 'ferme et enregistre le classeur F
     
    Next F 'prochain fichier de la boucle
     
     
    Application.ScreenUpdating = True
     
    End Sub
    Fichier Recap.xlsm


    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    Bonjour
    si j'ai bien compris o
    uvrir 200csv pour prendre la f1 et la metrre en "m" sur la derniere ligne vide dispo si j'ai bien compris puis compiler dans un seul classeur
    garder la ligne 1(titre/entete de colonne ) bien entendu une seul fois

    et bien moi j'utiliserait pas excel
    tout du moins je me servirait de
    1 open for output as#X (en texte)
    2 récupère le split (delà ligne 1 sur le 6 eme ";"
    3 ajouterait ";;;;;" et ce que j'ai prélevé en 1 ere ligne a la fin
    4 puis avec open mais cette fois ci en append(met ajour le fichier ne le réécrit pas ) mettre cela dans un nouveau fichier .csv

    a la fin ouverture du fichier compilé
    et voila
    je suis certain que c'est plus rapide
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  7. #7
    Membre émérite
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Par défaut
    Salut Patrick,
    J'ai séparé le code pour en faire des cellules car je pense que c'est ce que l'initiateur du post souhaitait
    Citation Envoyé par CyberLudo Voir le message
    Bonjour,

    Je vais essayer d'être clair dans ma demande :
    J'ai sur un répertoire plus de 200 fichiers .csv. Ces fichiers sont tous constitués de la même façon :
    - La première ligne constituée d'infos sur le fichier
    - La deuxième ligne les entêtes de colonnes (12 colonnes utilisées)
    - les lignes suivantes sont constituées des données (le nombre de lignes varie entre 2 et 1000)
    Sinon, si j'ai bien compris ton code c'est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    laChaine = Input(LOF(x), #x)
    qui récupère toute les données du fichier en une seule fois, c'est bien ça?

    Si oui, est-ce que l'on peut également utiliser cette méthode pour un fichier .xls au lieu de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Range("A3", "M" & NbLigne1).Copy 'On copie les données de la feuille
    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    oui mais pour faire un copy il faut ouvrir le csv en excel
    moi non je l'ouvre pas je le met en mémoire et pour chaine c'est ca !!!
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

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

Discussions similaires

  1. [VBA-E] Opération sur fichiers xls dans un même répertoir
    Par anisr dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 20/03/2007, 11h58
  2. [VBA-E] Encore opération sur fichier txt
    Par anisr dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 10/03/2007, 12h43
  3. [VBA-E] Parcourir un repertoir et opérations sur fichiers xls
    Par anisr dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 08/03/2007, 16h48
  4. opérations sur fichier
    Par mmx dans le forum C
    Réponses: 8
    Dernier message: 07/01/2006, 14h13

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