Option Explicit
'------------------------------------
' Déclaration des variables du module
'------------------------------------
Dim Cell As Range
Dim HeureFin
Dim NomFeuille As String
'------------------------------------
'
'--------------------------------------------------------------------------'
' Procédure ClearData '
'--------------------------------------------------------------------------'
' Programmée par Application.OnTime pour se déclencher à une heure donnée, '
' stockée dans la variable HeureFin, initialisée par la cellule en colonne '
' B dont l'adresse est donnée par la variable de type objet Range "Cell" '
'--------------------------------------------------------------------------'
Sub ClearData()
'
' On efface la précédente programmation de la procédure OnTime au cas où
On Error Resume Next
Application.OnTime earliesttime:=[COLOR="Red"][B][I]HeureFin[/I][/B][/COLOR], Procedure:="ClearData", schedule:=False
[COLOR="Green"][B]' En rouge gras italique = à modifier dans le fichier joint[/B][/COLOR]
On Error GoTo 0
' Cell étant en colonne B, on efface la donnée
' se trouvant en colonne C, sur la même ligne
Cell.Offset(, 1).ClearContents
' Puis on descend d'une ligne et on réaffecte
' la variable objet Cell
Set Cell = Cell.Offset(1)
' Avec la variable objet de type Range "Cell",
With Cell
' On vérifie qu'elle contient une donnée, sinon
' on sort...
If .Value <> "" Then
' Si la colonne A ne contient rien, c'est que la date
' est celle du jour, autrement, ClearData n'aurait pas
' été programmée par InitCompteurs, si elle contient
' une donnée, on vérifie qu'il s'agit bien de la date
' système, sinon... on sort ^^
If (.Offset(, -1) = "") Or (.Offset(, -1) = Date) Then
' Si l'heure de début est bien inférieure
' à l'heure de fin (colonne D), on continue,
' sinon... devinez :)
If (.Value < .Offset(, 2)) Then
' on place la nouvelle heure de déclenchement
' de ClearData dans la variable HeureFin
HeureFin = Cell.Offset(, 2) + Sheets(NomFeuille).Range("D1")
' Puis on reprogramme l'appel à ClearData avec la
' nouvelle heure calculée
Application.OnTime HeureFin, "ClearData"
End If
End If
End If
End With
End Sub
Sub InitCompteurs()
'
' On sauvegarde le nom de la feuille dans
' laquelle se trouvent les données dans la
' variable NomFeuille
NomFeuille = ActiveSheet.Name
' La première cellule contenant
' une heure de début est en B7,
' alors on vérifie qu'elle n'est
' pas vide, sinon on sort
If Range("B7") <> "" Then
' la procédure Application.OnTime
' ne se programme qu'avec des
' heures. On vérifie donc que la
' date en A7 correspond bien à
' la date du jour, sinon on sort ^^
If Range("A7") = Date Then
' Il faut également que l'heure de
' fin soit supérieure à l'heure à
' l'heure de début, et que l'heure
' de fin soit supérieure à l'heure
' actuelle (heure système)
If (Range("B7") < Range("D7")) And (Range("D7") > Time) Then
' On stocke l'adresse de la cellule
' traitée (celle contenant l'heure
' de début)
Set Cell = Range("B7")
' puis on calcule l'heure à laquelle
' la donnée en colonne C doit être
' effacée (D7+D1 : T + DeltaT) et on
' la stocke dans la variable HeureFin
HeureFin = Cell.Offset(, 2) + Range("D1")
' Enfin, on programme l'appel de la
' procédure ClearData
Application.OnTime HeureFin, "ClearData"
End If
End If
End If
End Sub