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 :

Ouverture d'une série de fichiers de données


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 46
    Par défaut Ouverture d'une série de fichiers de données
    Bonjour,
    j'essaye de faire un programme VBA qui me permette de récupérer des données d'une série de fichiers. En théorie tout devrait marcher mais en fait non lol. Au départ j'ouvre une boite de dialogue pour taper du texte, je tappe le début du nom de mes fichier (qui est le même pour tous). Il trouve les fichier et les lis tous pour ajouter leur contenu à la feuille excel. Mais j'obtiens une erreur 62 : l'entrée dépasse la fin du fichier. Mon programme est le suivant :

    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
    Sub LireFicherTexte()
     
    Dim Temps, Valeur, CurrentFile
    Dim SerieName As String, Col As String
    CurrentFile = 1
    SerieName = InputBox("Taper le nom de la série")
     
    'Nécessite d'activer la référence ClFileSearch
    '(Dans l'éditeur de macros: Menu Outils/Références)
    Dim i As Long
    Dim Recherche As ClFileSearch.ClasseFileSearch
     
     
    Set Recherche = ClFileSearch.Nouvelle_Recherche
     
    With Recherche
        'Définit le répertoire de recherche
        .FolderPath = "."
     
        'Définit la recherche dans les sous dossiers (True / False)
        .SubFolders = False
     
        'Option de tri:
        '(Sort_None, sort_Name, sort_Path, sort_Size, sort_DateCreated, sort_LastModified, sort_Type)
        'Pas de tri si le paramètre n'est pas spécifié.
        .SortBy = sort_Name
     
        'Option pour rechercher un type de fichier
        '(Renvoie tous les fichiers si non spécifié)
        .Extension = SerieName & "*.ocw"
     
        'Execute la recherche
        .Execute
     
        'Boucle sur le tableau pour afficher le résultat de la recherche
        '(.FoundFilesCount renvoie le nombre de fichiers trouvés)
        'For i = 1 To .FoundFilesCount
            'Debug.Print .Files(i).strFileName 'nom du fichier
            'Debug.Print .Files(i).strPathName 'chemin
            'Debug.Print .Files(i).lngSize & "  octets" 'taille
            'Debug.Print .Files(i).DateCreated 'date création fichier
            'Debug.Print .Files(i).DateLastModified 'date dernière modification
            'Debug.Print .Files(i).strFileType 'type de fichier
     
            'Debug.Print "---"
        'Next
     
        Debug.Print "Fichiers trouves : " & .FoundFilesCount
        For i = 1 To .FoundFilesCount
            Debug.Print "--------------------------------"
            Debug.Print "Fichier numero : " & CurrentFile
            Debug.Print .Files(i).strFileName
            Open .Files(i).strFileName For Input As #CurrentFile
            Do While Not EOF(CurrentFile)
                Input #CurrentFile, Temps, Valeur
                If i = 1 Then
                    Range("A65536").End(xlUp)(2).Value = Temps
                End If
                Col = "" & Chr(65 + i) & "65536"
                Range(Col).End(xlUp)(2).Value = Valeur
            Loop
            Close #CurrentFile
            CurrentFile = CurrentFile + 1
        Next
    End With
     
    Set Recherche = Nothing
     
    End Sub
    le debug affiche (en ayant tappé 'fichier' dans la boite de dialogue), il y a bien 3 fichiers fichier_1.txt, fichier_2.txt, fichier_3.txt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Fichiers trouves : 3
    --------------------------------
    Fichier numero : 1
    fichier_1.txt
    --------------------------------
    Fichier numero : 2
    fichier_2.txt
    mes fichiers sont bien trouvés et sont de la forme suivante (la ligne sautée et la virgules dans les 2 premières lignes sont là, il faut faire avec...) :

    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
     
     ,
     -.2975159  6.286621E-09 
     -.2900085  1.046753E-08 
     -.2850342  9.58252E-09 
     -.2800293  1.266479E-08 
     -.2750244  1.190186E-08 
     -.27005  1.385498E-08 
     -.2650452  1.348877E-08 
    3.961182E-02  2.023315E-08 
      .0446167  2.102661E-08 
      4.959106E-02  2.044678E-08 
      5.459595E-02  2.120972E-08 
      5.960083E-02  2.075195E-08 
      6.460571E-02  2.139282E-08 
      .0696106  2.102661E-08 
      7.458496E-02  2.178955E-08 
      .1126404 -2.035523E-08 
      .1076355 -1.71814E-08 
      .1026306 -2.124023E-08 
      9.759521E-02 -1.687622E-08 
      9.259033E-02 -2.22168E-08 
     -.2830811 -3.173828E-08 
     -.2881165 -3.292847E-08 
     -.2930908 -3.253174E-08

  2. #2
    Membre Expert
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Par défaut
    Bonjour, Givemefive

    Le truc qui me saute au yeux en regardant ton code c'est ta gestion du paramétre numéro de fichier, ta variable currentFile (pour open et read)... qui n'est pas trop orthodoxe...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ....
     Debug.Print .Files(i).strFileName
     CurrentFile = FreeFile
     Open .Files(i).strFileName For Input As #CurrentFile
    ...
    cependant je vois pas pourquoi cela entrainerai une erreur 62. ...


    sur qu'elle ligne l'erreur ?

    [Edit]

    Je viens de relire ton code, pourrai tu regarder la derniére ligne de ton fichier 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Input #CurrentFile, Temps, Valeur
    n'as tu pas une ligne vide, où une ligne sans la "valeur" ....

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 46
    Par défaut
    Bonjour,
    tout d'abord je vous remercie de me répondre si vite et de m'accorder votre aide.
    Concernant la variable CurrentFile effectivement ce n'est pas orthodoxe (je débute en VBA). Je pense que comme je referme les fichiers entre chaque tour de boucle cela ne sert à rien. Mais je ne pense pas que le problème soit la. Néanmoins je retente en remplaçant par un 1 :

    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
    Sub LireFicherTexte()
     
    Dim Temps, Valeur, CurrentFile
    Dim SerieName As String, Col As String
    CurrentFile = 1
    SerieName = InputBox("Taper le nom de la série")
     
    'Nécessite d'activer la référence ClFileSearch
    '(Dans l'éditeur de macros: Menu Outils/Références)
    Dim i As Long
    Dim Recherche As ClFileSearch.ClasseFileSearch
     
     
    Set Recherche = ClFileSearch.Nouvelle_Recherche
     
    With Recherche
        'Définit le répertoire de recherche
        .FolderPath = "."
     
        'Définit la recherche dans les sous dossiers (True / False)
        .SubFolders = False
     
        'Option de tri:
        '(Sort_None, sort_Name, sort_Path, sort_Size, sort_DateCreated, sort_LastModified, sort_Type)
        'Pas de tri si le paramètre n'est pas spécifié.
        .SortBy = sort_Name
     
        'Option pour rechercher un type de fichier
        '(Renvoie tous les fichiers si non spécifié)
        .Extension = SerieName & "*.ocw"
     
        'Execute la recherche
        .Execute
     
        'Boucle sur le tableau pour afficher le résultat de la recherche
        '(.FoundFilesCount renvoie le nombre de fichiers trouvés)
        'For i = 1 To .FoundFilesCount
            'Debug.Print .Files(i).strFileName 'nom du fichier
            'Debug.Print .Files(i).strPathName 'chemin
            'Debug.Print .Files(i).lngSize & "  octets" 'taille
            'Debug.Print .Files(i).DateCreated 'date création fichier
            'Debug.Print .Files(i).DateLastModified 'date dernière modification
            'Debug.Print .Files(i).strFileType 'type de fichier
     
            'Debug.Print "---"
        'Next
     
        Debug.Print "Fichiers trouves : " & .FoundFilesCount
        For i = 1 To .FoundFilesCount
            Debug.Print "--------------------------------"
            Debug.Print "Fichier numero : " & CurrentFile
            Debug.Print .Files(i).strFileName
            Open .Files(i).strFileName For Input As #1
            Do While Not EOF(1)
                Input #1, Temps, Valeur
                If i = 1 Then
                    Range("A65536").End(xlUp)(2).Value = Temps
                End If
                Col = "" & Chr(65 + i) & "65536"
                Range(Col).End(xlUp)(2).Value = Valeur
            Loop
            Close #1
            CurrentFile = CurrentFile + 1
        Next
    End With
     
    Set Recherche = Nothing
     
    End Sub
    et j'obtiens la même erreur à la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Input #1, Temps, Valeur
    NB : apparement il importe le premier fichier sans problème et il fait une erreur au 2ème, j'obtiens sur la feuille excel 3 colonnes (2 pour le premier fichier, 1 pour le 2ème ce qui est normal) mais je devrais avoir une colonne pour le troisième ce qui n'est pas le cas... La structure de mes 2 fichiers et pourtant scrupuleusement identique puisque générés par le même logiciel...

    dans mon code on voit que dans le script de recherche j'ai ajouté un
    mes fichiers sont en réalité des OCW, mais j'ai simplifié l'exemple pour que cela soit plus clair en parlant de .txt.
    Désolé

  4. #4
    Membre Expert
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Par défaut
    Citation Envoyé par JacKouYA
    [Edit]

    Je viens de relire ton code, pourrai tu regarder la derniére ligne de ton fichier 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Input #CurrentFile, Temps, Valeur
    n'as tu pas une ligne vide, où une ligne sans la "valeur" ....

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 46
    Par défaut ligne vide
    Je n'avais pas vu la fin de votre message désolé.
    Il y a une ligne vide à la fin de tous les fichiers. Mais cela ne semble pas avoir posé de problème pour le fichier 1 puisque l'erreur n'a lieu qu'a partir du fichier 2... Peut être est-ce parce que je n'utilise qu'une des deux valeurs dans le cas d'un fichier >1. J'ai également remarqué que pour le fichier 1 dans Temps j'ai bien un temps et dans Valeur j'ai une valeur. Mais pour les fichiers >1 j'ai un temps dans Valeur... Je pense que l'on touche au coeur du problème.

Discussions similaires

  1. Lier (attacher) une série de fichiers Excel protégés
    Par yboutin dans le forum Sécurité
    Réponses: 6
    Dernier message: 14/10/2009, 23h12
  2. Créer une série de fichiers .txt
    Par Aymeric.vie dans le forum MATLAB
    Réponses: 5
    Dernier message: 02/03/2007, 14h29
  3. [VBA-E] Ouvrir une série de fichiers à l'aide d'une boucle
    Par Tiki40 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/12/2006, 14h34
  4. Conversion automatique d'une série de fichiers
    Par Sinon dans le forum Linux
    Réponses: 8
    Dernier message: 05/12/2006, 16h16
  5. Rechercher une chaîne de caractère dans une série de fichier
    Par Edoxituz dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 28/02/2006, 12h51

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