Comment faire une écriture continue?

Résolu/Fermé
AnissaUchiha - Modifié le 12 févr. 2019 à 11:34
AnissaUchiha Messages postés 2 Date d'inscription mardi 12 février 2019 Statut Membre Dernière intervention 13 février 2019 - 12 févr. 2019 à 12:17
Bonjour j'utilise un langage VBScript pour créer un fichier qui enregistre de manière continue ( tant que je n'ai pas appuyer sur un BPStop par exemple) le problème c'est que ma boucle ne fonctionne pas et j'ai a chaque fois un fichier Excel qui se créer avec une ligne d'écriture dedans. Pour avoir une deuxieme ligne je dois appuyer à chaque fois sur BPStart. J'aimerai que ça se fasse de manière automatique … J'ai donc créer 2 script. Le 1er qui contient le code et le deuxieme qui est censé s'occuper de l'écriture continue.



1er SCRIPT ==>
Sub WriteDataToExcel()
'Conseil :
' 1. Utilisez la combinaison de touches <CTRL+ESPACE> ou <CTRL+I> pour ouvrir une liste de l'ensemble des objets et fonctions
' 2. Ecrivez le code en utilisant l'objet HMI Runtime.
'  Exemple : HmiRuntime.Screens("Screen_1").
' 3. Utilisez la combinaison de touches <CTRL+J> pour créer une référence d'objet.
'Ecrivez le code à partir de cette position :
'Set ==> pour variable global 
Dim FolderWay , ObjectWay , FileName , File , FileExist, header , value , EcritureContinue, currentTime ' Declaration des variables
FolderWay = "C:\Users\agher\Downloads\Henallux Automatique\3ème bloc\STAGE\ExcelExemple"  'Là ou l'on veut enregistrer le fichier Excel sous un nom
Set ObjectWay = CreateObject ("Scripting.FileSystemObject") 'Creation d'un object pour voir si le dossier est créé ou pas
'Si le dossier n'existe pas, on le créer.
If Not ObjectWay.FolderExists(FolderWay) Then 
 ObjectWay.CreateFolder FolderWay
End If   
  
'FileName = Year(Now()) & "_" & Month(Now()) &"_" & Day(Now()) & "-" & Hour(Time) & "_" & Minute(Time) & "_" & Second(Time) & ".csv" 
FileName =  "EnregistrementValeur.csv" 
Set File = CreateObject ("Scripting.FileSystemObject") ' Creation d'un object pour voir si le fichier est créé ou pas
FileExist = File.FileExists(FolderWay & "\" &FileName) ' On créer une variable qui indique le chemin du fichier

'Si le fichier n'existe pas, on le créer
If FileExist = False Then 
 'On créer le fichier
 File.CreateTextFile(FolderWay & "\" &FileName)    
 
 'On créer maintenant les en-têtes du fichier Excel
 Set header = File.OpenTextFile(FolderWay & "\" &FileName, 8) ' Le 8 signifie "ouvrir le dossier et écrire à la fin"  
 header.WriteLine("Temps ; ActionA ; ActionB")
 header.Close 'Pas oublier de fermer quand on a fini sinon la suite se fera dans les headers
 
 'On vide l'objet
 Set File = Nothing
End If
currentTime = Hour(Time) & ":" & Minute(Time) & ":" & Second(Time) 
'Please replace all sequences which are enclosed with '_' by your own code.
Do
 Set File = CreateObject ("Scripting.FileSystemObject")
 Set value = File.OpenTextFile(FolderWay & "\" &FileName, 8)
 value.WriteLine ( currentTime & ";" & SmartTags("ActionA") & ";" & SmartTags("ResetActionA")) ' ";" sépare les collonnes dans Excel
  
 EcritureContinue = SmartTags("BpStartLog") 
Loop While EcritureContinue = True ' tant que le BPSTARTLOG vaut 1 , on continue d'écrire

value.Close 
  
End Sub 



2EME SCRIPT ==>

Sub Continue()
'Conseil :
' 1. Utilisez la combinaison de touches <CTRL+ESPACE> ou <CTRL+I> pour ouvrir une liste de l'ensemble des objets et fonctions
' 2. Ecrivez le code en utilisant l'objet HMI Runtime.
'  Exemple : HmiRuntime.Screens("Screen_1").
' 3. Utilisez la combinaison de touches <CTRL+J> pour créer une référence d'objet.
'Ecrivez le code à partir de cette position :

Dim EcritureContinue  
Do
  Call WriteDataToExcel   
  EcritureContinue = SmartTags("BpStopLog") 'J'appel le 1er script
Loop While EcritureContinue = False ' tant que le BPSTARTLOG vaut 1 , on continue d'écrire
 


End Sub


EDIT : Ajout des balises de code

============================================================================
Même en mettant ma boucle , cela n'écrit qu'une fois . Et je me demande si deux variable change en même , comment je peux gerer ceci?

Voila merci bcp de votre aide :)

PS: Je programme en VBScript sur TIAportail (SIEMENS)
A voir également:

1 réponse

jordane45 Messages postés 38289 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 novembre 2024 4 703
12 févr. 2019 à 11:44
Bonjour,

Plusieurs petites choses...
déjà.. tu n'écris pas dans un fichier excel .... mais juste dans un fichier csv. (ce n'est pas la même chose).

Ensuite... tu as placé l'ouverture du fichier dans la boucle....
Do
  Set File = CreateObject ("Scripting.FileSystemObject")
   Set value = File.OpenTextFile(FolderWay & "\" &FileName, 8)


pourquoi ? Une fois juste avant la boucle suffit amplement...

Puis..
Loop While EcritureContinue = False ' tant que le BPSTARTLOG vaut 1 , on continue d'écrire

Dans ton commentaire... tu parles de "1" ... mais là tu as mis "False" .... normal ?

Sachant que de l'autre côté tu as bien
Loop While EcritureContinue = True ' tant que le BPSTARTLOG vaut 1 , on continue d'écrire



Tu utilises également la même variable deux fois...
D'un côté
EcritureContinue = SmartTags("BpStopLog") 'J'appel le 1er script

de l'autre
EcritureContinue = SmartTags("BpStartLog")

Ne penses tu pas que ça puisse poser problème ?


Je n'ai fait que lire vite fait...... mais ces points me semblent étranges...


0
AnissaUchiha Messages postés 2 Date d'inscription mardi 12 février 2019 Statut Membre Dernière intervention 13 février 2019
12 févr. 2019 à 12:17
Coucou Jordan ,
Tout dabord merci pour ta réponse rapide je ne m'y attendais.
j'ai modifié plein de fois mon programme donc il ne faut pas se fier au commentaire , j'aurai du les supprimer.
Je remarque aussi que j'ai oublier d'effacer la boucle dans le 1er script ( c'était mon 1er essaie avant de créer le 2eme script mais ce ne fonctionnait tjr pas..) .
J'ai donc relancer le programme en nettoyant le code et je te remercie j'ai su faire mon écriture continue :) ! Maintenant je peut donc avancer pour régler le problème de l'ouverture du fichier à chaque fois.
Encore merci !
0