Somme de Nb Jours, Si Compris entre 2 dates

  • Initiateur de la discussion Initiateur de la discussion systmd
  • Date de début Date de début

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 !

S

systmd

Guest
Bonsoir,

Je cherche à récuperer le nombre de jour de plusieurs périodes en fonction d'une plage de 12 mois.

[edit] PJ
Merci
 
Dernière modification par un modérateur:
Re : Somme de Nb Jours, Si Compris entre 2 dates

Bonsoir,

Pas sûre du tout d'avoir compris la question ... 😱
A tout hasard est-ce que cette formule irait ?

Code:
=SOMMEPROD((B12:B15>=B2)*(C12:C15<=C2)*(D12:D15))

Bonne soirée,

mth
 
Re : Somme de Nb Jours, Si Compris entre 2 dates

Bonsoir mth,

J'avoue ne pas avoir ètè clair, aussi j'ai mis une petite explication graphique en ligne 18, qui je pense devrait t'éclairer un peu plus.

Merci d'avance
 
Re : Somme de Nb Jours, Si Compris entre 2 dates

Bonsoir systmd, mth
Ceci, peut-être ?
Code:
[COLOR=DarkSlateGray][B]=SOMME(SI(SI(C12:C15<C$2;C12:C15;C$2)-SI(B12:B15>B$2;B12:B15;B$2)>0;SI(C12:C15<C$2;C12:C15;C$2)-SI(B12:B15>B$2;B12:B15;B$2);))[/B][/COLOR]
(Formule évidemment matricielle.)
ROGER2327
#4690


Vendredi 6 Sable 138 (Saint Navet et Perruque, humanistes, SQ)
16 Frimaire An CCXIX
2010-W49-1T22:58:33Z
 
Re : Somme de Nb Jours, Si Compris entre 2 dates

Bonsoir ROGER2327,BCharef


Impécable 🙂, mais j'aurais aimé une formule sans passer par les matricielles.

Je suppose que c'est du coté de SOMMEPROD qu'il faille regarder.

Merci à tous les deux, en tout cas pour les formules. 😉
 
Dernière modification par un modérateur:
Re : Somme de Nb Jours, Si Compris entre 2 dates

Re...
Je n'ai rien trouvé pour éviter une formule matricielle, même avec SOMMEPROD. Mais les vrais spécialistes de la formule (dont je ne suis pas) n'ont peut-être pas dit leur dernier mot…
Attendons.
ROGER2327
#4691


Vendredi 6 Sable 138 (Saint Navet et Perruque, humanistes, SQ)
16 Frimaire An CCXIX
2010-W49-1T23:20:32Z
 
Dernière édition:
Re : Somme de Nb Jours, Si Compris entre 2 dates

Suite …
On peut aussi envisager une fonction personnalisée :
Code:
[COLOR=DarkSlateGray][B]Function toto(d1, d2, p1 As Range, p2 As Range)
Dim i&, x&, wf
  toto = ""
  If p1.Rows.Count <> p2.Rows.Count Then Exit Function
  Set wf = Application.WorksheetFunction
  For i = 1 To p1.Rows.Count
    x = x + wf.Max(0, wf.Min(d2, p2.Cells(i, 1)) - wf.Max(d1, p1.Cells(i, 1)))
  Next i
  toto = x
End Function[/B][/COLOR]
Dans votre exemple,
Code:
[COLOR=DarkSlateGray][B]=toto(B2;C2;B12:B15;C12:C15)[/B][/COLOR]
renverra 102.
ROGER2327
#4692


Vendredi 6 Sable 138 (Saint Navet et Perruque, humanistes, SQ)
16 Frimaire An CCXIX
2010-W49-1T23:50:45Z
 
Re : Somme de Nb Jours, Si Compris entre 2 dates

Ah oui!... 😉

Effectivement c'est une solution et celà sera beaucoup plus simple à l'utilisation.
je vais donc l'adopter.


Merci beaucoup, bon boulot.

Bonne soirée, euh.... matinée maintenant 🙂
 
Re : Somme de Nb Jours, Si Compris entre 2 dates

Bonjour à tous

Aprés plusieurs test il subsiste une erreur.
il manque un jour à chaque décompte car les dates sont incluses

j'ai corrigé comme suit

Code:
Function toto(d1, d2, p1 As Range, p2 As Range)
Dim i&, x&, wf
  toto = ""
  If p1.Rows.Count <> p2.Rows.Count Then Exit Function
  Set wf = Application.WorksheetFunction
  For i = 1 To p1.Rows.Count
    x = x + wf.Max(0, wf.Min(d2, p2.Cells(i, 1)) - wf.Max(d1, p1.Cells(i, 1))[COLOR="Red"] +1 )

   ' en cas d'absence de date pour éviter 366
   If p1.Cells="" or  p1.Cells="" then 
      toto = ""
      Exit Function
      End If[/COLOR]
  Next i
  toto = x
End Function

[résolu]
Merci encore
 
Dernière modification par un modérateur:
Re : Somme de Nb Jours, Si Compris entre 2 dates

Bonsoir ROGER2327

Voilà la bonne version je pense

Code:
Function NbJourPlage(d1, d2, p1 As Range, p2 As Range)
Dim i&, x&, wf
  NbJourPlage = ""
  If p1.Rows.Count <> p2.Rows.Count Then Exit Function
  Set wf = Application.WorksheetFunction
  For i = 1 To p1.Rows.Count
      x = x + wf.Max(0, wf.Min(d2, p2.Cells(i, 1)) - wf.Max(d1, p1.Cells(i, 1)) + 1)
    If (p1.Cells(i, 1) = "") Or (p2.Cells(i, 1) = "") Then
        NbJourPlage = ""
        Exit Function
        End If

  Next i
  NbJourPlage = x
End Function

en mode matricielle
Code:
=SOMME(SI(SI(C12:C15<C$2;C12:C15;C$2)-SI(B12:B15>B$2;B12:B15;B$2)+1>0;SI(C12:C15<C$2;C12:C15;C$2)-SI(B12:B15>B$2;B12:B15;B$2)+1;))
 
Re : Somme de Nb Jours, Si Compris entre 2 dates

Re…
Compris !
Toujours le problème des intervalles et des poteaux.

Pour ce qui est de la gestion d'éventuelles erreurs, je propose ceci :
Code:
[COLOR=DarkSlateGray][B]Function toto(d1, d2, p1 As Range, p2 As Range)
Application.Volatile
Dim i&, x&, wf
  toto = ""
  If p1.Rows.Count <> p2.Rows.Count Then Exit Function
  Set wf = Application.WorksheetFunction
  For i = 1 To p1.Rows.Count
    If IsDate(p1.Cells(i, 1)) And IsDate(p2.Cells(i, 1)) Then x = x + wf.Max(0, wf.Min(d2, p2.Cells(i, 1)) - wf.Max(d1, p1.Cells(i, 1)) + 1)
  Next i
  toto = x
End Function[/B][/COLOR]
qui permet de traiter un tableau incomplet en ignorant les lignes incomplètes ou mal remplies.
ROGER2327
#4700


Dimanche 8 Sable 138 (Conception du Père Ubu (AJ), SS)
18 Frimaire An CCXIX
2010-W49-3T00:14:16Z
 
Re : Somme de Nb Jours, Si Compris entre 2 dates

Bonsoir ROGER 2327

Ouf enfin rentré, que de neige...

Ta réponse est plus Pro que la mienne, je valide 😉
Pas beaucoup d'adepte du SOMMEPROD, peut-être pas possible?

Merci pour tout
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
12
Affichages
361
  • Résolu(e)
Microsoft 365 DateDif()
Réponses
5
Affichages
395
Retour