XL 2013 formule Excel pour soustraire 2 dates

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: 2
Solution
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...

halecs93

XLDnaute Impliqué
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" ?
 

Cousinhub

XLDnaute Barbatruc
Inactif
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
 

Dranreb

XLDnaute Barbatruc
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 …
 

onyirimba

XLDnaute Occasionnel
Supporter XLD
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
 

onyirimba

XLDnaute Occasionnel
Supporter XLD
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
 

Dranreb

XLDnaute Barbatruc
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
 

AtTheOne

XLDnaute Accro
Supporter XLD
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

  • avct FAB AtTheOne.xlsx
    9.1 KB · Affichages: 0
Dernière édition:

Discussions similaires

Réponses
23
Affichages
730
Réponses
7
Affichages
524

Statistiques des forums

Discussions
313 770
Messages
2 102 235
Membres
108 181
dernier inscrit
Chr1sD