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 :

Extraire que certaines données d'un fichier csv [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 28
    Points : 17
    Points
    17
    Par défaut Extraire que certaines données d'un fichier csv
    Bonjour,

    J'ai commencé un peu le travail, le code tourne mais ne réalise pas ce que je veux. La macro à pour but d'extraire des données contenues dans un fichier csv et de les copier sur une feuille de mon classeur appelée "reception_donnees". Je n'arrive pas à "coller" les données receuillies à partir du fichier csv sur ma feuille "reception_donnees" et pourtant ma fonction s'exécute sans problème.
    Si quelqu'un peut me dire comment puis-je récupérer les données que je parcours ça serais bien sympas.

    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
     
    Public Sub LireCSV(ByVal Chemin As String, col1 As Integer, col2 As Integer, col3 As Integer, col4 As Integer, col5 As Integer)
    Dim Chaine As String
    Dim Ar() As String
    Dim i As Long
    Dim iRow As Long, iCol As Long
    Dim NumFichier As Integer
    Dim Separateur As String * 1
     
        Sheets("reception_donnees" ).Activate
        Separateur = ";"
        Cells.Clear
        Application.ScreenUpdating = False
        NumFichier = FreeFile
     
        iRow = 0
        Open Chemin For Input As #NumFichier
        Do While Not EOF(NumFichier)
            iCol = 1
            iRow = iRow + 1
            Line Input #NumFichier, Chaine
            Ar = Split(Chaine, Separateur)
     
           For i = LBound(Ar) To UBound(Ar)
               If (i = col1 Or i = col2 Or i = col3 Or i = col4 Or i = col5) Then
                 Cells(iRow, iCol) = Ar(i)
                  iCol = iCol + 1
               End If
            Next i
     
        Loop
        Close #NumFichier
        Application.ScreenUpdating = True
        MsgBox "Le fichier à bien été importé !", vbInformation, "Importation de données"
     
    End Sub

  2. #2
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    tes variables col 1, col 2, col 3,... sont égale a quoi? a mon avis tu ne les initialise pas et elles valent 0

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 28
    Points : 17
    Points
    17
    Par défaut
    J'utilise cette fonction 2 fois, une fois avec
    col 1 => 0
    col 2 => 1
    col 3 => 2
    col 4 => 37
    col 5 => 43

    et une autre fois avec
    col 1 => 0
    col 2 => 1
    col 3 => 25
    col 4 => 32

    La fonction est ammenée comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Private Sub cmdImporter_Click()
        If fichierImporter <> "" Then
            LireCSV fichierImporter, 0, 1, 2, 37, 43
            parcoursDonnees
            Me.Hide
        Else
            MsgBox "Vous devez sélectionner un fichier pour pouvoir l'importer !", vbExclamation, "Erreur de fichier"
        End If
    End Sub

  4. #4
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    au temps pour moi pour les col. J'ai survolé un peu vite ton prog je n'avais pas vu que c'était les argument de ta fonction, désolé

    et si tu met un espion dans ta boucle if il y passe?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 28
    Points : 17
    Points
    17
    Par défaut
    Si tu me dis comment faire oui ^^, car je suis novice en prog et un espion je sais pas du tout ce que c'est. Je peux t'envoyer le fichier si t'a un peu de temps pour résoudre le prob. Je pense pas que se soit grand chose mais j'arrive pas à trouver ce qui peut clocher sa fait 3j que je suis dessus^^

  6. #6
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Regarde ce tuto

    Il explique comment mettre un point d'arret
    tu peux aussi utiliser la touche F8 pour avancer ligne par ligne (mode pas à pas)

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 28
    Points : 17
    Points
    17
    Par défaut
    J'ai bien cette boucle qui va tourner en rond mais je ne sais pas si ça viens de là.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    For i = LBound(Ar) To UBound(Ar)
               If (i = col1 Or i = col2 Or i = col3 Or i = col4 Or i = col5) Then
                 Cells(iRow, iCol) = Ar(i)
                  iCol = iCol + 1
               End If
            Next i

  8. #8
    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
    Bonjour,
    j'ai testé vite fait, ton code marche chez moi Fouinette85, je ne trouve pas de problème de conception.

    Il faudrait tester avec tes fichiers csv et xls, tu dois pouvoir les attacher si c'est pas confidentiel, mais je sais plus comment on fait ça

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 28
    Points : 17
    Points
    17
    Par défaut
    Voici un lien pour le fichier excel
    http://download.yousendit.com/WnBSQndKYUlRYTlMWEE9PQ

    et celui pour un fichier csv
    http://www.yousendit.com/download/dV...Nnl3TGpIRGc9PQ

    c'est un fichier d'entrée de stock celui-ci

  10. #10
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Bonjour,
    je ne vois pas vraiment où cette boucle tournerait en rond, quoique, l'utilisation du type LONG pour le i me parait indiquée, ce qui n'est pas le cas de COL1, Col2 .... qui sont des Integers, donc limités.

    Passe donc tes col* en Long et regarde si le problème persiste.

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 28
    Points : 17
    Points
    17
    Par défaut
    Je viens de tester les colonnes en Long ça ne change rien
    Merci du coup de main quand même, on va y'arriver à bout de cette fonction une fois qu'on aura tout tester^^

  12. #12
    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
    Je pense que c'est dû aux fins de ligne.
    Ton fichier csv a des fins de ligne "LF", et Line input ne fonctionne qu'avec "CR" ou "CR-LF".
    Du coup il prend tout le fichier comme une seule grande ligne.

    Tiré de l'aide :
    L'instruction Line Input # lit un à un les caractères d'un fichier jusqu'au premier retour chariot (Chr(13)) ou retour chariot – saut de ligne (Chr(13) + Chr(10)) rencontré.
    Donc soit tu peux extraire ton fichier csv au format windows, soit il faut trouver un moyen de transformer ces LF (chr(10)) en CR-LF.

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 28
    Points : 17
    Points
    17
    Par défaut
    Lorsque j'ouvre mon fichier CSV sous Excel il n'y a pas de soucis j'ai bien un tableau avec toutes mes lignes et colonnes.

    Il faudrais donc que j'ouvre mon fichier avant d'extraire mes données alors ?
    J'avais commencé comme ça, en ouvrant le fichier, le copier entièrement sur ma feuille "reception_donnees" puis en supprimant les colonnes inutiles. Mais j'aurais préféré supprimer cette étape car vu l'ampleur que peut prendre le fichier CSV sa peut demander un peu de temps.

    Si tu peux m'expliquer comment mettre en place ta deuxième solution je voudrais bien la tester voir si c'est pas plus rapide.

    Merci beaucoup en tout cas

    PS : Je suis toujours novice en prog alors simple voir très simple les explications ^^

  14. #14
    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
    Il existe des utilitaires pour transformer les fins de ligne au format voulu, dans ton cas un programme tel que Unix2win conviendrait sans doute (je l'ai jamais essayé, mais ce doit pas être bien compliqué).
    Les inconvénients :
    - les fins de ligne de ton fichier csv sont définitivement modifiées, il ne faudrait pas que ça gêne d'autres applis/macros qui l'utiliseraient (peu probable cependant).
    - ça oblige l'utilisateur de la macro à lancer au préalable ce programme.

    Sinon il y a effectivement la solution que tu as évoquée, à savoir ouvrir au préalable le csv dans une feuille excel. Je ne pense pas que ce soit si long que ça si tu penses à modifier dans ta macro quelques paramètres du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     Application.ScreenUpdating = False
      Application.DisplayAlerts = False
      Application.Interactive = False
      Application.Calculation = xlCalculationManual
     
    '.... tes traitements sur le csv et les colonnes
     
      Application.ScreenUpdating = True
      Application.DisplayAlerts = True
      Application.Interactive = True
      Application.Calculation = xlCalculationAutomatic
    Enfin il y aurait bien moyen de pondre un code VBA qui transformerait dans la macro les LF en CR-LF, mais là pour le coup je pense franchement que ce serait plus long.

    D'autres membres du forum auront peut-être des solutions plus simples ?

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 28
    Points : 17
    Points
    17
    Par défaut
    Merci, je vais réessayer l'ouverture du fichier avec le code que tu ma donné en préalable voir si la durée de traitement des infos est raisonnable, en attendant d'autres propositions.
    Retour 2 semaines en arrière mais bon l'essentiel est que ça fonctionne.

    L'ouverture d'un autre logiciel pour transformer le fichier CSV n'est pas concevable car le fichier est utilisé en comptabilité. Il est déja nécessaire d'extraire les fichiers CSV à partir d'un site internet et c'est déja la grosse mission.

  16. #16
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Bonjour,

    quelle est la forme de ton fichier csv ?
    montre-nous quelques lignes (si plusieurs lignes) ou un bout (si une seule ligne) de ce fichier (par copier-coller)

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 28
    Points : 17
    Points
    17
    Par défaut
    Aussitôt dit, aussitôt fait
    Attention les yeux, vous l'aurez voulu ^^

    Numero de proposition;Date de proposition;Date de livraison;Etat;Type de livraison;Condition de port;Nombre de colis;EAN Commandee Par;Code pays;Pays;Code postal;Ville;Nom;Adresse 1;Adresse 2;Boite postale;EAN Commandee a;Code Interne Commandee a;Variante code interne Commandee a;Code pays;Pays;Code postal;Ville;Nom;Adresse 1;Adresse 2;Boite postale;EAN Livrer a;Code service Livrer a;Code pays;Pays;Code postal;Ville;Nom;Adresse 1;Adresse 2;Boite postale;Code interne produit;Variante interne UA;EAN de cmde;FBA produit;Designation;Conditionnement;Quantite proposee;Unite de mesure;Quantite ULF commandee;Type ULF;EAN ULF;
    00003877839;06/03/09;26/03/09;LUE;Livraison entrepôt sur stock;1;;3020113579108;FR;FRANCE;35290;GAEL;GAEL ENTREPOT PRIMAIRE REGIONAL;;PARC ACTIVITE LE CHENE;;;050047;00002;FR;FRANCE;85800;ST GILLES CROIX DE VIE;GENDREAU;;84 ROUTE DES SABLES;BP 543;3020113579108;35791;FR;FRANCE;35290;GAEL;GAEL ENTREPOT PRIMAIRE REGIONAL;;PARC ACTIVITE LE CHENE;;758884;013;3222472376156;5302530;OT LAPIN 2 MOUT+RIZ 300GCASINO;10;27720;L'UC/PIECE;2772;CARTON MANIPULABLE;13222472376153;

    Je me suis arretée à une fin de ligne et ce n'est que le début ^^

  18. #18
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Il n'y a donc apparemment qu'une seule ligne ...

    Si tel est bien le cas, ton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Do While Not EOF(NumFichier)
            iCol = 1
            iRow = iRow + 1
            Line Input #NumFichier, Chaine
            Ar = Split(Chaine, Separateur)
    n'a pas de raison d'être !
    Mais tu nous dis :
    Je me suis arretée à une fin de ligne et ce n'est que le début ^^
    qui laisse encore un doute sur la réponse que je te demandais ainsi :
    montre-nous quelques lignes (si plusieurs lignes) ou un bout (si une seule ligne)
    !!!
    Ton fichier contient-il ou non plusieurs lignes "réelles" ? (j(entends par lignes réelles celles qui sont séparées par un véritablke retour à la ligne (non simplement un "retour apparent" dû à l'affichage par le bloc-notes ...)
    C'est cette réponse très précise qui conduira à la solution précise !

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 28
    Points : 17
    Points
    17
    Par défaut
    Voici donc quelques lignes du fichier CSV ouvert en .txt

    Numero de proposition;Date de proposition;Date de livraison;Etat;Type de livraison;Condition de port;Nombre de colis;EAN Commandee Par;Code pays;Pays;Code postal;Ville;Nom;Adresse 1;Adresse 2;Boite postale;EAN Commandee a;Code Interne Commandee a;Variante code interne Commandee a;Code pays;Pays;Code postal;Ville;Nom;Adresse 1;Adresse 2;Boite postale;EAN Livrer a;Code service Livrer a;Code pays;Pays;Code postal;Ville;Nom;Adresse 1;Adresse 2;Boite postale;Code interne produit;Variante interne UA;EAN de cmde;FBA produit;Designation;Conditionnement;Quantite proposee;Unite de mesure;Quantite ULF commandee;Type ULF;EAN ULF;
    00003877839;06/03/09;26/03/09;LUE;Livraison entrepôt sur stock;1;;3020113579108;FR;FRANCE;35290;GAEL;GAEL ENTREPOT PRIMAIRE REGIONAL;;PARC ACTIVITE LE CHENE;;;050047;00002;FR;FRANCE;85800;ST GILLES CROIX DE VIE;GENDREAU;;84 ROUTE DES SABLES;BP 543;3020113579108;35791;FR;FRANCE;35290;GAEL;GAEL ENTREPOT PRIMAIRE REGIONAL;;PARC ACTIVITE LE CHENE;;758884;013;3222472376156;5302530;OT LAPIN 2 MOUT+RIZ 300GCASINO;10;27720;L'UC/PIECE;2772;CARTON MANIPULABLE;13222472376153;
    00003877838;06/03/09;25/03/09;LUE;Livraison entrepôt sur stock;1;;3020113579108;FR;FRANCE;35290;GAEL;GAEL ENTREPOT PRIMAIRE REGIONAL;;PARC ACTIVITE LE CHENE;;;050047;00002;FR;FRANCE;85800;ST GILLES CROIX DE VIE;GENDREAU;;84 ROUTE DES SABLES;BP 543;3020113579108;35791;FR;FRANCE;35290;GAEL;GAEL ENTREPOT PRIMAIRE REGIONAL;;PARC ACTIVITE LE CHENE;;758879;009;3222472376149;5302510;OT SAUTE D AGNEAU/FLAGEOL 300G CASI;11;22176;L'UC/PIECE;2016;CARTON MANIPULABLE;13222472376146;
    00003877838;06/03/09;25/03/09;LUE;Livraison entrepôt sur stock;1;;3020113579108;FR;FRANCE;35290;GAEL;GAEL ENTREPOT PRIMAIRE REGIONAL;;PARC ACTIVITE LE CHENE;;;050047;00002;FR;FRANCE;85800;ST GILLES CROIX DE VIE;GENDREAU;;84 ROUTE DES SABLES;BP 543;3020113579108;35791;FR;FRANCE;35290;GAEL;GAEL ENTREPOT PRIMAIRE REGIONAL;;PARC ACTIVITE LE CHENE;;758884;013;3222472376156;5302530;OT LAPIN 2 MOUT+RIZ 300GCASINO;10;7560;L'UC/PIECE;756;CARTON MANIPULABLE;13222472376153;
    00003877837;06/03/09;23/03/09;LUE;Livraison entrepôt sur stock;1;;3020113579108;FR;FRANCE;35290;GAEL;GAEL ENTREPOT PRIMAIRE REGIONAL;;PARC ACTIVITE LE CHENE;;;050047;00002;FR;FRANCE;85800;ST GILLES CROIX DE VIE;GENDREAU;;84 ROUTE DES SABLES;BP 543;3020113579108;35791;FR;FRANCE;35290;GAEL;GAEL ENTREPOT PRIMAIRE REGIONAL;;PARC ACTIVITE LE CHENE;;241639;011;3222471341124;1579850;AM MAQUEREAU MUSC.9 AROM.176G CO;10;3960;L'UC/PIECE;396;CARTON MANIPULABLE;13188720211242;
    00003877837;06/03/09;23/03/09;LUE;Livraison entrepôt sur stock;1;;3020113579108;FR;FRANCE;35290;GAEL;GAEL ENTREPOT PRIMAIRE REGIONAL;;PARC ACTIVITE LE CHENE;;;050047;00002;FR;FRANCE;85800;ST GILLES CROIX DE VIE;GENDREAU;;84 ROUTE DES SABLES;BP 543;3020113579108;35791;FR;FRANCE;35290;GAEL;GAEL ENTREPOT PRIMAIRE REGIONAL;;PARC ACTIVITE LE CHENE;;548354;002;3222472948469;0892370;LASAGNE BOLOGNAISE 350G CO;11;1848;L'UC/PIECE;168;CARTON MANIPULABLE;13222472948466;
    00003877837;06/03/09;23/03/09;LUE;Livraison entrepôt sur stock;1;;3020113579108;FR;FRANCE;35290;GAEL;GAEL ENTREPOT PRIMAIRE REGIONAL;;PARC ACTIVITE LE CHENE;;;050047;00002;FR;FRANCE;85800;ST GILLES CROIX DE VIE;GENDREAU;;84 ROUTE DES SABLES;BP 543;3020113579108;35791;FR;FRANCE;35290;GAEL;GAEL ENTREPOT PRIMAIRE REGIONAL;;PARC ACTIVITE LE CHENE;;758879;007;3222472376149;4650210;SAUTE D AGNEAU/FLAGEOL 300G CASINO;11;1848;L'UC/PIECE;168;CARTON MANIPULABLE;13222472376146;
    00003877837;06/03/09;23/03/09;LUE;Livraison entrepôt sur stock;1;;3020113579108;FR;FRANCE;35290;GAEL;GAEL ENTREPOT PRIMAIRE REGIONAL;;PARC ACTIVITE LE CHENE;;;050047;00002;FR;FRANCE;85800;ST GILLES CROIX DE VIE;GENDREAU;;84 ROUTE DES SABLES;BP 543;3020113579108;35791;FR;FRANCE;35290;GAEL;GAEL ENTREPOT PRIMAIRE REGIONAL;;PARC ACTIVITE LE CHENE;;758884;011;3222472376156;4650540;LAPIN 2 MOUT+RIZ 300GCASINO;10;15960;L'UC/PIECE;1596;CARTON MANIPULABLE;13222472376153;
    00003877837;06/03/09;23/03/09;LUE;Livraison entrepôt sur stock;1;;3020113579108;FR;FRANCE;35290;GAEL;GAEL ENTREPOT PRIMAIRE REGIONAL;;PARC ACTIVITE LE CHENE;;;050047;00002;FR;FRANCE;85800;ST GILLES CROIX DE VIE;GENDREAU;;84 ROUTE DES SABLES;BP 543;3020113579108;35791;FR;FRANCE;35290;GAEL;GAEL ENTREPOT PRIMAIRE REGIONAL;;PARC ACTIVITE LE CHENE;;758896;004;3222472376163;0422820;THON SCE TOMATE PENNE 300G CO;10;840;L'UC/PIECE;84;CARTON MANIPULABLE;13222472376160;
    00003877837;06/03/09;23/03/09;LUE;Livraison entrepôt sur stock;1;;3020113579108;FR;FRANCE;35290;GAEL;GAEL ENTREPOT PRIMAIRE REGIONAL;;PARC ACTIVITE LE CHENE;;;050047;00002;FR;FRANCE;85800;ST GILLES CROIX DE VIE;GENDREAU;;84 ROUTE DES SABLES;BP 543;3020113579108;35791;FR;FRANCE;35290;GAEL;GAEL ENTREPOT PRIMAIRE REGIONAL;;PARC ACTIVITE LE CHENE;;758900;005;3222472376187;2091490;SAUMON OSEILLE PATES 300G CO;10;840;L'UC/PIECE;84;CARTON MANIPULABLE;13222472376184;
    00003877837;06/03/09;23/03/09;LUE;Livraison entrepôt sur stock;1;;3020113579108;FR;FRANCE;35290;GAEL;GAEL ENTREPOT PRIMAIRE REGIONAL;;PARC ACTIVITE LE CHENE;;;050047;00002;FR;FRANCE;85800;ST GILLES CROIX DE VIE;GENDREAU;;84 ROUTE DES SABLES;BP 543;3020113579108;35791;FR;FRANCE;35290;GAEL;GAEL ENTREPOT PRIMAIRE REGIONAL;;PARC ACTIVITE LE CHENE;;758906;006;3222472376194;0422830;MERLU RATATOUILLE 300G CASINO;10;2520;L'UC/PIECE;252;CARTON MANIPULABLE;13222472376191;
    00003877837;06/03/09;23/03/09;LUE;Livraison entrepôt sur stock;1;;3020113579108;FR;FRANCE;35290;GAEL;GAEL ENTREPOT PRIMAIRE REGIONAL;;PARC ACTIVITE LE CHENE;;;050047;00002;FR;FRANCE;85800;ST GILLES CROIX DE VIE;GENDREAU;;84 ROUTE DES SABLES;BP 543;3020113579108;35791;FR;FRANCE;35290;GAEL;GAEL ENTREPOT PRIMAIRE REGIONAL;;PARC ACTIVITE LE CHENE;;930164;000;3222473272105;5490440;HACHIS PARMENTIER 300G CO;11;1848;L'UC/PIECE;168;CARTON MANIPULABLE;13222473272102;
    00003877837;06/03/09;23/03/09;LUE;Livraison entrepôt sur stock;1;;3020113579108;FR;FRANCE;35290;GAEL;GAEL ENTREPOT PRIMAIRE REGIONAL;;PARC ACTIVITE LE CHENE;;;050047;00002;FR;FRANCE;85800;ST GILLES CROIX DE VIE;GENDREAU;;84 ROUTE DES SABLES;BP 543;3020113579108;35791;FR;FRANCE;35290;GAEL;GAEL ENTREPOT PRIMAIRE REGIONAL;;PARC ACTIVITE LE CHENE;;933607;000;3222473275632;5495580;POULET QUINOA 300G CO ONDILEGE;10;1680;L'UC/PIECE;168;CARTON MANIPULABLE;13222473275639;
    00003872837;03/03/09;18/03/09;LUE;Livraison entrepôt sur stock;1;;3020113579108;FR;FRANCE;35290;GAEL;GAEL ENTREPOT PRIMAIRE REGIONAL;;PARC ACTIVITE LE CHENE;;;050047;00002;FR;FRANCE;85800;ST GILLES CROIX DE VIE;GENDREAU;;84 ROUTE DES SABLES;BP 543;3020113579108;35791;FR;FRANCE;35290;GAEL;GAEL ENTREPOT PRIMAIRE REGIONAL;;PARC ACTIVITE LE CHENE;;241639;011;3222471341124;1579850;AM MAQUEREAU MUSC.9 AROM.176G CO;10;7920;L'UC/PIECE;792;CARTON MANIPULABLE;13188720211242;
    00003872837;03/03/09;18/03/09;LUE;Livraison entrepôt sur stock;1;;3020113579108;FR;FRANCE;35290;GAEL;GAEL ENTREPOT PRIMAIRE REGIONAL;;PARC ACTIVITE LE CHENE;;;050047;00002;FR;FRANCE;85800;ST GILLES CROIX DE VIE;GENDREAU;;84 ROUTE DES SABLES;BP 543;3020113579108;35791;FR;FRANCE;35290;GAEL;GAEL ENTREPOT PRIMAIRE REGIONAL;;PARC ACTIVITE LE CHENE;;548354;002;3222472948469;0892370;LASAGNE BOLOGNAISE 350G CO;11;7392;L'UC/PIECE;672;CARTON MANIPULABLE;13222472948466;

    Il peut y avoir entre 20 et 150 lignes par fichier

    Exemple.txt

  20. #20
    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
    Bon il m'est venu une idée pour traiter les retours ligne LF : quand il n'y a que des LF en fin de ligne, comme dans ton cas, la première passe Line Input ramène tout le fichier d'un coup. Dans ce cas, on peut faire un premier split avec comme séparateur le caractère LF, code chr(10), pour le mettre dans un premier tableau. Ce tableau ressemble alors au fichier csv tel qu'il devrait être au format windows : chaque 'cellule' de ce tableau correspond à une ligne du fichier csv.
    Du coup on applique ton traitement non plus au fichier mais au tableau.
    J'ai laissé ton ancien code dans la clause ELSE du IF que j'ai rajouté, bien qu'il y ait des chances qu'il ne serve à rien (enfin on sait jamais, si un jour le csv se retrouve au format windows ^_^ )

    En rouge mes modifs :


    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
    Public Sub LireCSV(ByVal Chemin As String, col1 As Integer, col2 As Integer, col3 As Integer, col4 As Integer, col5 As Integer)
    Dim Chaine As String, Chaine2 As String
    Dim Ar() As String
    Dim tab1() As String
    Dim i As Long, j As Long
    Dim iRow As Long, iCol As Long
    Dim NumFichier As Integer
    Dim Separateur As String * 1
    
    col1 = 0
    col2 = 1
    col3 = 2
    col4 = 37
    col5 = 43
    
        Sheets("reception_donnees").Activate
        Separateur = ";"
        Cells.Clear
        Application.ScreenUpdating = False
        NumFichier = FreeFile
      
        iRow = 0
        Open Chemin For Input As #NumFichier
        Do While Not EOF(NumFichier)
            iCol = 1
            iRow = iRow + 1
            Line Input #NumFichier, Chaine
            
            If InStr(1, Chaine, Chr(10)) > 0 Then 'si les retours ligne sont au format unix (LF seul)
            'dans ce cas, la variable Chaine contient tout le fichier dès la première passe
                tab1 = Split(Chaine, Chr(10))
                For j = LBound(tab1) To UBound(tab1)
                
                    iCol = 1
                    iRow = iRow + 1
    
                    Chaine2 = tab1(j)
                    
                    Ar = Split(Chaine2, Separateur)
                    
                    For i = LBound(Ar) To UBound(Ar)
                        If (i = col1 Or i = col2 Or i = col3 Or i = col4 Or i = col5) Then
                          Cells(iRow, iCol) = Ar(i)
                           iCol = iCol + 1
                        End If
                    Next i
                    
                Next j
            Else 'si les retours ligne sont au format windows (CR LF), code d'origine            Ar = Split(Chaine, Separateur)
                
                For i = LBound(Ar) To UBound(Ar)
                    If (i = col1 Or i = col2 Or i = col3 Or i = col4 Or i = col5) Then
                      Cells(iRow, iCol) = Ar(i)
                       iCol = iCol + 1
                    End If
                Next i
            End If
            
        Loop
        Close #NumFichier
        Application.ScreenUpdating = True
        
        MsgBox "Le fichier à bien été importé !", vbInformation, "Importation de données"
      
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 6
    Dernier message: 18/05/2015, 11h57
  2. Besoin d'aide pour n'extraire que certaines données
    Par Jean-Marc68 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/02/2008, 18h53
  3. Réponses: 3
    Dernier message: 26/04/2006, 12h52
  4. Réponses: 1
    Dernier message: 06/02/2006, 14h53
  5. extraire certaines données d'un fichier texte
    Par davz88 dans le forum C++
    Réponses: 11
    Dernier message: 26/03/2005, 14h00

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