Temporisation de lecture de fichier (texte) entre création/lecture
Bonjour
La macro a pour but de lancer le shell net view et stocker le résultat dans un fichier texte (crée sur un disque externe)
puis ce fichier est lu par le classique get...
- En pas à pas le fichier lu est renseigné sans problème.
- En exécution la fréquence de résultats positifs est variable voire nulle.
j'ai essayer de temporiser entre les deux étapes sans amélioration.
Voila le mystère!!!
Code:
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
|
Option Explicit
Public LectNetView As String
Public ListDesDk As String
Sub passe_EnvironRevueTest()
Dim leClas, DossF As String
Dim I, J, ResuN, ResuD, ManX, CtrVId, CtrOk
I = 0
Stadium:
leClas = ThisWorkbook.Path & "\NetView"
On Error Resume Next
Kill leClas & "\envirOrdo.txt"
RmDir leClas
On Error GoTo 0
If Dir(leClas, vbDirectory) = "" Then MkDir leClas
leClas = leClas & "\envirOrdo.txt"
I = 0
Shell "cmd.exe /C c:\windows\system32\net view > " & "" & leClas & "", vbHide
'Application.Wait (Now + TimeValue("0:00:02"))
Relire:
LectNetView = LireFichierTexte(leClas)
I = I + 1
If LectNetView = "" And I < 4 Then GoTo Relire
If LectNetView <> "" Then Beep
If LectNetView = "" Then
CtrVId = CtrVId + 1
Else
CtrOk = CtrOk + 1
End If
J = J + 1
If J > 100 Then Stop: J = 0: CtrVId = 0: CtrOk = 0: Stop
GoTo Stadium
End Sub
Public Function LireFichierTexte(ByVal monfichier As String) As String
On Error GoTo LireFichierTexteErreur
Dim IndexFichier As Integer
IndexFichier = FreeFile()
Open monfichier For Binary Access Read As #IndexFichier
LireFichierTexte = Space$(LOF(IndexFichier))
Get #IndexFichier, , LireFichierTexte
Close #IndexFichier
Exit Function
LireFichierTexteErreur:
Close #IndexFichier
LireFichierTexte = ""
End Function |
Merci à tous les courageux
RON
[XL-2010] Temporisation de lecture de fichier (texte) entre création/lecture
Citation:
Envoyé par
laurent_ott
Attention car Shell est asynchrone, c'est-à-dire que le code VBA continue son travail sans attendre la fin de l'instruction Shell.
Il faut donc soit s'assurer que l'instruction Shell est terminée, soit faire une temporisation assez longue.
par exemple si tu détruis un fichier avec Shell (pourquoi pas ?) il faut boucler tant que Dir trouve encore le fichier à supprimer. Tu n'as pas ce problème si tu le détruit avec l'instruction Kill du VBA.
Pour le reste je ne peux pas t'aider car je n'ai pas compris ce que tu fais exactement avec Shell.
Bonne continuation.
Attention car Shell est asynchrone bien sûr
merci tu m'as remis dans le droit chemin
Ron