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 :

Ouvrir fichier texte dans feuille [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 99
    Points : 45
    Points
    45
    Par défaut Ouvrir fichier texte dans feuille
    Bonjour,
    Voici le petit problème que je rencontre.

    Je travaille sur un fichier "test.xslx"
    Je désire pouvoir ouvrir dans la feuille 2 (Feuil2) du fichier "test.xlsx" un fichier "toto.txt" .

    J'arrive a ouvrir ce fichier texte via un code vba, mais il ne s'ouvre pas dans "test.xslx" mais dans un fichier "toto.xslx" qui se crée automatiquement.

    J'espère avoir été clair.

    Merci d'avance.

  2. #2
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Points : 9 402
    Points
    9 402
    Par défaut
    Bonjour,

    Ne sachant quelle méthode tu as utiliser, ci joint un lien qui te reporte a l'une d'elle

    http://www.developpez.net/forums/d79...s-tableau-xls/

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 99
    Points : 45
    Points
    45
    Par défaut
    Voici mes deux fichiers, je vais tenter d'être plus clair.

    http://www.cijoint.fr/cjlink.php?fil...cijwNbG6Ai.txt
    http://www.cijoint.fr/cjlink.php?fil...ij5K1rIdF.xlsm

    le 1er d'entre eux est donc un .txt contenant des données de la forme :

    bd1swr01,sc0,52279328,673320584
    bd1swr01,7/21,123614356,793793353

    J'ai élaboré un macro vba permettant de séparer l'ensemble de la chaine à chaque ",".

    Ainsi voici le résultat obtenu :

    bd1swr01,sc0,52279328,673320584 => A1
    bd1swr01 => B1
    sc0 => C1
    52279328 => D1
    ect...
    bd1swr01,7/21,123614356,793793353 => A2
    bd1swr01 => B2
    7/21 => C2


    Les données (brut) à séparer se trouvent donc dans la colonne A.

    Pour tester ma macro j'ai moi même copier ces données dans la colonne.

    Mon souhait maintenant est donc de "venir copier" le contenu de mon fichier texte dans la colonne A afin de pouvoir le traiter.

  4. #4
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Points : 9 402
    Points
    9 402
    Par défaut
    Voila un code

    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
    Dim strChaine As String
    Dim strSplit() As String
    Dim i As Integer
    Dim lngLigne As Long
     
    Open "C:\now.txt" For Input As #1
     
    lngLigne = 1
     
    Do While Not EOF(1)
     
        Line Input #1, strChaine
        strSplit = Split(strChaine, ",")
     
        Cells(lngLigne, 1).Value = strChaine
     
        For i = 0 To UBound(strSplit)
            Cells(lngLigne, i + 2).Value = strSplit(i)
        Next i
     
        lngLigne = lngLigne + 1
     
    Loop
     
    Close #1

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 99
    Points : 45
    Points
    45
    Par défaut
    Tout d'abord merci de l'interet que tu portes à mes problèmes

    pour le code, c'est presque ca.

    le problème est que toutes les valeurs sont stockés dans la cellule A1, alors que je souhaite quelles soient en A1, A2, A3, ect....

    ex:

    bd1swr01,sc0,52279328,673320584 en A1
    bd1swr01,1/2,4123108213,3525804907 en A2
    bd1swr01,5/1,2627512914,953345304 en A3

    et après la séparation (avec les "," ) je sais la faire avec la fonction que j'ai réalisé. Il faut juste arriver a charger correctement ces valeurs dans la colonne A.


    je vais me pencher dessus et essayer de trouver une solution.

  6. #6
    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
    Le code proposé par jfontaine fait tout ce que tu demande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        strSplit = Split(strChaine, ",")
     
        Cells(lngLigne, 1).Value = strChaine  'Copie en A toute la ligne brute
     
        For i = 0 To UBound(strSplit)
            Cells(lngLigne, i + 2).Value = strSplit(i) 'copie dans les colonnes suivantes les données 'séparés par un ","
        Next i

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 99
    Points : 45
    Points
    45
    Par défaut
    C'est pas tout a fait cela encore, en effet le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     strSplit = Split(strChaine, ",")
     
        Cells(lngLigne, 1).Value = strChaine  'Copie en A toute la ligne brute
     
        For i = 0 To UBound(strSplit)
            Cells(lngLigne, i + 2).Value = strSplit(i) 'copie dans les colonnes suivantes les données 'séparés par un ","
        Next i
    copie toutes les lignes dans la cellule A1, et apres le traitement de
    séparation à toutes les "," déconne.

    cela donne cela comme résultat :
    A1 =
    bd1swr01,sc0,52279328,673320584
    bd1swr01,1/2,4123108213,3525804907
    bd1swr01,5/1,2627512914,953345304
    ...

    alors que je souhaite :
    A1 = bd1swr01,sc0,52279328,673320584 (qui est la 1er ligne du fichier txt)
    B1 = bd1swr01,1/2,4123108213,3525804907 (qui est la 2de ligne du fichier txt)
    C1 = bd1swr01,5/1,2627512914,953345304 (qui est la ligne du fichier txt)

    ensuite je me débrouille pour séparer en fonction des ",".

    Autre piste,
    comme je le précisé dans mon 1er post,
    quand je lance cette fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Workbooks.open Filename:=("toto.txt")
    cela me crée un fichier toto.xls dans lequel le fichier toto.txt est correctement "inséré" (chaque ligne est dans une cellule différente de la colonne A (A1,A2,A3...), exactement ce que je recherche)

    ma question est donc, n'est il pas possible de spécifier où ouvrir le fichier texte lors de la saisie de la commande Workbooks.Open... .
    dans ce cas, on désignerai la colonne A de la feuille 1 du fichier xls dans lequel j'exécute ma macro comme destination.

  8. #8
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Points : 9 402
    Points
    9 402
    Par défaut
    Le code que j'ai posté plus haut fonctionne parfaitement (dixit le fichier joint)

    Classeur2.xls

    ma question est donc, n'est il pas possible de spécifier où ouvrir le fichier texte lors de la saisie de la commande Workbooks.Open... .
    dans ce cas, on désignerai la colonne A de la feuille 1 du fichier xls dans lequel j'exécute ma macro comme destination.
    Non ce n'est pas possible avec l'instruction Workbook.Open

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 99
    Points : 45
    Points
    45
    Par défaut
    Voici le résultat chez moi :

    avec le fichier texte :
    http://www.cijoint.fr/cjlink.php?fil...cijAurwl1T.txt

    et donc le fichier xls avec la macro qui a été exécuté :

    http://www.cijoint.fr/cjlink.php?fil...cijaJy6ZW5.xls

    cela ne donne pas le même résultat que chez toi

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 288
    Points : 364
    Points
    364
    Par défaut Problème de retour ligne
    Je crois que le problème vient des retours ligne, codés en LF au lieu de CR-LF. Sans doute le fichier texte vient-il d'un système unix.
    Du coup la commande Line Input ne voit qu'une seule immense ligne.

    On pourrait y remédier en faisant un split de plus, sur le caractère LF. Je me suis permis de modifier ton code :

    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
    Dim strChaine As String
    Dim strSplit1() As String
    Dim strSplit2() As String
    Dim i As Integer
    Dim j As Long
    Dim lngLigne As Long
     
    Open "C:\now.txt" For Input As #1
     
    lngLigne = 1
     
    Do While Not EOF(1)
     
        Line Input #1, strChaine
     
        strSplit1 = Split(strChaine, Chr(10)) 'splite selon le retour ligne
     
        For j = 0 To UBound(strSplit1)
            Cells(lngLigne, 1).Value = strSplit1(j) 'remplit la colonne A
            strSplit2 = Split(strSplit1(j), ",") 'splite ensuite selon la virgule
     
            For i = 0 To UBound(strSplit2)
                Cells(lngLigne, i + 2).Value = strSplit2(i) 'remplit les autres colonnes
            Next i
     
            lngLigne = lngLigne + 1
        Next j
     
     
    Loop
     
    Close #1

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 99
    Points : 45
    Points
    45
    Par défaut
    Merci à tous !
    c'est parfait, exactement ce que je recherche !

    Petite question supplémentaire...

    Le code marche très bien. Je souhaiterai juste rajouté une ligne à la fin du code permettant de fermer le fichier texte qui à été ouvert.

    En effet cela pose un soucis lorsque j'exécute plusieurs fois le code à la suite.
    Un message d'erreur m'indique que le fichier est déjà ouvert. Et en effet sous Windows si excel tourne, je ne peux pas supprimer le fichier en question.

    Mon interrogation donc, est il possible de rajouter une ligne dans le même genre que celle qui ouvre le fichier (Open (cteRepertoire...)) mais pour le fermer !

    Merci d'avance.

  12. #12
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Points : 9 402
    Points
    9 402
    Par défaut
    Bonjour

    Pour Ouvrir le fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Open "C:\now.txt" For Input As #1
    Pour fermer le fichier
    vérifier si ton code passe bien par le close en mettant un point d'arret sur la ligne

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 99
    Points : 45
    Points
    45
    Par défaut
    Parfait !
    Merci bien !

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

Discussions similaires

  1. Ouvrir fichier texte dans jtable
    Par kyryan dans le forum Composants
    Réponses: 1
    Dernier message: 12/02/2014, 09h26
  2. ouvrir fichier txt dans feuille excel
    Par Timber_Kennedy dans le forum Excel
    Réponses: 4
    Dernier message: 14/06/2012, 19h02
  3. [XL-2007] Ouvrir fichiers texte dans un même classeur
    Par Kermichou dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/09/2010, 21h14
  4. [C# 2.0] Ouvrir fichier texte dans editeur par défaut
    Par lenoil dans le forum Windows Forms
    Réponses: 4
    Dernier message: 13/11/2007, 17h19
  5. [FB 1.5] ouvrir fichier texte dans une ps
    Par jlf dans le forum Débuter
    Réponses: 4
    Dernier message: 16/02/2005, 21h29

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