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 :

Importer la derniere ligne d'un fichier text et un fichier csv


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 60
    Par défaut Importer la derniere ligne d'un fichier text et un fichier csv
    Bonjour,

    SVP, quelle est la cammande sous VBA qui permet de copier la derinere ligne d'un fcihier texte, et d'un fichier CSV.

    votre aide me serais precieuse; merci

  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,

    Teste ceci et adapte :
    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
     
    Sub DerLigne()
     
        Dim Tbl() As String
        Dim Ligne As String
        Dim I As Integer
     
        'adapter le chemin et nom du fichier
        Open "D:\Test\Classeur3.csv" For Input As #1
     
            Do While Not EOF(1)
     
                Line Input #1, Ligne
     
                I = I + 1
                ReDim Preserve Tbl(1 To I)
                Tbl(I) = Ligne
     
            Loop
     
        Close #1
     
        'résultat dans la fenêtre d'exécution (Ctrl+G)
        Debug.Print Tbl(I)
     
    End Sub
    Hervé.

  3. #3
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 60
    Par défaut
    Re,
    j'ai mis le chemin correspondant à mon fichier, j'ai lancé la macro mais je n'ai aucun resultat sur ma feuil, cette macro importe bien la dernière ligne "écrite" d'un fichier ?

    merci

  4. #4
    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
    Re,

    Pour le test, le résultat était dans la fenêtre d'exécution :o(
    Voici le code pour avoir le résultat en A1 :
    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
     
    Sub DerLigne()
     
        Dim Tbl() As String
        Dim Ligne As String
        Dim I As Integer
     
        'adapter le chemin et nom du fichier
        Open "D:\Test\Classeur3.csv" For Input As #1
     
            Do While Not EOF(1)
     
                Line Input #1, Ligne
     
                I = I + 1
                ReDim Preserve Tbl(1 To I)
                Tbl(I) = Ligne
     
            Loop
     
        Close #1
     
        Cells(1, 1) = Tbl(I)
     
    End Sub
    Hervé.

  5. #5
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 60
    Par défaut
    merci hervé,

    j'ai essayer avec cette derniere, mais ça donne pas des resultat concluant,
    y a-t-il moyen de les copier dans toute la ligne du fichier excel. en tenant en compte des separations des colonnes?
    Fichiers attachés Fichiers attachés

  6. #6
    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
    Ton fichier est un "fichier délimité" (apparament par des tabulations) et si on ne connait pas la longueur défini de chaque champ, c'est quasiment impossible (enfin, à ma connaissance) de récupérer les valeurs dans leur intégrité.
    Il faudrait pourvoir définir la longueur de chaque champ dans un type un peu comme dans l'exemple ci-dessous.
    J'ai essayé mais les données sont récupérées pour la plupart tronquées
    Je te poste le code que j'ai écris et si tu arrive à comprendre, avec de la patience (il faut savoir le nombre de caractère de chaque champ) tu pourra peut être y arriver. Je t'avoue que je n'ai pas envie de passer des heures pour définir à tâtons la longueur de chaque champ, à moins que quelqu'un sache comment y arriver rapidement :
    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
     
    Type Enregistrement
     
        Log_Time As String * 23
        SN As String * 9
        Software_rev As String * 6
        opversion As String * 6
        Inv_Time As String * 13
        watt_hours As String * 9
        Voltage_In As String * 6
        Voltage_DC_Bus As String * 6
        Voltage_L1 As String * 6
        Voltage_L2 As String * 4
        voltage_rise As String * 4
        min_v_from_rpm As String * 6
        current_out As String * 4
        Power_out As String * 6
        Power_reg As String * 6
        Power_Max As String * 7
        Line_Frequency As String * 5
        Inverter_Frequency As String * 5
        Line_Resistance As String * 6
        RPM As String * 6
        Windspeed As String * 4
        TargetTSR As String * 4
        Ramp_RPM As String * 6
        Boost_pulswidth As String * 6
        Max_BPW As String * 6
        current_amplitude As String * 6
        T1 As String * 5
        T2 As String * 5
        T3 As String * 5
        Event_count As String * 7
        Last_event_code As String * 4
        Event_status As String * 7
        Event_value As String * 4
        Turbine_Status As String * 4
        Grid_Status As String * 4
        System_Status As String * 6
        Slave_Status As String * 4
        Access_Status As String * 4
        Timer As String * 4
     
    End Type
     
    Sub LireEnregistrement()
     
    Dim Enrg As Enregistrement
    Dim I As Long
     
    'ouvre le fichier en mode aléatoire
    Open "D:\a20120925.txt" For Random As #1 Len = Len(Enrg)
     
        'parcour tous les enregistrement
        For I = 1 To LOF(1) / Len(Enrg)
     
            'les récupère
            Get #1, I, Enrg
     
            'et les inscrits dans la ligne 1
            With Enrg
     
                Range("A" & I) = .Access_Status
                Range("A" & I).Offset(0, 1) = .Boost_pulswidth
                Range("A" & I).Offset(0, 2) = .current_amplitude
                Range("A" & I).Offset(0, 3) = .current_out
                Range("A" & I).Offset(0, 4) = .Event_count
                Range("A" & I).Offset(0, 5) = .Event_status
                Range("A" & I).Offset(0, 6) = .Event_value
                Range("A" & I).Offset(0, 7) = .Grid_Status
                Range("A" & I).Offset(0, 8) = .Inv_Time
                Range("A" & I).Offset(0, 9) = .Inverter_Frequency
                Range("A" & I).Offset(0, 10) = .Last_event_code
                Range("A" & I).Offset(0, 11) = .Line_Frequency
                Range("A" & I).Offset(0, 12) = .Line_Resistance
                Range("A" & I).Offset(0, 13) = .Log_Time
                Range("A" & I).Offset(0, 14) = .Max_BPW
                Range("A" & I).Offset(0, 15) = .min_v_from_rpm
                Range("A" & I).Offset(0, 16) = .opversion
                Range("A" & I).Offset(0, 17) = .Power_Max
                Range("A" & I).Offset(0, 18) = .Power_out
                Range("A" & I).Offset(0, 19) = .Power_reg
                Range("A" & I).Offset(0, 20) = .Ramp_RPM
                Range("A" & I).Offset(0, 21) = .RPM
                Range("A" & I).Offset(0, 22) = .Slave_Status
                Range("A" & I).Offset(0, 23) = .SN
                Range("A" & I).Offset(0, 24) = .Software_rev
                Range("A" & I).Offset(0, 25) = .System_Status
                Range("A" & I).Offset(0, 26) = .T1
                Range("A" & I).Offset(0, 27) = .T2
                Range("A" & I).Offset(0, 28) = .T3
                Range("A" & I).Offset(0, 29) = .TargetTSR
                Range("A" & I).Offset(0, 30) = .Timer
                Range("A" & I).Offset(0, 31) = .Turbine_Status
                Range("A" & I).Offset(0, 32) = .Voltage_DC_Bus
                Range("A" & I).Offset(0, 33) = .Voltage_In
                Range("A" & I).Offset(0, 34) = .Voltage_L1
                Range("A" & I).Offset(0, 35) = .Voltage_L2
                Range("A" & I).Offset(0, 36) = .voltage_rise
                Range("A" & I).Offset(0, 37) = .watt_hours
                Range("A" & I).Offset(0, 38) = .Windspeed
     
            End With
     
        Next I
     
    Close #1
     
    End Sub
    Sinon, un peu plus "brouillon" si on peut dire, avec une requête sur le fichier et la suppression de toutes les lignes sauf la ligne d'entête et la dernière :
    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
     
    Sub RecupAvecRequete()
     
        Dim Fe As Worksheet
        Dim Plage As Range
        Dim Fichier As String
     
        Fichier = "D:\Téléchargement\a20120925.txt"
     
        Set Fe = Worksheets("Feuil1")
     
        With Fe
     
            With .QueryTables.Add("TEXT;" & Fichier, Range("A1"))
     
                .Refresh False
                .Delete '<supprime la liaison
     
            End With
     
            Set Plage = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp).Offset(-1, 0))
     
            Plage.EntireRow.Delete
     
        End With
     
    End Sub
    Hervé.

Discussions similaires

  1. Couper un fichier texte en plusieurs fichiers texte
    Par Wim88 dans le forum Général Java
    Réponses: 2
    Dernier message: 30/12/2013, 00h57
  2. importer plusieurs fichiers texte dans 1 fichier Excel
    Par dannie dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 11/10/2011, 21h39
  3. Réponses: 10
    Dernier message: 26/01/2011, 11h15
  4. Réponses: 2
    Dernier message: 09/12/2006, 18h01
  5. transfert des données d'un fichier text vers un fichier excel sous VB
    Par insane_80 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 24/09/2006, 13h32

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