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 :

Macro copie de données depuis différents csv et récupération d'informations dans nom du csv


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 17
    Par défaut Macro copie de données depuis différents csv et récupération d'informations dans nom du csv
    Bonjour à tous,

    J'ai besoin d'un petit coup de pouce pour avancer sur une petite macro Excel.

    J'ai plusieurs centaines de fichiers .csv tous formatés de la même manière. J'aimerais pouvoir les ouvrir tous a la suite pour en extraire certaines cellules que je souhaite recopier toutes sur la même ligne dans un fichier excel. (pour pouvoir créer des graphs depuis ce dernier) En gros j'aimerais finir avec un fichier contenant plusieurs centaines de lignes chacune contenant les informations m'important d"un seul .csv

    J'ai qqs soucis :

    - Mes fichiers csv ne contienne aucune données permettant de les discriminer entre eux. Seul le nom du fichier le permet (ex: 1235XC-124-P1.csv contient les données de la séquence 124 !)

    - J'ai besoin de changer de lignes pour chaque fichiers mais comment être sur que tout les fichiers csv on bien été pris en compte ?

    Des conseils ?

    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
    Sub Compilation()
    Dim Temp As String
    Dim Ligne As Long
     
    'ouvrir tous les csv dans le repertoire
     
    Temp = Dir(ActiveWorkbook.Path & "\*.csv")
    Application.DisplayAlerts = False
    Do While Temp <> ""
    If Temp <> "All.xls" Then
    Workbooks.Open ActiveWorkbook.Path & "\" & Temp
     
    'les csv sont creés depuis des fichiers txt
     
    Columns("A:A").Select
        Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
            Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
            :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _
            Array(7, 1)), TrailingMinusNumbers:=True
     
    Workbooks(Temp).Sheets(1).Range("A1").CurrentRegion.Copy
    Workbooks("all.xls").Sheets(1).Activate
     
    'la premiere cellules de chaque doit etre defini par le numéro de sequence seulement compris dans le nom du csv
     
    Ligne = Sheets(1).Range("A65536").End(xlUp).Row + 1
    Range("A" & CStr(Ligne)).Select
    ActiveSheet.Paste
    Workbooks(Temp).Close
    End If
    Temp = Dir
    Loop
    Range("A1").Select
    Application.DisplayAlerts = True
    End Sub
    Merci par avance

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Et si tu regardais du coté de Entrée/Sortie sur les fichiers texte ? Ceci évite de les ouvrir dans Excel. Les fichiers sont ouverts et stockés en mémoire sans être visibles et on peut travailler dessus. Juste une piste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Open ActiveWorkbook.Path & "\" & Temp For Input As #1
     
        Do While Not EOF(1)
     
            Input #1, Valeur 'une valeur sur une ligne
            Line Input #1, Ligne 'pour la ligne entière
     
        Loop
     
    Close #1
    Pour le code dans le nom du fichier, utilise la fonction Split :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Sub Test()
     
        Dim Fichier As String
        Dim Code As String
     
        Fichier = "1235XC-124-P1.csv"
     
        Code = Split(Fichier, "-")(1)
     
        MsgBox MsgBox
     
    End Sub
    Hervé.

Discussions similaires

  1. Récupération des données depuis la BDD MySQL et le mettre dans la ListView
    Par jeanneDani dans le forum Composants graphiques
    Réponses: 0
    Dernier message: 23/06/2015, 22h17
  2. Copie de Données depuis MS Acces
    Par Dadar dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 24/08/2011, 16h45
  3. macro copie de données d'un fichier à un autre
    Par mdakini dans le forum Macros et VBA Excel
    Réponses: 21
    Dernier message: 05/04/2011, 11h09
  4. Copie de données depuis un classeur fermé
    Par kiki29 dans le forum Contribuez
    Réponses: 0
    Dernier message: 15/03/2008, 18h36
  5. Réponses: 5
    Dernier message: 02/04/2007, 20h26

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