Code VBA (Soustraction jours à une date)

Bonjour à tous etd'ores et déja un grand merci à tous ceux qui pourront m'aider à solutionner le problème ci-dessous:

En cellule E15 je tape la date 02.04.2025.

Cette date doit être reprise avec 12 jours de moins sur ma cellule E31

1) SI possible je souhaiterais un code VBA et non une formule SI ou une opération mathématique telle que (= E15-12)

2) Si aucune valeur dans la cellule E15 alors aucune valeur retranscrite dans la cellule E31

Vous reitérant tous remercîments, je vous souhaite d'ores et déjà une excellente fin de journée.

Bonsoir,

Ceci:

    If Range("E15").Value <> "" Then
        MaDate = Range("E15").Value
        MaDate = CDate(Replace(MaDate, ".", "/"))
        Range("E31").Value = Replace(MaDate - 12, "/", ".")
    End If

Cdlt

Bonsoir le forum,

en combinant les données on obtient une seule ligne et en utilisant la fonction DateAdd on peut déterminée si ce sont :

yyyyAnnée
qTrimestre
mMois
yJour de l’année
dJour
wJour de la semaine
wwSemaine
hHeure
nMinute
sDeuxième

que l'on veut additionner ou soustraire :

If Range("E15") <> "" Then Range("E31") = Replace(DateAdd("d", -12, Replace(Range("E15"), ".", "/")), "/", ".") Else Range("E31") = ""

@ bientôt

LouReeD

Bonjour Arturo83, Bonjour LouReeD,

Après divers essais se référant à vos codes respectifs, je ne parviens toujours pas à obtenir ce que je souhaiterais.

Étant donné que je suis persuadé que vos codes sont fiables, il ne fait aucun doute que l'erreur provient de mon incompréhenssion

à adapter ces derniers à mon projet.

De ce fait, je me permets d'abuser encore d'un peu de votre temps, afin de comprendre mon erreur, et pour cela je joins mon fichier

Vous remerciant, d'ores et déjà du temps que vous m'accordez, je vous souhaite une très bonne journéé.

8essai-copie.xlsm (39.84 Ko)

Bonjour,

l'erreur vient de là :

Private Sub Worksheet_DateChange(ByVal Target As Range)
    If Range("E15") <> "" Then Range("E31") = Replace(DateAdd("d", -12, Replace(Range("E15"), ".", "/")), "/", ".") Else Range("E31") = ""
End Sub

il n'y a pas de surveillance événementielle sur le changement de date !
Il faut utiliser les fonctions disponibles, en l'occurrence ici le "Change" comme vous l'avez fait pour le cellule I29, avec un test pour vérifier si le Change se fait en cellule E15 :

Private Sub Worksheet_Change(ByVal Target As Range)
  On Error GoTo fin
  Application.EnableEvents = False
  If Not Intersect(Target, Range("I29")) Is Nothing Then
    Application.Undo
    MsgBox "Vous ne pouvez pas modifier cette cellule !"
  ElseIf Not Intersect(Target, Range("E15")) Is Nothing Then
    If Range("E15") <> "" Then Range("E31") = DateAdd("d", -12, Range("E15")) Else Range("E31") = ""
  End If
fin:
  Application.EnableEvents = True
End Sub

J'ai supprimé les REPLACE vi que votre date a le bon format "au départ" contrairement à votre demande...

@ bientôt

LouReeD

Bonjour LouReeD,

Je vous remercie de votre prompte réponse , de la correction effectuée ainsi que de votre explication claire et précise..

De ce fait, après avoir modifié mon code selon vos informations, mon fichier fonctionne à merveille.

Je cloture le sujet, vous reitére tous mes remerciements et vous souhaite une excellente journée.

Merci de votre retour et remerciement !

Et pensez y pour la prochaine fois : mettre un fichier dès la demande et la réponse est plus rapide et pertinente !

@ bientôt

LouReeD

Rechercher des sujets similaires à "code vba soustraction jours date"