XL 2013 formule Excel pour soustraire 2 dates

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

onyirimba

XLDnaute Occasionnel
Supporter XLD
Bonjour,

J'ai une question : dans le but d'obtenir une durée entre 2 dates, je souhaite réaliser une soustraction entre 2 dates ci dessous "=V2-U2".
  1. en V2 il s'agit du numéro de semaine et le numéro d'année
  2. en U2 il s'agit de l'une date
Cependant en W2 j'ai une réponse d'erreur,

est-ce que vous avez une solution ?

Merci de votre aide

1721393809656.png
 

Pièces jointes

  • 1721393762441.png
    1721393762441.png
    2.4 KB · Affichages: 3
Solution
Bonjour,
Si le format de semaine est toujours de 2 chiffres (2024 / 01, 2024 / 15...)
Peut-être ainsi :
Code:
=7*DROITE(V2;2)+DATE(GAUCHE(V2;4);1;3)-JOURSEM(DATE(GAUCHE(V2;4);1;3))+1-U2

Le dernier +1 donne le dimanche, dernier jour de la semaine. Si tu veux le vendredi, tu mets -1
Bonne apm
Bonjour,

J'ai une question : dans le but d'obtenir une durée entre 2 dates, je souhaite réaliser une soustraction entre 2 dates ci dessous "=V2-U2".
  1. en V2 il s'agit du numéro de semaine et le numéro d'année
  2. en U2 il s'agit de l'une date
Cependant en W2 j'ai une réponse d'erreur,

est-ce que vous avez une solution ?

Merci de votre aide

Regarde la pièce jointe 1200725
En v2, ça ne semble pas un format de date...d'où le message d'erreur. Que signifie "2024 / 26" ?
 
Bonjour,
Si le format de semaine est toujours de 2 chiffres (2024 / 01, 2024 / 15...)
Peut-être ainsi :
Code:
=7*DROITE(V2;2)+DATE(GAUCHE(V2;4);1;3)-JOURSEM(DATE(GAUCHE(V2;4);1;3))+1-U2

Le dernier +1 donne le dimanche, dernier jour de la semaine. Si tu veux le vendredi, tu mets -1
Bonne apm
 
Bonjour.
Deux fonctions perso en VBA pour retrouver une date d'après un texte de la
forme Année|Semaine|JourSem et vice versa :
VB:
Function DateAnSemJs(ByVal Z As String, Optional ByVal Sép As String = "|") As Date
   Dim TSpl() As String, An As Long, Sm As Integer, Js As Integer
   TSpl = Split(Z, Sép): An = TSpl(0): Sm = TSpl(1): Js = TSpl(2)
   DateAnSemJs = DateSerial(An, 1, 1)
   DateAnSemJs = DateAnSemJs - WorksheetFunction.Weekday(DateAnSemJs, 3)
   DateAnSemJs = DateAnSemJs + 7 * (Sm - 1) + Js - 1
   End Function
Function AnSemJsDate(ByVal Dt As Date, Optional ByVal Sép As String = "|") As String
   AnSemJsDate = Year(Date) & Sép & WorksheetFunction.IsoWeekNum(Dt) & Sép & Weekday(Dt, vbMonday)
   End Function
Il vous suffira donc de mettre comme formule
Code:
=DateAnSemJs(V2&" / 1";" / ")-U2
si toutefois c'est le lundi de la semaine 26 de 2024 qu'il faut assumer …
 
Bonjour.
Deux fonctions perso en VBA pour retrouver une date d'après un texte de la
forme Année|Semaine|JourSem et vice versa :
VB:
Function DateAnSemJs(ByVal Z As String, Optional ByVal Sép As String = "|") As Date
   Dim TSpl() As String, An As Long, Sm As Integer, Js As Integer
   TSpl = Split(Z, Sép): An = TSpl(0): Sm = TSpl(1): Js = TSpl(2)
   DateAnSemJs = DateSerial(An, 1, 1)
   DateAnSemJs = DateAnSemJs - WorksheetFunction.Weekday(DateAnSemJs, 3)
   DateAnSemJs = DateAnSemJs + 7 * (Sm - 1) + Js - 1
   End Function
Function AnSemJsDate(ByVal Dt As Date, Optional ByVal Sép As String = "|") As String
   AnSemJsDate = Year(Date) & Sép & WorksheetFunction.IsoWeekNum(Dt) & Sép & Weekday(Dt, vbMonday)
   End Function
Il vous suffira donc de mettre comme formule
Code:
=DateAnSemJs(V2&" / 1";" / ")-U2
si toutefois c'est le lundi de la semaine 26 de 2024 qu'il faut assumer …
merci pour votre aide
 
Bonjour.
Deux fonctions perso en VBA pour retrouver une date d'après un texte de la
forme Année|Semaine|JourSem et vice versa :
VB:
Function DateAnSemJs(ByVal Z As String, Optional ByVal Sép As String = "|") As Date
   Dim TSpl() As String, An As Long, Sm As Integer, Js As Integer
   TSpl = Split(Z, Sép): An = TSpl(0): Sm = TSpl(1): Js = TSpl(2)
   DateAnSemJs = DateSerial(An, 1, 1)
   DateAnSemJs = DateAnSemJs - WorksheetFunction.Weekday(DateAnSemJs, 3)
   DateAnSemJs = DateAnSemJs + 7 * (Sm - 1) + Js - 1
   End Function
Function AnSemJsDate(ByVal Dt As Date, Optional ByVal Sép As String = "|") As String
   AnSemJsDate = Year(Date) & Sép & WorksheetFunction.IsoWeekNum(Dt) & Sép & Weekday(Dt, vbMonday)
   End Function
Il vous suffira donc de mettre comme formule
Code:
=DateAnSemJs(V2&" / 1";" / ")-U2
si toutefois c'est le lundi de la semaine 26 de 2024 qu'il faut assumer …
merci pour votre aide
 
Moi je n'avais pas vu les réponses avant d'avoir proposé la mienne.
J'ai un petit doute quand même par rapport à la semaine ISO, alors j'ai modifié un peu ma fonction DateAnSemJs :
VB:
Function AnSemJsDate(ByVal Dt As Date, Optional ByVal Sép As String = "|") As String
   AnSemJsDate = Year(Date) & Sép & WorksheetFunction.IsoWeekNum(Dt) & Sép & Weekday(Dt, vbMonday)
   End Function
Function DateAnSemJs(ByVal Z As String, Optional ByVal Sép As String = "|") As Date
   Dim TSpl() As String, An As Integer, Sm As Integer, Js As Integer, DtHyp As Date
   TSpl = Split(Z, Sép): An = TSpl(0): Sm = TSpl(1): Js = TSpl(2)
   DtHyp = DateSerial(An, 1, 8)
   DtHyp = DtHyp - WorksheetFunction.Weekday(DtHyp, 3)
   DateAnSemJs = DtHyp + 7 * (Sm - WorksheetFunction.IsoWeekNum(DtHyp)) + Js - 1
   End Function
 
Bonjour à toutes & à tous, bonjour @onyirimba
Mille excuses si mon post vient en redondance, je suis toujours sur mon téléphone... et je n'ai pas tout lu.
La formule que j'ai pondue (avec mon clavier qui prend la moitié de l'écran, c'est un véritable accouchement !😓)
=DATE(GAUCHE($V2;4);1;1)+CHOISIR(JOURSEM(DATE(GAUCHE($V2;4);1;1);2);0;-1;-2;-3;3;2;1)+(DROITE($V2;2)-1)*7-$U2
Ça fonctionne quelque soit l'année, sans macro car je n'y ai pas accès.
Voir fichier joint
 

Pièces jointes

Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour