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