Bonjour Tout le monde

Mon probléme est assez bizarre
Pour faire simple, j'ai un filtre à mettre en place:
-derniére minute
-depuis 5 minutes
-depuis 15 minutes
-depuis 30 minutes
etc...
Suivant la selection de l'utilisateur je filtre des données.
Voici mon 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
'Déclaration des variables 
Public Selection_Temps As String
Public Heure_systeme As System.DateTime
Public duree_a_soustraire As System.TimeSpan
Public nouvelle_heure As System.DateTime
 
'Suivant les valeurs de Selection_temps, je retire 1,15,30 etc minutes
Heure_systeme = TimeOfDay
Selection_Temps = Select_temps.SelectedIndex
 
        Select Case Selection_Temps
 
            Case 0
                'Dernière minute
                duree_a_soustraire = New System.TimeSpan(0, 0, 1, 0)
                nouvelle_heure = Heure_systeme.Subtract(duree_a_soustraire)
                MsgBox(nouvelle_heure)
            Case 1
                '5 minutes
                duree_a_soustraire = New System.TimeSpan(0, 0, 5, 0)
                nouvelle_heure = Heure_systeme.Subtract(duree_a_soustraire)
                MsgBox(nouvelle_heure)
            Case 2
                '15 minutes
                duree_a_soustraire = New System.TimeSpan(0, 0, 15, 0)
                nouvelle_heure = Heure_systeme.Subtract(duree_a_soustraire)
                MsgBox(nouvelle_heure)
            Case 3
                '30 minutes
                duree_a_soustraire = New System.TimeSpan(0, 0, 30, 0)
                nouvelle_heure = Heure_systeme.Subtract(duree_a_soustraire)
                MsgBox(nouvelle_heure)
            Case 4
                '60 minutes
                duree_a_soustraire = New System.TimeSpan(0, 1, 0, 0)
                nouvelle_heure = Heure_systeme.Subtract(duree_a_soustraire)
                MsgBox(nouvelle_heure)
            Case 5
                '120 minutes
                duree_a_soustraire = New System.TimeSpan(0, 2, 0, 0)
                nouvelle_heure = Heure_systeme.Subtract(duree_a_soustraire)
                MsgBox(nouvelle_heure)
 
        End Select
Voilà pour le code, le probléme est lorsque je retire 5 heures et qu'il est 04h59 du matin sur le poste il ne s'agit plus d'un TimeSpan mais d'un DateTime
Je sais que le TimeSpan représente une valeur depuis minuit mais comment faire alors ? SubtractHours existe comme AddHours?
Quelqu'un à une idée pour mon probléme ?? Merci pour vos réponses