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 :

Ecriture de fichiers textes


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    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
    Par défaut Ecriture de fichiers textes
    Bonjour à tous,

    des macros déjà en place dans mon classeur excel me permettent de récupérer plusieurs fichiers textes, de réaliser différents calculs (soustraction de colonne, soustraction de ligne et dérivée première).

    Je souhaiterai ensuite récupérer dans un dossier "retraitement" récupérer chaque feuille de de calculs de la manière suivante (MAJUSCULE NOM DE DOSSIER, minuscule nom de fichier) :

    -RETRAITEMENT

    -SOUSTRACTION
    -soustraction fichier 1.txt = (feuille 2 colonne A et colonne B de la première ligne jusqu'à la première ligne vide)
    -soustraction fichier 2.txt = (feuille 2 colonne A et colonne C de la première ligne jusqu'à la première ligne vide)
    -soustraction fichier ....txt = (feuille 2 colonne A et colonne ... de la première ligne jusqu'à la première ligne vide)
    et ce jusqu'à la première colonne vide

    -NORMALISATION
    -normalisation fichier 1.txt = (feuille 3 colonne A et colonne B de la première ligne jusqu'à la première ligne vide)
    -normalisation fichier 2.txt = (feuille 3 colonne A et colonne C de la première ligne jusqu'à la première ligne vide)
    -normalisation fichier ....txt = (feuille 3 colonne A et colonne ... de la première ligne jusqu'à la première ligne vide)
    et ce jusqu'à la première colonne vide

    -DERIVEE
    -Dérivée fichier 1.txt = (feuille 4 colonne A et colonne B de la première ligne+1 jusqu'à la première ligne vide-1)
    -Dérivée fichier 2.txt = (feuille 4 colonne A et colonne C de la première ligne+1 jusqu'à la première ligne vide-1)
    -Dérivée fichier ....txt = (feuille 4 colonne A et colonne ... de la première ligne+1 jusqu'à la première ligne vide-1)
    et ce jusqu'à la première colonne vide

    Je n'ai aucune idée de la manière dont je dois m'y prendre merci beaucoup pour votre aide

    Cordialement

    Vincent

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    J'ai fait le boulot pour la soustraction, car je n'ai aucune idée pour calculer une normalisation ou une dérivée. Il te suffira de recopier le bloc de lignes compris entre :
    et
    et de mettre le bon calcul :


    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
    Sub test()
    Dim Plage As Range, c As Range, Ligne As Long, NbCol As Integer
    Dim Chemin As String, i As Long
    Application.ScreenUpdating = False
    Sheets.Add.Name = "Temp"
    With Sheets("Feuil2")
        'soustraction
        NbCol = .Cells(1, Columns.Count).End(xlToLeft).Column
        Set Plage = .Range(.[A1], .Cells(Rows.Count, 1).End(xlUp)) 'A2 si entête en A1
        Chemin = "c:\temp\soustraction\"
        For i = 1 To NbCol
            Ligne = 0
            For Each c In Plage
                Ligne = Ligne + 1
                Cells(Ligne, 1) = c.Value - c.Offset(, i).Value
            Next c
            ActiveSheet.Copy
            ActiveWorkbook.SaveAs Chemin & "soustraction fichier " & i & ".txt", xlTextWindows
            ActiveWorkbook.Close False
        Next i
        'fin soustraction
        End With
    Application.ScreenUpdating = True
    End Sub

  3. #3
    Membre éclairé
    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
    Par défaut
    En fait j'ai déjà des macros pour les différentes étapes :

    Importation 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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    Sub Import()
    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
     
    Set Fso = CreateObject("Scripting.FileSystemObject")
    Set FsoRepertoire = Fso.GetFolder(Sheets("Macro").Range("E9").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, "    ")
                'insere la ligne dans la cellule
                Sheets("Données brutes").Cells(i, c).Value = Split(strLigne, Chr(9))(1)
                '(1) Pour la seconde colonne du fichier texte
                '(0) Pour la Première colonne du fichier texte
                i = i + 1
            Loop
            Close #1
            c = c + 1
        End If
     
    Next
     
    Call Copie
     
     
     
    End Sub
    Traitement mathématique 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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    Option Explicit
    Sub Copie()
     
    Dim ws1 As Worksheet, ws2 As Worksheet, ws3 As Worksheet, ws4 As Worksheet
    Const PremL1 = 1 'Première ligne de données dans la feuille 1
    Const PremC1 = 1 'Première colonne de données dans la feuille 1
    Dim DerL1 As Long 'Dernière ligne 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
    Dim Lig As Long
    Dim Lign As Long
     
    Set ws1 = Worksheets("Données brutes") 'L'objet Feuille 1 est attribué à la variable ws1
    Set ws2 = Worksheets("Soustraction") 'L'objet Feuille 2 est attribué à la variable ws2
    Set ws3 = Worksheets("Normalisation") 'L'objet Feuille 3 est attribué à la variable ws3
    Set ws4 = Worksheets("Dérivée")
     
    'Recherche de la dernière ligne renseignée dans la colonne A de la feuille 1
    DerL1 = ws1.Range("A" & ws1.Rows.Count).End(xlUp).Row
    '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
     
    'Recopie de la colonne A de la feuille 1 dans les feuilles 2 et 3
    ws1.Range("A:A").Copy ws2.Range("A:A")
    ws1.Range("A:A").Copy ws3.Range("A:A")
    ws1.Range("A:A").Copy ws4.Range("A:A")
     
    'soustraire la colonne B de la feuille 1 à toutes les autres colonnes pour renseigner la feuille 2
    For Col = PremC1 To DerC1 - 2
        For Lig = PremL1 To DerL1
            ws2.Cells(Lig, Col).Offset(0, 1) = ws1.Cells(Lig, Col).Offset(0, 2) - ws1.Cells(Lig, PremC1 + 1)
        Next Lig
    Next Col
     
    'soustraire la ligne 1090 de la feuille 2 à toutes les autres lignes pour renseigner la feuille 3
    For Col = PremC1 To DerC1 - 2
        For Lig = PremL1 To DerL1
            ws3.Cells(Lig, Col + 1) = ws2.Cells(Lig, Col + 1) - ws2.Cells(1090, Col + 1)
        Next Lig
    Next Col
     
    'dérivée première de la feuille 3 pour renseigner la feuille 4
    For Col = PremC1 To DerC1 - 2
        For Lig = PremL1 + 1 To DerL1 - 1
            ws4.Cells(Lig, Col + 1) = (ws3.Cells(Lig + 1, Col + 1) - ws3.Cells(Lig - 1, Col + 1)) / (ws3.Cells(Lig + 1, 1) - ws3.Cells(Lig - 1, 1))
        Next Lig
    Next Col
     
    'Libère les ressources
    Set ws1 = Nothing
    Set ws2 = Nothing
    Set ws3 = Nothing
    Set ws4 = Nothing
     
    End Sub
    Il ne me manque "que" la partie sauvegarde

    En tout cas merci pour ta réponse

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Un peu au hasard, j'ai modifié la partie soustraction comme suit. Dis-moi si ça convient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    'soustraire la colonne B de la feuille 1 à toutes les autres colonnes pour renseigner la feuille 2
    For Col = PremC1 To DerC1 - 2
        For Lig = PremL1 To DerL1
            ws2.Cells(Lig, Col).Offset(0, 1) = ws1.Cells(Lig, Col).Offset(0, 2) - ws1.Cells(Lig, PremC1 + 1)
        Next Lig
            ws2.Copy
            ActiveWorkbook.SaveAs "c:\temp\soustraction\soustraction fichier " & Col & ".txt", xlTextWindows
            ActiveWorkbook.Close False
    Next Col

  5. #5
    Membre éclairé
    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
    Par défaut
    Merci Daniel,

    (Je me permets de te tutoyer)
    Je vais regarder ce que ça donne.

    Par contre pourrais tu me décrire ta fonction (son fonctionnement (c'est à dire comment lui dire de prendre plusieurs colonnes : la colonne A et la colonne en cours séparées par une tabulation)

    En attendant je teste ton code

    Encore merci pour ta réponse et ton aide

    Cordialement

    Bon le principe semble fonctionner.

    Je m'explique :


    La macro crée bien les fichiers .txt dans le répertoire désiré, elle crée autant de fichier que j'ai de colonnes cependant il m'insère dans chaque fichier texte :

    -La colonne A (c'est normal c'est ce que je veux)

    -La colonne en cours (c'est cool c'est ce que je veux aussi)

    -Toutes les autres colonnes déjà traitées (par exemple le fichier 5 comporte la colonne A, B, C, D, E, F ; alors que je ne veux que la colonne A et F)

    De plus le chemin du fichier où sont sauvegardés les fichiers txt est indiqué directement dans la macro, comment faire pour dire à la macro de récupérer le chemin dans la cellule A1 de la feuille 1 ?

    Une idée dans l'adaptation du code ?

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Essaie comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    'soustraire la colonne B de la feuille 1 à toutes les autres colonnes pour renseigner la feuille 2
    For Col = PremC1 To DerC1 - 2
        For Lig = PremL1 To DerL1
            ws2.Cells(Lig, Col).Offset(0, 1) = ws1.Cells(Lig, Col).Offset(0, 2) - ws1.Cells(Lig, PremC1 + 1)
        Next Lig
            Sheets.Copy
            Cells.Clear
            ws2.[A:B].Copy [A1]
            ActiveWorkbook.SaveAs ws2.[A1] & "\soustraction fichier " & Col & ".txt", xlTextWindows
            ActiveWorkbook.Close False
    Next Col
    Au fait, oui, pour le tutoiement, il est largement majoritaire sur les forums, et machinal chez moi. Sauf si on me répond en me vousoyant.

    J'ai commenté le code comme tu l'as demandé :

    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
    'soustraire la colonne B de la feuille 1 à toutes les autres colonnes pour renseigner la feuille 2
    For Col = PremC1 To DerC1 - 2
        For Lig = PremL1 To DerL1
            ws2.Cells(Lig, Col).Offset(0, 1) = ws1.Cells(Lig, Col).Offset(0, 2) - ws1.Cells(Lig, PremC1 + 1)
        Next Lig
            'copie de la feuille ws2 dans un nouveau classeur
            Sheets.Copy
            'effacement de la feuille
            Cells.Clear
            'copie des colonnes A et B dans le nouveau classeur
            ws2.[A:B].Copy [A1]
            'enregistrement au format texte
            ActiveWorkbook.SaveAs ws2.[A1] & "\soustraction fichier " & Col & ".txt", xlTextWindows
            'fermeture du classeur texte
            ActiveWorkbook.Close False
    Next Col

  7. #7
    Membre éclairé
    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
    Par défaut
    Bonjour,

    En fait mon CSV ne correspond pas tout à fait à ce que je désire :

    Il me sauve bien la colonne A et la colonne "x" mais dans mon fichier csv ces deux colonnes sont "concaténer" dans la colonne A (la séparation est effectuée par une virgule).

    Je voudrais en fait lorsque j'ouvre mon fichier.csv que les deux colonnes sauvegardées soient respectivement dans les colonnes A et B de mon fichier csv.

    (Peut être n'est ce qu'une question de virgule ?)

    Cordialement

    Vincent

  8. #8
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,
    Mets alors :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWorkbook.SaveAs ws0.[E12] & Col & ".dpt", xlCSV, Local:=True
    Le paramètre "Local" permet d'utiliser le séparateur défini dans les options régionales de Windows.

  9. #9
    Membre éclairé
    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
    Par défaut
    C'est parfait !

    Merci beaucoup Daniel

    Cordialement

    Vincent

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

Discussions similaires

  1. [bug] ecriture dans fichier texte
    Par skaraa dans le forum Windows Forms
    Réponses: 3
    Dernier message: 09/11/2007, 15h14
  2. ecriture dans fichier texte
    Par nicofan dans le forum C++
    Réponses: 1
    Dernier message: 28/09/2007, 13h28
  3. Problèmes Ecriture dans Fichiers Texte
    Par JmL40 dans le forum Langage
    Réponses: 13
    Dernier message: 26/09/2007, 14h04
  4. Réponses: 2
    Dernier message: 06/08/2007, 13h54
  5. Ecriture sur fichier texte non effectuée
    Par lodan dans le forum Langage
    Réponses: 4
    Dernier message: 20/02/2007, 09h20

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