Soustraire des jours à une date

Bonjour,

J'ai fais une macro pour demander à l'utilisateur sur quelle plage il veut remonter pour afficher les rapports d'incidents mais je n'arrive pas à soustraire des jours ou des mois ou des années à ma date actuelle ( Today = Format(Now, "dd/mm/yyyy") )

Voici mon petit exemple qui ne fonctionne pas :

If Periode = "jour" Then

Tmin = Today - (Qte + 1) / Month(Today) / Year(Today)

'ElseIf Periode = "semaine" Then

'Tmin = Today - Qte * 7 + 1

'ElseIf Periode = "mois" And Mois(Today) = 12 Then

'Tmin = Jour(Today) / 1 / Annee(Today) - 1

' Else

'Tmin = Jour(Today) / Mois(Today) - 1 / Annee(Today)

Tmin = DateAdd("yyyy", -3, Today)

Merci par avance !

Bonjour,

Une base pour commencer :

Dim Qte As Byte
Qte = 3 ' Par exemple
'A savoir que Date, en VBA, te donne la date du jour, au format jj/mm/aaaa
'a l'inverse de now, qui te donne en plus l'heure...
x = DateValue(Day(Date) - Qte & "/" & Month(Date) & "/" & Year(Date))

Bon courage

Bonsoir,

Il y a une fonction Excel pour cela, c'est DateDiff, on rentre en paramètre le jour, la semaine, le mois, le trimestre, l'année...

C'est simple et très efficace.

Je regarde ça demain au bureau merci en tout cas !

Bonjour,

J'ai essayer la méthode suivante mais si Qte est supérieur au jour actuel cela ne marche pas.

si vous avez une solution car si je dois prendre en compte à chaque fois si Qte est supérieur au jour alors j'enleve un mois et j'enleve le nombre de jour restant au mois precedent.

Exemple je veux enlever 21 jour mais on est le 12 alors j'enleve un mois puis j'enleve 9 jours au mois d'avant. Je peux faire ça mais si vous avez une solution plus simple ?

Car si l'utilisateur me demande 10 semaines soit 70 jours ça risque d'être plus compliquer mais si c'est la seule solution je ferai ça ^^

Voici l'algo de mon programme :

'Traitement des data en période

'Pour la suite Periode T est comprise entre Tmin (Variable ci dessous) et Tmax (=Today)

'Si Jour --> Periode T = Today - Qte + 1 jusqu'à Today

'Si Semaine --> Periode T = Today - Qte * 7 + 1 jusqu'à Today

'Si Mois --> Si Mois(Today) = 12 alors Periode T = Jour(Today)/01/Annee(Today)-1 jusqu'à Today

' Sinon Periode T = Jour(Today)/Mois(Today)-1/Annee(Today)

cousinhub a écrit :

Bonjour,

Une base pour commencer :

Dim Qte As Byte
Qte = 3 ' Par exemple
'A savoir que Date, en VBA, te donne la date du jour, au format jj/mm/aaaa
'a l'inverse de now, qui te donne en plus l'heure...
x = DateValue(Day(Date) - Qte & "/" & Month(Date) & "/" & Year(Date))

Bon courage

Merci d'avance !

Bonjour,

Avec une autre fonction VBA :

Dim Qte As Byte
Qte = 21 ' Par exemple
x = DateSerial(Year(Date), Month(Date), Day(Date) - Qte)

Bonne journée

Un GRAND merci ! C'est exactement ça que je voulais faire

Je mets le code pour ceux qui voudrait faire la même chose dans le futur :

Dim Periode As String

Dim Qte As Integer

Sub CommandButton1_Click()

'Bouton pour valider

Dim Test As String

Dim Today As Date

Dim Tmin As Date

Dim Nombre As Integer

Today = Date

'bouton d'option pour le jour/mois/année

If OptionButton1.Value = True Then Periode = "mois"

If OptionButton2.Value = True Then Periode = "semaine"

If OptionButton3.Value = True Then Periode = "jour"

'Affiche la date du jour

MsgBox Today & " Date du jour " & Qte & " Valeur de Qte " & Periode & " periode "

'Test que la variable retourné par l'utilisateur est un Entier

Test = VarType(Qte)

'Test : Si la variable est un Entier on continue la procedure sinon on affiche un message d'erreur

If Test = 2 And Qte > 0 Then

'Continuer la procedure

' MsgBox " Ok suite"

Else

MsgBox " Erreur la Valeur : " & Qte & " n'est pas un entier positif "

End If

'Calcul de la date jusqu'à laquelle l'utilisateur veut remonter.

If Periode = "jour" Then

If Qte > Day(Date) Then

Qte = Qte - Day(Date)

Tmin = DateValue(Day(Date) - Qte & "/" & Month(Date) - 1 & "/" & Year(Date))

Else: Tmin = DateValue(Day(Date) - Qte & "/" & Month(Date) & "/" & Year(Date))

End If

ElseIf Periode = "semaine" Then

MsgBox " Qte avant if: " & Qte

If Qte * 7 > Day(Date) Then

'Tmin = DateValue(Day(Date - 1) - Qte * 7 & "/" & Month(Date) - 1 & "/" & Year(Date))

Tmin = DateSerial(Year(Date), Month(Date), Day(Date) - Qte * 7)

Else: Tmin = DateValue(Day(Date) - Qte * 7 & "/" & Month(Date) & "/" & Year(Date))

End If

ElseIf Periode = "mois" Then

Tmin = DateSerial(Year(Date), Month(Date) - Qte, Day(Date))

'Tmin = DateValue(Day(Date) - Qte & "/" & Month(Date) - 1 & "/" & Year(Date))

End If

MsgBox " On veut remonter jusqu'au : " & Tmin

End Sub

Rechercher des sujets similaires à "soustraire jours date"