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 :

Concaténation de fichiers csv pour opérations


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Avril 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2018
    Messages : 12
    Par défaut Concaténation de fichiers csv pour opérations
    Bonjour à tous !
    Je dois faire un petit outils au boulot qui va manipuler pas mal de données. Je préfère utiliser R habituellement mais mes collaborateurs préfèrent que j'utilise vba car ils ont peur de se trouver dans la panade quand je partirais, ce que je peux comprendre

    Le problème auquel je m'oppose est le suivant:
    Pour l'outils J'aurais un certain nombre de fichiers csv (5 à 30), dans un même dossier et tous organisé de la même façon,
    - Colonne "Date de la mesure"
    - Colonne "Heure de la mesure"
    - Colonne "Valeur"
    Il y a d'autre truc mais je n'en ai pas besoin

    Ce que j'aimerais c'est récupérer les trois colonnes du premier fichier pour le mettre dans un onglet "TOP 10" de mon outil, mettre en colonne 4 la colonne "Valeur" du fichier 2, en colonne 5 la colonne "Valeur" du fichier 3, et etc...

    J'ai essayé des choses avec une fonction que j'ai trouvée sur le net
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Function SelectionRep() As String
    Const ssfTous = &H1
    Dim objShell As Object, objFolder As Object, oFolderItem As Object
        Set objShell = CreateObject("Shell.Application")
        Set objFolder = objShell.BrowseForFolder(&H0&, "Choisir un répertoire", ssfTous)
        If objFolder Is Nothing Then Exit Function
        Set oFolderItem = objFolder.Items.Item
        SelectionRep = oFolderItem.Path
        Set objShell = Nothing
        Set objFolder = Nothing
        Set oFolderItem = Nothing
    End Function
    Je balai ensuite l'ensemble du dossier pour extraire les données de mes fichiers

    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
     
    Option Explicit
    Dim Lig As Long
    Dim Chemin As String
     
    Sub ExtractionCSV()
    Dim Fichier
        Lig = 2
        Chemin = SelectionRep() & "\"
        Fichier = Dir(Chemin)
        Do While Fichier <> ""
            Lig = Lig + 1
            CopierData Fichier
            Fichier = Dir
        Loop
        Sheets(2).Cells.ClearContents
        Sheets(1).Select
    End Sub
    J'ai ensuite essayer de prendre un bout de code que je n'ai pas fait et que je n'arrive pas à adapter à mon cas.

    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
     
    Sub CopierData(Fichier)
        With Sheets(1)
            .Cells.ClearContents
            With .QueryTables.Add(Connection:="TEXT;" & Chemin & Fichier, Destination _
                :=.Range("A1"))
                .Name = Fichier
                .FieldNames = True
                .RowNumbers = False
                .FillAdjacentFormulas = False
                .PreserveFormatting = True
                .RefreshOnFileOpen = False
                .RefreshStyle = xlInsertDeleteCells
                .SavePassword = False
                .SaveData = True
                .AdjustColumnWidth = True
                .RefreshPeriod = 0
                .TextFilePromptOnRefresh = False
                .TextFilePlatform = 1252
                .TextFileStartRow = 1
                .TextFileParseType = xlDelimited
                .TextFileTextQualifier = xlTextQualifierDoubleQuote
                .TextFileConsecutiveDelimiter = False
                .TextFileTabDelimiter = True
                .TextFileSemicolonDelimiter = False
                .TextFileCommaDelimiter = False
                .TextFileSpaceDelimiter = False
                .TextFileOtherDelimiter = """"
                .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
                .TextFileTrailingMinusNumbers = True
                .Refresh BackgroundQuery:=False
            End With
            .Range("L1:L6").Copy
            Sheets("TOP10").Cells(Lig, 2).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
            False, Transpose:=True
        End With
     
    End Sub
    Ca n'extrait que le premier fichier csv et en plus j'ai l'ensemble du fichier sur une seule et même colonne !

    Tout élément de réponse à mon problème serait d'une aide précieuse

    En espérant avoir été clair et en attendant de vous lire,

    Je vous souhaites une agréable fin de semaine

  2. #2
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Je dis pas que ce que tu as fais n'est pas bien seulment vu que c'est pour des utilisateur finaux autre que toi je te conseille d'utiliser les FilesDialog pour une meilleur IHM voici 2 exemples

    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 Trav_FileDialog()
     
        Dim Wrbk As Workbook
        Dim Chem_Select As String
        Dim Wsh As Worksheet
     
    'ouverture d'un fichier par boite FileDialog
    '**********************************************************
        'Declaration d'une variable comme objet FileDialog
        Dim fd As FileDialog
     
        'Creation d'un objet FileDialog comme un File Open dialog box.
        Set fd = Application.FileDialog(msoFileDialogOpen)
     
        'Déclaration d'une variable contenant le "path" de style variant
        Dim vrtSelectedItem As Variant 'obligatoirement de type variant
     
        With fd
            .AllowMultiSelect = True
            .InitialFileName = "D:\Travaux_en_cours"
     
            If .Show = -1 Then
                 .Execute
            Else
                Exit Sub
            End If
        End With
     
    '----------------------------------------------
    'Sélection d'un dossier par boite FileDialog
    '**********************************************************
        'Declaration d'une variable comme objet FileDialog
        'Dim fd As FileDialog (déja déclarée)
     
        'Creation d'un objet FileDialog comme un selectionneur dossier dialog box.
        Set fd = Application.FileDialog(msoFileDialogFolderPicker)
     
        'Déclaration d'une variable contenant le "path" de style variant
        'Dim vrtSelectedItem As Variant 'obligatoirement de type variant (déja déclarée)
     
        With fd
            .InitialFileName = "D:\Travaux Cyrille"
     
            If .Show = -1 Then
                'Step through each string in the FileDialogSelectedItems collection.
     
                vrtSelectedItem = Application.FileDialog(msoFileDialogFolderPicker).InitialFileName
     
                    'vrtSelectedItem est un String contenant (dans ce cas) le nom du dossier selectionné.
                    'affichage du Dossier selectionné dans une boite message
                    MsgBox "Vous avez sélectionné : " & vrtSelectedItem
                    Chem_Select = vrtSelectedItem & "\"
     
            Else
                Exit Sub
            End If
        End With
    End Sub
    j'ais besoin de plus d'info

    tout d'abord comment s'appelle tes fichiers.csv et comment sais-tu dans l'ordre où ils doivent être pris

  3. #3
    Membre averti
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Avril 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2018
    Messages : 12
    Par défaut
    Bonjour Igloobel,
    Merci pour ta réponse et merci beaucoup pour ton conseil d'amélioration de l'IHM, c'est très clair.

    Enfaite voici un nom de fichier csv que j'ai "Enedis_M021_CDC_A046XCJR_30002520059703" avec le numéro de fin correspondant au site/client.

    J'aimerais que la macro aille chercher le contenu de ce fichier (Les 3 premières colonnes : Date, Heure, Puissance) puis la 3ème colonne (Puissance) de tous les autres fichiers sélectionnés.
    L'ordre dans lequel les fichiers sont pris ne sont pas important tant que le nom du fichier (dans le quel est le nom du client) se retrouve en haut de la colonne "Puissance".

    Cela correspond à la première étape celle de la centralisation des informations.
    L'objectif final est de pouvoir faire des opérations avec l'ensemble des colonnes puissances (Somme, Ratios,...), et de tracer des courbes.

    Quels autres informations aurais-tu besoin ?

    Merci d'avance
    Bonne journée

  4. #4
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    tu as dis
    Pour l'outils J'aurais un certain nombre de fichiers csv (5 à 30), dans un même dossier et tous organisé de la même façon,
    Ok dans le même dossier

    mais tu n'as pas répondu totalement à ma question :

    tout d'abord comment s'appelle tes fichiers.csv ...
    ok tu m'as donné un exemple



    ... et comment sais-tu dans l'ordre où ils doivent être pris
    Parcontre là j'ai rien

  5. #5
    Membre averti
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Avril 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2018
    Messages : 12
    Par défaut
    Je pensais avoir répondu en disant ça :

    L'ordre dans lequel les fichiers sont pris ne sont pas important tant que le nom du fichier (dans le quel est le nom du client) se retrouve en haut de la colonne "Puissance".
    Si il faut absolument un ordre on peut mettre par ordre alphabétique.

  6. #6
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Désolé j'avais pas vu ... il va falloir que je change de lunette

    ton problème viens de ton : Sub CopierData(Fichier)




    Pourquoi tu passe par un querytables alors que tu as a ta dispositions les valeurs des cellules de ton CSV ?

    moi j'ouvrirai le CSV
    Je copierai les données nécessaire avec l'objet Cells

    synthaxe : Cells(N°ligne, N°colonne)

    et avec une variable long (comme par exemple Num_Col) je passerai d'une colonne à la suivante en incrémentant ma variable

    c'est à mon avis plus simple surtout vu que tu copies que 3 valeurs

    tu essayes de le faire et puis tu nous montres ton code et on verra ensemble comment on peut le rendre parfait (stable, optimisé, rapide ...) enfin s'il l'est pas déjà

Discussions similaires

  1. Réponses: 3
    Dernier message: 12/08/2009, 10h11
  2. Concaténation de fichiers csv avec tri
    Par lfournial dans le forum Général Java
    Réponses: 8
    Dernier message: 25/04/2008, 11h23
  3. Création d'un fichier CSV pour Excel
    Par soso78 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 03/04/2008, 15h25
  4. Concaténation de fichier csv avec entête
    Par MottetCCSF dans le forum Langage
    Réponses: 1
    Dernier message: 19/12/2007, 20h46
  5. Réponses: 3
    Dernier message: 19/05/2007, 17h19

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