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 de fichiers textes


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2018
    Messages : 4
    Par défaut Ouverture de fichiers textes
    Bonjour à tous,

    Je viens vous faire part d'un problème que je rencontre avec ma macro VBA sous Excel.

    En effet, je dois ouvrir un fichier texte puis importer son contenu dans Excel.
    C'est exactement ce que l'on fait lorsque l'on fait fichier > Ouvrir > sélection du fichier texte.

    Dans ce fichier texte, mes données sont séparées par des ";".
    J'ai précisé dans le code que mon séparateur est un ";".
    Jusque là tout va bien.

    Le problème survient lorsque j'ai des virgules "," dans mon fichier texte.
    En effet, lorsque une virgule est rencontrée, les données qui suivent vont à la ligne sur le tableau Excel, un peu comme si c'était une nouvelle entrée.

    Par exemple, dans mon fichier texte j'ai : 45684;01;demande d'ouverture, opération de type 54;01

    Lorsque la virgule est rencontrée, la suite va à la ligne, ce que je ne souhaite pas.

    Je vous transmets mon code VBA pour mieux comprendre :

    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
     
     
    Sub FichierTexteCopie()
    Dim ligne As String, NoLigne As Long, NoCol As Long
    Dim Tableau, nomFich(), separateur
     
        Application.ScreenUpdating = False
     
        Sheets(1).Activate
     
        'Ouverture de la boîte de dialogue
        nomFich() = Application.GetOpenFilename _
        (, , , , True)
     
        ' J'ai plusieurs fichiers textes à traiter d'où la boucle
        For i = 1 To UBound(nomFich)
     
        '********************************
     
            Sheets(i).Activate
     
            NoLigne = 0
            Open nomFich(i) For Input As #FreeFile
     
            'Lecture
            While Not EOF(1)
                Input #1, ligne
     
                separateur = ";"
     
                'création d'un tableau des données de la ligne
                Tableau = Split(ligne, separateur)
     
                NoLigne = NoLigne + 1
     
     
                'transfert des données dans la feuille Excel
                For NoCol = 0 To UBound(Tableau)
                    Cells(NoLigne, NoCol + 1).Value = Tableau(NoCol)
                Next NoCol
            Wend
            Close #1
        Next i
     
        Application.ScreenUpdating = True
        MsgBox "Opération terminée"
    End Sub
    Alors, je pense savoir d'où viens le problème mais je ne sais pas comment corriger cela.
    D'après moi, il s'agit de l'instruction
    car dans la doc il est dit :
    Input #filename, varlist

    varlist est une "liste, délimitée par des virgules, de variables auxquelles sont attribuées les valeurs lues dans le fichier"
    Avez-vous des solutions ou des idées pour résoudre mon problème ?

    Merci !

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Laisse tomber le traitement séquentiel, il y a beaucoup plus simple.
    Ce que tu souhaites peut se faire en une seule ligne avec un Workbooks.OpenText.
    https://msdn.microsoft.com/fr-fr/vba...t-method-excel

    Si tu actives l'enregistreur automatique de macro quand tu fais fichier > Ouvrir > sélection du fichier texte, ça te donnera 90% du code.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2018
    Messages : 4
    Par défaut
    Merci beaucoup Menhir !
    Tu m'as fait gagner pas mal de temps !

    Malheureusement, j'ai un autre problème que je ne parviens pas à résoudre.
    En effet, j'ai un des fichiers textes qui fait plus (+) que le nombre de ligne maximum autorisé sur une feuille de calcul.
    Le problème étant que Excel prend les 1 048 576 premières lignes et tronque les suivantes.
    J'aimerais pouvoir récupérer ces lignes suivantes en les mettant dans une autre feuille.

    Je cherche depuis un bout de temps déjà (depuis la réponse de Menhir), mais je ne trouve rien qui soit faisable avec Workbooks.OpenText. Est-ce que quelqu'un aurait une piste ?

    Voici mon code si jamais :

    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 FichierTexteCopieNewMacro()
    Dim NomFich()
     
        Application.ScreenUpdating = False
     
        Sheets(1).Activate
     
        'Ouverture de la boîte de dialogue
        NomFich() = Application.GetOpenFilename _
        (, , , , True)
     
        ' J'ai plusieurs fichiers textes à traiter d'où la boucle
        For i = 1 To UBound(NomFich)
     
        '********************************
     
            Workbooks.OpenText Filename:=NomFich(i), Origin:=xlWindows, _
            StartRow:=1, DataType:=xlDelimited, Semicolon:=True
     
        Next i
     
        Application.ScreenUpdating = True
        MsgBox "Opération terminée"
    End Sub

    Merci beaucoup !

  4. #4
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    A mon avis, il y a au moins deux solutions :

    Soit revenir à la solution séquentielle, mais ça va être certainement long et lourd.
    Soit changer d'outil et utiliser une SGDB : pour traiter des bases de données, utiliser l'outil adéquate est souvent préférable.

    Je te conseille plutôt la seconde solution.

  5. #5
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    + 1 million de lignes ... waou sur excel cela risque d'être long

    c'est quoi ton traitement en bon français de chez nous (pas en langage VBA)

    Es-tu vraiement obligé de chargé ton fichier dans Excel ?



    parce que tu as plusieurs solutions plus ou moins adapté à ta problématique

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2018
    Messages : 4
    Par défaut
    Merci de vos réponses,

    Pour expliquer plus précisément mon cas :
    Je récupère d'un logiciel 9 fichiers textes contenant, pour certains, beaucoup d'informations et pour d'autres très peu.

    Cela a été fait pour pouvoir être lisible sur Excel grâce aux séparateurs en ouvrant ce fichier txt via Excel. Cela me permet après activation des filtres, de pouvoir analyser les données.

    Avant je faisais toutes ces opérations (fichier > ouvrir > ...) à la main, mais j'aimerais automatiser cette tâche et gagner du temps.
    Certains fichiers txt sont plus remplis que d'autres.
    Certaines fois l'un des fichiers fait plus que le nombre max de lignes.

    Et comme je renouvelle cette opération régulièrement, je voulais donc optimiser un peu la tâche.

    Dans l'idéal j'aimerais continuer pour le moment avec Excel si il existe une solution pas trop trop compliqué mais si il y d'autres solutions vraiment plus faciles, je suis preneur.

    Merci beaucoup de votre aide !

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Je ne connais pas le programme d'où tu importes tes fichiers, mais ne serait-ce pas possible d'importer ces données par "batch"?
    Disons que tu importes des données sur un an.
    Peut-être pourrais-tu importer 2 fichiers de 6 mois?

Discussions similaires

  1. Réponses: 9
    Dernier message: 20/06/2007, 13h50
  2. Réponses: 6
    Dernier message: 12/04/2007, 14h22
  3. Ouverture de fichier texte d'extension quelconque
    Par Arnaoud dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 10/04/2007, 13h49
  4. Ouverture de fichier text
    Par lerouzes dans le forum Langage
    Réponses: 17
    Dernier message: 13/01/2006, 10h48
  5. [JAR]ouverture de fichier texte depuis executables jar
    Par julien31 dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 01/03/2005, 15h53

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