Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

 

Pièces jointes

  • 1721393762441.png
    2.4 KB · Affichages: 2
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

halecs93

XLDnaute Impliqué
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
merci pour votre aide
 

onyirimba

XLDnaute Occasionnel
Supporter XLD
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
4
Affichages
300
Réponses
10
Affichages
404
Réponses
23
Affichages
908
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…