Problème Fichier ".csv"

Résolu
Signaler
Messages postés
11
Date d'inscription
vendredi 15 février 2008
Statut
Membre
Dernière intervention
29 avril 2008
-
Messages postés
11
Date d'inscription
vendredi 15 février 2008
Statut
Membre
Dernière intervention
29 avril 2008
-
Bonjour,



<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
 




Je ne suis pas un pro du VB6 (loin de là) mais pour m’amuser j’essaie de développer un petit programme de stats sur les tirages du Loto.


Rien de bien compliqué a priori (erreur…). Il suffit de télécharger le fichier « loto.csv » auprès du site de la Française des jeux, de le lire (ou le charger dans un tableau) quelques boucles et quelques compteurs et le tour est joué.


Il s’agit d’un fichier de 30 colonnes sur 4745 lignes (+ 4 chaque semaine) et lorsqu’on l’ouvre avec le bloc-note il est  avec séparateur « ; »


Le problème commence dès la lecture du fichier loto.csv.


Le code ci-dessous me renvoie deux résultats différents.


En effet, si j’ouvre le fichier « loto.csv » à partir d’Excel et que je l’enregistre sous « .csv » séparateur « ; ». Le programme fonctionne correctement, la variable UBound(TabChamps) me renvoie bien 29 (de 0 à 29) et je récupère normalement tous les champs.


Par contre si je lance ce code avec le fichier tel qu’il est issu du téléchargement, la variable UBound(TabChamps) me renvoie 142350 (30 col x 2745 lignes) et je ne peux pas lire le fichier.




 


Quelqu’un aurait-il une solution, une idée pour que je puisse lire le fichier sans avoir à le réenregistrer sous Excel au préalable, ce qui est peu pratique.



 




Merci d’avance pour votre aide



 










Private Sub Command1_Click()


Dim TabChamps() As String, enreg As String, ligne As String



 




On Error GoTo erreur


compteur = 1



'**





Open "loto.csv" For Input As #1




Do While Not EOF(1)


Line Input #1, enreg                 'lecture d'une ligne dans la variable "Enreg"


compteur = compteur + 1         'Incrément du compteur d'enregistrement


TabChamps() = Split(enreg, ";") 'Nbre de rubriques de l'enregistrement, la ligne est découpée


If compteur > 1 Then            'On traite à partir de la 2e ligne


'**


temp(1) TabChamps(5): temp(2) TabChamps(6): temp(3) = TabChamps(7)


temp(4) TabChamps(8): temp(5) TabChamps(9): temp(6) = TabChamps(10)


'**


‘Print UBound(TabChamps)


List1.AddItem temp(1) '& vbTab & temp(2) & vbTab & temp(3) & vbTab & temp(4) & vbTab & temp(5) & vbTab & temp(6)



End If  'compteur





<?xml:namespace prefix st1 ns "urn:schemas-microsoft-com:office:smarttags" /??>
<st1:place w:st="on">
Loop
</st1:place>








Close #1






 





erreur:



        Select Case Err.Number



        Case 53:       MsgBox "Le fichier est introuvable"



       
Case Else: MsgBox "Erreur numéro " & Err.Number & "  " & Err.Description






        End Select





End Sub

4 réponses

Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
Le problème viens du fait, je pense, du séparateur de ligne.

Ton instruction Line Input attent comme séparateur de ligne, le caractère CR, ou le couple de caractère CR+LF.
Hors le fichier a comme séparateur de ligne le caractère LF, ce qui fait que Line Input ne reconnais pas les différentes lignes.

Ce que tu peut faire, c'est faire une première lecture de la totalité du fichier dans une string. Ensuite tu découpe ta string dans un tableau avec comme séparateur le caractère LF (constante vbLF en vb6).

Ensuite tu fais sur chaque ligne du tableau obtenu, le traitement que tu voulais faire sur chacune des lignes du fichier

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
Salut
En complément : "c'est faire une première lecture de la totalité du fichier dans une string" : C'est déjà ce que tu fais avec le premier "Line Input" : Puisque le séparateur n'est pas reconnu, il charge tout le fichier

+ Il faut que tu détermine quel est le symbole utilisé pour la séparation de ligne, surement vbLf seul, oui
+ Méthode rapide de séparation des lignes : un Split sur vbLf

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
11
Date d'inscription
vendredi 15 février 2008
Statut
Membre
Dernière intervention
29 avril 2008

Merci pour votre aide

a priori ça marche avec nouveau split sur chaque ligne (Tabchamps) et séparateur ";"

A bientôt
Messages postés
11
Date d'inscription
vendredi 15 février 2008
Statut
Membre
Dernière intervention
29 avril 2008

Merci pour vos réponses

En effet, TabChamps() = Split(enreg, Vblf)  me donne bien le nombre de lignes
et Tabchamps(1) est bien la première ligne.

Mais mainteant si je peux lire les lignes je n'arrive pas à décomposer chaque champs.