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

VBScript Discussion :

Problème d'instance fso, accessoirement sous wincc15.1 | Erreur 53 (fichier introuvable) https://www.developpe


Sujet :

VBScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Automaticien
    Inscrit en
    Octobre 2019
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Octobre 2019
    Messages : 75
    Par défaut Problème d'instance fso, accessoirement sous wincc15.1 | Erreur 53 (fichier introuvable) https://www.developpe
    Bonjour à tous,

    j’essaie d'initialiser des comboBox (listes déroulantes) sous wincc avec des scripts VBS.
    Les textes sont stockés dans dans des fichiers textes. Deux listes déroulantes afin de sélectionner une matière selon une catégorie.
    Donc la première comboBox permet de sélectionner la catégorie, dont dépendra la seconde comboBox. La première (catégorie) s'initialise au chargement de la vue (Sub OnGenerateScreen()).

    Voici le 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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    Sub OnGenerateScreen()
    'Lire le fichier texte "intrants-Cat.txt" et affecter chaq'une de ces lignes 
    'aux lignes de textes de la liste déroulante
    On Error Resume Next
    '***	Création des objets File explorer et TextStream
    Dim fso, folder, file,f,ts,extend, temp
    folder="C:\SupTools"
    extend=".txt"
    file = "Intrants-Cat" & extend 
     
    temp = isFolderExists(folder)
    isFileExists folder, file 
     
    '***	Affectation des textes de la liste déroulante
     
    Dim i, nbLine, list,  filePath,buf
    filePath = folder &"\"& file
    ReadFile folder,file 
    nbLine=SmartTags("nbLine")
    ToTrace "231-nbFile: ", nbLine
    Set list = ScreenItems("Liste_cat") ' On créé on objet "liste déroulante" existant!!
    list.Visible = False
    list.CountVisibleItems = nbLine
     
    For i = 1 To nbLine
    	list.SelectedIndex= i  
    	'list.SelectedText = buf(i)
    	list.SelectedText = SmartTags("Line_"&i)
    Next
    list.Index=1
    list.Visible = True
     
    Set list = Nothing
    For i = 1 To nbLine 
    	SmartTags("Line_"&i)=""
    Next
    If Err.Number <> 0 Then 
    	ToTrace "OnGenerateScreen erreur n°:",Err.Number
    	ToTrace "ReadFile description erreur :",Err.Description
    	ToTrace "ReadFile context erreur :",Err.Source
    	Err.Clear
    End If
    On Error GoTo 0
    End Sub
    Le script isFolderExists:
    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
    Function isFolderExists(ByVal chemin)
    Dim fso, f, NewFile
    On Error Resume Next 
    Set fso = CreateObject("Scripting.FileSystemObject")
    If Not fso.FolderExists(chemin) Then
    	'ToTrace " isFolderExist(chemin)", chemin
    	fso.CreateFolder(chemin)		
    	isFolderExists=0
    Else
    	'ToTrace "Le dossier exist déjà", 1
    	'ToTrace " Son chemin:", chemin
    	isFolderExists=1
    End If
    Set fso = Nothing
    If Err.Number <> 0 Then 
    	ToTrace "isFolderExist erreur n°:",Err.Number
    	ToTrace "isFolderExist description erreur :",Err.Description
    	Err.Clear
    End If
    On Error GoTo 0
    End Function
    Script isFileExists:

    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
    Sub isFileExists(ByVal dossier, ByVal fichier)
    Dim fso, f, NewFile
    On Error Resume Next 
    Set fso = CreateObject("Scripting.FileSystemObject")
    ToTrace "chemin:" , dossier & "\" & fichier
    ToTrace "fso Fileexists: " , fso.FileExists(dossier & "\" & fichier)
    If Not fso.FileExists(dossier & "\" & fichier) Then
    	If fichier = "Intrants-cat.txt" Then
    		ToTrace " Si absence de Intrants-Cat.txt, alors on le créé.", 1
    		Set NewFile = fso.CreateTextFile(dossier & "\" & fichier)
    		NewFile.WriteLine("FUMIERS")
    		NewFile.WriteLine("AUTREAGRI")
    		NewFile.WriteLine("BOUES")
    		NewFile.WriteLine("LISIERS")
    		NewFile.WriteLine("MATIERES VEGETALES")
    		NewFile.Close
    		Set NewFile = Nothing
    		'isFileExists=0
    	Else			
    		Set NewFile = fso.CreateTextFile(dossier & "\" & fichier)
    		NewFile.WriteLine("NOUVEAU")
    		NewFile.Close
    		Set NewFile = Nothing
    		'isFileExists=0
    	End If
    Else
    	'ToTrace "Le fichier est bien trouvé", ""
    	'isFileExists=1
    End If
    Set fso = Nothing
    If Err.Number <> 0 Then 
     
    	ToTrace "*****************************",""
    	ToTrace "IOField invisble sur la sup	********",""
    	ToTrace "isFileExist erreur n°:",Err.Number
    	ToTrace "isFileExist description erreur :",Err.Description
    	ToTrace "",""
    	ToTrace "*****************************",""
    	Err.Clear
    End If
    On Error GoTo 0
    End Sub
    Et le script ReadFile:
    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
    Sub ReadFile(ByVal dossier, ByVal fichier)
    Dim fso, f,ts,filePath, temp, buf, nbFile,i, min, max
    'On Error Resume Next 
    Set fso = CreateObject("Scripting.FileSystemObject")
    filePath = dossier & "\" & fichier
    ToTrace "Getfile:",filePath
    isFileExists dossier & "\" , fichier
    Set f = fso.GetFile(filePath)
    Set ts = f.OpenAsTextStream(1,-2)
     
    buf = Split(ts.ReadAll, vbLf)	
     
    ToTrace "ReadFile2","."
     
    For i=0 To UBound(buf)-1	 
    	ToTrace "buf(i): ", buf(i) 
    Next
    temp = UBound(buf) 
    SmartTags("nbLine").Value=temp
     
    For i=LBound(buf) To UBound(buf)
    	SmartTags("Line_"&i+1).Value= buf(i) 
    	'ToTrace "i: ", i 
    	'ToTrace "Line" &i + 1 &": ", SmartTags("Line_"&i+1).Value
    Next
    ts.Close	'Une fois qu'on a récupéré les catégories, on ferme le fichier texte.
    Set ts = Nothing
    Set f = Nothing
    Set fso = Nothing
    If Err.Number <> 0 Then 	
    	ToTrace "ReadFile",""
    	ToTrace "ReadFile erreur n°:",Err.Number
    	ToTrace "ReadFile description erreur :",Err.Description
    	ToTrace "ReadFile context erreur :",Err.Source
    	Err.Clear
    End If
    On Error GoTo 0
    End Sub
    La procédure "ToTrace" me sert à avoir un retour monitor (HMIRuntime.Trace...).

    Ce qui marche:
    L'initialisation de la comboBox "catégorie". (on teste si le fichier existe ici en premier).
    Ce qui me créé l'erreur, c'est lorsque je veux tester l’existence d'un autre fichier texte dans un autre répertoire.
    Je ne comprends pas vraiment l'origine du problème. Mais apparemment ce serait dû au fait qu'une instance fso ne peut pas changer de répertoire...

    Ma question: Il y a t'il un moyen de tester et créer un ou plusieurs fichiers textes dans plusieurs répertoires, et comment faire?

    Merci d'avance.

  2. #2
    Membre confirmé
    Homme Profil pro
    Automaticien
    Inscrit en
    Octobre 2019
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Octobre 2019
    Messages : 75
    Par défaut Précision sur l'erreur
    J'ai oublié de préciser que le code erreur est 424, soit Objet requis, d'où le fait que je soupçonne un problème d'instanciation de l'objet fso.

  3. #3
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 420
    Par défaut
    Bonjour et BIENVENU sur DVP.

    Il faudrait en plus le numéro de la ligne et celui du caractère où se produit l'erreur.
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  4. #4
    Membre confirmé
    Homme Profil pro
    Automaticien
    Inscrit en
    Octobre 2019
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Octobre 2019
    Messages : 75
    Par défaut
    Bonjour et merci L'Autodidacte,

    malheureusement, la console ne donne pas cette information, ni l'objet Err... C'est pour ça que j'ai mis des 'ToTrace' un peu partout.
    Avec la dernière version de TIA 15.1 (WinCC RT Pro) il n'y a plus le debugger de script, donc pas de point d'arrêt non plus...

  5. #5
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 132
    Par défaut
    Salut

    J'ai essayé de faire un peu de ménage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    'debut du programme, variable globale
    option explicit
    Dim fso
    Set fso = CreateObject("Scripting.FileSystemObject")
    Suivent les subs et functions
    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
    Sub OnGenerateScreen()
    'Lire le fichier texte "intrants-Cat.txt" et affecter chaq'une de ces lignes 
    'aux lignes de textes de la liste déroulante
    On Error Resume Next
    '***	Création des objets File explorer et TextStream
    'Dim fso, folder, file,f,ts,extend, temp '<--------------- a supprimer ---------------
    Dim folder, file, extend
    folder="C:\SupTools"
    'temp = isFolderExists(folder) '<------------- non utilisé -----------------'<--------------- a supprimer ---------------
    extend=".txt"
    file = "Intrants-Cat" & extend 
     
    isFileExists folder, file
     
    '***	Affectation des textes de la liste déroulante
     
    Dim i, nbLine, list,  filePath,buf
    filePath = folder &"\"& file
    ReadFile folder,file 
    nbLine=SmartTags("nbLine")
    ToTrace "231-nbFile: ", nbLine
    Set list = ScreenItems("Liste_cat") ' On créé on objet "liste déroulante" existant!!
    list.Visible = False
    list.CountVisibleItems = nbLine
     
    For i = 1 To nbLine
    	list.SelectedIndex= i  
    	'list.SelectedText = buf(i)
    	list.SelectedText = SmartTags("Line_"&i)
    Next
    list.Index=1
    list.Visible = True
     
    Set list = Nothing
    For i = 1 To nbLine 
    	SmartTags("Line_"&i)=""
    Next
    If Err.Number <> 0 Then 
    	ToTrace "OnGenerateScreen erreur n°:",Err.Number
    	ToTrace "ReadFile description erreur :",Err.Description
    	ToTrace "ReadFile context erreur :",Err.Source
    	Err.Clear
    End If
    On Error GoTo 0
    End Sub
    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
    Function isFolderExists(ByVal chemin)
    'Dim fso, f, NewFile
    On Error Resume Next 
    'Set fso = CreateObject("Scripting.FileSystemObject")
    If Not fso.FolderExists(chemin) Then
    	'ToTrace " isFolderExist(chemin)", chemin
    	fso.CreateFolder(chemin)		
    	isFolderExists=0
    Else
    	'ToTrace "Le dossier exist déjà", 1
    	'ToTrace " Son chemin:", chemin
    	isFolderExists=1
    End If
    'Set fso = Nothing
    If Err.Number <> 0 Then 
    	ToTrace "isFolderExist erreur n°:",Err.Number
    	ToTrace "isFolderExist description erreur :",Err.Description
    	Err.Clear
    End If
    On Error GoTo 0
    End Function
    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
    Sub isFileExists(ByVal dossier, ByVal fichier)
    Dim NewFile 			'Dim fso, f, NewFile  '<--------------- a supprimer ---------------
    On Error Resume Next 
    'Set fso = CreateObject("Scripting.FileSystemObject")  '<--------------- a supprimer ---------------
    ToTrace "chemin:" , dossier & "\" & fichier
    ToTrace "fso Fileexists: " , fso.FileExists(dossier & "\" & fichier)
    If Not fso.FileExists(dossier & "\" & fichier) Then
    	If fichier = "Intrants-cat.txt" Then
    		ToTrace " Si absence de Intrants-Cat.txt, alors on le créé.", 1
    		Set NewFile = fso.CreateTextFile(dossier & "\" & fichier)
    		NewFile.WriteLine("FUMIERS")
    		NewFile.WriteLine("AUTREAGRI")
    		NewFile.WriteLine("BOUES")
    		NewFile.WriteLine("LISIERS")
    		NewFile.WriteLine("MATIERES VEGETALES")
    		NewFile.Close
    		Set NewFile = Nothing
    		'isFileExists=0
    	Else			
    		Set NewFile = fso.CreateTextFile(dossier & "\" & fichier)
    		NewFile.WriteLine("NOUVEAU")
    		NewFile.Close
    		Set NewFile = Nothing
    		'isFileExists=0
    	End If
    Else
    	'ToTrace "Le fichier est bien trouvé", ""
    	'isFileExists=1
    End If
    'Set fso = Nothing  '<--------------- a supprimer ---------------
    If Err.Number <> 0 Then 
     
    	ToTrace "*****************************",""
    	ToTrace "IOField invisble sur la sup	********",""
    	ToTrace "isFileExist erreur n°:",Err.Number
    	ToTrace "isFileExist description erreur :",Err.Description
    	ToTrace "",""
    	ToTrace "*****************************",""
    	Err.Clear
    End If
    On Error GoTo 0
    End Sub
    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
    Sub ReadFile(ByVal dossier, ByVal fichier)
    'Dim fso, f,ts,filePath, temp, buf, nbFile,i, min, max  '<--------------- a supprimer ---------------
    Dim f,ts,filePath, temp, buf, i, max 		
    'On Error Resume Next 
    'Set fso = CreateObject("Scripting.FileSystemObject")  '<--------------- a supprimer ---------------
    filePath = dossier & "\" & fichier
    ToTrace "Getfile:",filePath
    isFileExists dossier & "\" , fichier
    Set f = fso.GetFile(filePath)
    Set ts = f.OpenAsTextStream(1,-2)
     
    buf = Split(ts.ReadAll, vbLf)	
     
    ToTrace "ReadFile2","."
     
    For i=0 To UBound(buf)-1	 
    	ToTrace "buf(i): ", buf(i) 
    Next
    temp = UBound(buf) 
    SmartTags("nbLine").Value=temp
     
    For i=LBound(buf) To UBound(buf)
    	SmartTags("Line_"&i+1).Value= buf(i) 
    	'ToTrace "i: ", i 
    	'ToTrace "Line" &i + 1 &": ", SmartTags("Line_"&i+1).Value
    Next
    ts.Close	'Une fois qu'on a récupéré les catégories, on ferme le fichier texte.
    Set ts = Nothing
    Set f = Nothing
    'Set fso = Nothing  '<--------------- a supprimer ---------------
    If Err.Number <> 0 Then 	
    	ToTrace "ReadFile",""
    	ToTrace "ReadFile erreur n°:",Err.Number
    	ToTrace "ReadFile description erreur :",Err.Description
    	ToTrace "ReadFile context erreur :",Err.Source
    	Err.Clear
    End If
    On Error GoTo 0
    End Sub
    FIN DU PROGRAMME
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ' nettoyage avant fin du programme
    Set fso = Nothing
    Dans le déroulé de ton code, il me semble bien que l'objet fso était fermé par un Set fso = Nothing, de retour dans la sub OnGenerateScreen l'instance fso n'existait plus .
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  6. #6
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    Dans OnGenerateScreen, on voit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    file = "Intrants-Cat" & extend
    Dans isFileExists, on voit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If fichier = "Intrants-cat.txt" Then
    Malgré la probable faute de frappe, la dernière comparison n'est toujours pas recommendable, il faut faire une comparison binaire au lieu de textuel, comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If strcomp(fichie, "Intrants-cat.txt") Then
    ou également effectivement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If strcomp(fichie, "Intrants-cat.txt", 0) Then

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

Discussions similaires

  1. [11gR2] Problème au démarrage d'une instance ORACLE 11gR2 sous AIX 7.1
    Par GBAGO dans le forum Administration
    Réponses: 0
    Dernier message: 19/11/2015, 08h56
  2. Problème de creation de thread sous linux
    Par xilebo dans le forum POSIX
    Réponses: 4
    Dernier message: 27/10/2004, 09h58
  3. problème de passage de paramêtre sous mozilla
    Par mat10000 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 27/09/2004, 10h48
  4. Problème avec le port série sous Windows XP
    Par didou2dek dans le forum Composants VCL
    Réponses: 6
    Dernier message: 02/09/2003, 19h50
  5. Problème de création de table sous MySql
    Par ducamba dans le forum Requêtes
    Réponses: 2
    Dernier message: 21/06/2003, 09h59

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