Bonjour , je suis entrein de créer un fichier Excel qui permet d'enregistrer les action de l'utilisateur sur écran HMI. Pour l'instant c'est un code test avec seulement 2 BP avant de l'adapter sur une machine. Mon projet est fonctionnel et écrit tout les secondes sur le fichier l'état de mes 2 BP. Seulement j'aimerai qu'il écrive sur le fichier Excel SEULEMENT quand une des variables CHANGE D'ETAT (et non toutes les secondes car le fichier se remplis vite). C'est pour savoir s'il y a une possibilité de le faire avec les "Archives" si pas , un autre moyen ? Merci
PS: je suis sur WinCC

Voici mes 3 scripts ==>

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 Continue()
 
Dim EcritureContinue 
Dim FolderWay , ObjectWay , FileName , File , FileExist, header , value ,  currentTime ' Declaration des variables
FolderWay = "C:\Users\XXXXX\Downloads\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
Do 
	Call WriteDataToExcel (value, currentTime, File, FolderWay, FileName)  
	EcritureContinue = SmartTags("BpStopLog") 'J'appel le 1er script
	Call Delay 
Loop While ( EcritureContinue = False) ' tant que le BPSTOPLOG vaut 0 , on continue d'écrire
 
 
 
End Sub


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
Sub Delay()
Dim time1, time2
time1= Now
time2= Now + TimeValue ("0:00:01")
	Do Until time1>= time2
		time1= Now()
	Loop
 
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
Sub WriteDataToExcel(ByRef value, ByRef currentTime, ByRef File, ByRef FolderWay, ByRef FileName)
 
currentTime = Hour(Time) & ":" & Minute(Time) & ":" & Second(Time) 
 
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
 
 
 
value.Close 
 
End Sub


Je ne sais pas si WinCC propose une option sans pour autant créer + de variable pour conserver l'état précédant..