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 pour sauvegarder des données txt en csv


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2010
    Messages : 338
    Points : 153
    Points
    153
    Par défaut Macro pour sauvegarder des données txt en csv
    Bonjour,

    J'ai une macro qui m'importe des données :

    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
    'Déclarations des variables
        Dim Fso As Object
        Dim FsoRepertoire As Object
        Dim FsoFichier As Object
        Dim i As Long
        Dim c As Integer
        Dim strLigne As String
        Dim str() As String
     
        'Attribution de valeurs
        Set Fso = CreateObject("Scripting.FileSystemObject")
        Set FsoRepertoire = Fso.GetFolder(Sheets("Macro").Range("E11").Value) 'nom du répertoire
     
        'Boucle sur fichiers du repertoire
        c = 2
            For Each FsoFichier In FsoRepertoire.Files
                i = 1
                'Vérifie si le fichier a l'extension souhaité
                str = Split(FsoFichier.Name, ".")
                    If str(UBound(str)) = "dpt" Then
                        'ouvre le fichier
                        Open FsoFichier.Path For Input As #1
                            'Boucle sur chaque ligne du fichier
                            Do While Not EOF(1)
                                Line Input #1, strLigne
                                str = Split(strLigne, Chr(9))
                                'insere la ligne dans la cellule
                                Sheets("Données brutes").Cells(i, c).Value = str(1)
                                i = i + 1
                            Loop
                        Close #1
                        c = c + 1
                    End If
            Next
    Je souhaite que ces données soient sauvegarder dans un répertoire dont le chemin est indiqué dans la cellule E13 de ma feuille 1 selon fichier type csv de la manière suivante :

    - fichier csv n°1 colonne A et B de la feuille 2
    - fichier csv n°2 colonne A et C de la feuille 2
    - ...
    - fichier csv n°"x" colonne A et "x" de la feuille 2

    La colonne "x" correspond à la dernière colonne comportant des données

    Cordialement

    Vincent

  2. #2
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2010
    Messages : 338
    Points : 153
    Points
    153
    Par défaut
    J'ai trouvé !

    En adaptant un code fourni par Daniel (encore une fois merci Daniel) que j'ai inséré dans ma deuxième colonne je suis arrivé à mes fins.

    Voici le code pour les curieux :

    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
    'Déclaration des variables
        Dim ws0 As Worksheet, ws1 As Worksheet
        Const PremC1 = 1 'Première colonne de données dans la feuille 1
        Dim DerC1 As Long 'Dernière colonne de données dans la feuille 1
        Dim Col As Long
     
        'Attribution de valeurs
        Set ws0 = Worksheets("Macro")
        Set ws1 = Worksheets("Données brutes") 'L'objet Feuille 1 est attribué à la variable ws1
     
        'Recherche de la dernière colonne renseignée dans la ligne 1 de la feuille 1
        DerC1 = ws1.Cells(1, ws1.Columns.Count).End(xlToLeft).Column
     
        'Enregistrement données brutes
            For Col = PremC1 To DerC1 - 2
                        'ajout d'un classeur avec 1 feuille
                        Workbooks.Add 1
                        'copie des colonnes qui vont bien dans le nouveau classeur
                        ws1.[A:A].Copy [A1]
                        ws1.Cells(1, Col).Offset(0, 1).EntireColumn.Copy [B1]
                        'enregistrement au format csv
                        ActiveWorkbook.SaveAs ws0.[E13] & Col & ".csv", xlCSV, Local:=True
                        'fermeture du classeur texte
                        ActiveWorkbook.Close False
            Next Col
    Bonne journée à tous

    Vincent

  3. #3
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour
    Ton code adapté pourrait être encore plus formalisé comme ceci
    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
    'Déclaration des variables
    Const PremC1 As Byte = 1                                   'Première colonne de données dans la feuille 1
    Dim Ws0 As Worksheet, Ws1 As Worksheet
    Dim Wbk As Workbook
    Dim DerC1 As Integer, Col As Integer
     
    Application.ScreenUpdating = False
    'Attribution de valeurs
    Set Ws0 = Worksheets("Macro")
    Set Ws1 = Worksheets("Données brutes")                     'L'objet Feuille 1 est attribué à la variable ws1
    'Recherche de la dernière colonne renseignée dans la ligne 1 de la feuille 1
    With Ws1
        DerC1 = .Cells(1, .Columns.Count).End(xlToLeft).Column
        'Enregistrement données brutes
        For Col = PremC1 To DerC1 - 1
            'ajout d'un classeur avec 1 feuille
            Set Wbk = Workbooks.Add(1)
            'copie des colonnes qui vont bien dans le nouveau classeur
            Union(.Columns(1), .Columns(Col + 1)).Copy Wbk.Worksheets(1).Range("A1")
            'enregistrement au format csv
            Wbk.SaveAs Ws0.Range("E13") & Col & ".csv", xlCSV, Local:=True
            'fermeture du classeur texte
            Wbk.Close False
            Set Wbk = Nothing
        Next Col
    End With
    Set Ws0 = Nothing
    Set Ws1 = Nothing

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

Discussions similaires

  1. [XL-2003] Arrêt macro pour entrer des données
    Par phal2ip dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 27/05/2011, 08h41
  2. Macro pour classer des données
    Par lmb19 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 16/11/2010, 21h38
  3. Problème Macro pour trier des données
    Par lmb19 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 15/11/2010, 00h00
  4. [XL-2003] Macro pour utiliser des données Excel dans un document Word
    Par Jeremy0269 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/07/2009, 18h58
  5. Réponses: 1
    Dernier message: 15/09/2006, 16h23

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