Pb d'ouverture de fichier de temps en temps

cs_baz187rem Messages postés 78 Date d'inscription vendredi 23 mars 2007 Statut Membre Dernière intervention 21 juin 2010 - 29 mai 2008 à 09:01
cs_baz187rem Messages postés 78 Date d'inscription vendredi 23 mars 2007 Statut Membre Dernière intervention 21 juin 2010 - 30 mai 2008 à 07:53
Bonjour a tous !!

 Je me retrouve aujourd'hui dans une situation un peu compliqué que je n'arrive pas a expliquer et a résoudre.
 J'ai différent fichiers texte qui ont la meme structure mais pas forcément le meme nombre de ligne. Ce que je ne comprend pas c'est lorsque j'ouvre un fichier ou un autre, un va fonctionner l'autre va me renvoyer une erreur 52 "Bad file name or number".

J'ai regarder la valeur du freefile a l'ouverture et il a 1 donc un seul fichier d'ouvert et en plus il n'est pas déjà ouvert par ailleur.

Qu'arrive t il sachant qu'un autre va très bien se comporter alors qu'il y a moins de lignes dans le fichier... Quelqu'un peut m'aider ?

Je met un bout de code :

 Public Sub FiltrageFichier(chemin As String)
    Dim LectureLigne As String
    Dim mCol As New Collection
    Dim FileNumber As Integer
   
    FileNumber = FreeFile
    Dim oldCompteSlots As Integer
    Dim nbpasse As Integer
    Open chemin For Input As #FileNumber
        oldCompteSlots = CptSlots
        nbpasse = 1
        While Not EOF(FileNumber)
            Input #FileNumber, LectureLigne


            If Mid(Trim(LectureLigne), 1, 5) = "Wafer" Then
                If nbpasse = 1 Then
                    Input #FileNumber, LectureLigne
                    Input #FileNumber, LectureLigne
                    While InStr(1, LectureLigne, "Aver.") = 0
                       
                        If LectureLigne <> "" And Mid(LectureLigne, 1, 1) <> "(" Then
                            If CptSlots > 24 Then
                                RAZFeuille "MODELS"
                                Close #FileNumber
                                MsgBox "La somme des slots des fichiers a traiter est supérieur à 25.", vbCritical, "Erreur"
                                End
                            End If
                            Set mCol = DecomposeLigne(LectureLigne)
                            With TabSlots(CptSlots)
                                .Num = Trim(mCol.Item(2))
                                .M = Trim(mCol.Item(3))
                                .D = Trim(mCol.Item(4))
                                .RR = Trim(mCol.Item(5))
                                .OR = Trim(mCol.Item(6))
                                .Tx = Trim(mCol.Item(7))
                                .Ty = Trim(mCol.Item(8))
                            End With
                            CptSlots = CptSlots + 1
                        End If
                        Input #FileNumber, LectureLigne
                    Wend
                    nbpasse = nbpasse + 1
                 ElseIf nbpasse = 2 Then
                   
                    Input #FileNumber, LectureLigne
                    Input #FileNumber, LectureLigne
                    While InStr(1, LectureLigne, "Aver.") = 0
           
                       
                        If LectureLigne <> "" And Mid(LectureLigne, 1, 1) <> "(" Then
                            Set mCol = DecomposeLigne(LectureLigne)
                            With TabSlots(oldCompteSlots)
                                .SX = Trim(mCol.Item(3))
                                .SY = Trim(mCol.Item(4))
                                .RW = Trim(mCol.Item(5))
                                .OW = Trim(mCol.Item(6))
                                .TX = Trim(mCol.Item(7))
                                .TY = Trim(mCol.Item(8))
                                .Enspec = CompareSpec(.TranswX, Txt_TranslationSpec)
                                If .Enspec = True Then
                                    .Enspec = CompareSpec(.TranswY, Txt_TranslationSpec)
                                End If
                            End With
                            oldCompteSlots = oldCompteSlots + 1
                        End If
                        Input #FileNumber, LectureLigne
                    Wend
                    nbpasse = nbpasse + 1
                Else
                    Close #FileNumber
                End If
               
            End If
    Wend
    Close #FileNumber


End Sub

Ps : Y'a pas une facon pour colorer le texte facon VB ca serait plus lisible pour vous ....

7 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
29 mai 2008 à 09:27
possible, peut etre de lire tout le fichier d'un coup, serait plus efficace (plus rapide)

pour ton PS:
http://www.vbfrance.com/code.aspx?ID=41455
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
29 mai 2008 à 11:25
Salut
Sur quelle ligne as-tu cette erreur ?
Tu fais une boucle de lecture While-Wend (nota : While-Wend est obsolète, utiliser de préférence Do While-Loop).
Mais tu fais plusieurs Input à l'intérieur : pas bon :
Supposons que le premier Input après le While soit la dernière ligne du fichier, si tu en fais un autre derrière (*), il y aura erreur, mais pas celle dont tu parles.
(*) d'autant que tu peux en faire un paquet puisque du refais des Input dans une autre boucle à l'intérieur !
La suggestion de RenField est surement la solution.

Dis nous sur quelle ligne tu as l'erreur, cela va éclairer le problème.

Attention aussi :
Input ne lit qu'une variable de la ligne, pas la ligne entière. Si tu as une virgule dans la ligne, la lecture sera incomplète et pourra perturber le prochain Input
--> Voir Line Input
Tout dépend de la structure de ton fichier

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)
0
cs_baz187rem Messages postés 78 Date d'inscription vendredi 23 mars 2007 Statut Membre Dernière intervention 21 juin 2010 1
29 mai 2008 à 18:28
Mon fichier ne comporte pas de virgule mais des points comme décimal encore une chance ^^

Sinon j'ai modifier un peu la boucle a la place du while wend je suis donc passé par le fameux do while loop. (C'est la meme chose je trouve mais bon)

En fait le debbugger me renvoie sur la ligne do while not EOF(FileNumber)

et si je survole avec la souris, le FileNumber est = 1

En ce qui concerne mes plusieurs appels de lineInput je trouve cela un peu normal car je lis la ligne entière et si je trouve pas l'item que je cherche je passe a la suivante. Par contre une fois que je l'ai trouver, je saute x ligne (correspondant aux X lignes d'appel de input ...)

ps bis : Le lien donne la source a compiler mais j'ai pas vb6 ^^
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
30 mai 2008 à 00:12
Personnellement je fais
Do Until EOF(FileNumber)
    '...
Loop

Mais je ne pense pas que ça règlera ton problème...
Par contre, on ne voit pas ce que contient exactement "chemin"

Si tu mets
MsgBox Chemin
en tout début de procédure, qu'est-ce que ça donne exactement comme nom de fichier ?

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
30 mai 2008 à 01:18
Ok
Je n'avais pas fait gaffe, mais tu as un Close #FileNumber en plein milieu de tes boucles.
Je pense que tu dois y passer, mais comme tu ne sors pas de la boucle, il continue et quand il recommence, le fichier étant fermé, il génère l'erreur.
A l'emplacement de ton Close, si tu n'as plus rien à faire dans ta boucle de lecture, remplace ton Close par un "Exit Do" à condition d'avoir utiliser Do-Loop à la place du While-Wend
(le Close est fait au sortir de la boucle)

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)
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
30 mai 2008 à 01:24
Bonne déduction mon cher Watson...

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
cs_baz187rem Messages postés 78 Date d'inscription vendredi 23 mars 2007 Statut Membre Dernière intervention 21 juin 2010 1
30 mai 2008 à 07:53
ha pas bete le exit do je vais tester ca aujourd'hui...

Bon je l'ai tester en direct et super cela fonctionne !! Et en effet finalement quand j'y repense c'est bien cela... Je continue de boucler, le fichier fermer donc c'est normal qu'il n'arrive plus a parcourir le fichier qui est fermé !!

Super en tout cas merci à toi Jack pour avoir trouver la solution et a toi MPi² d'avoir essayer et Renfield aussi ^^
0
Rejoignez-nous