Calcul du nbr de jour par mois de plusieurs entrées de date

Résolu/Fermé
stitchbouck Messages postés 127 Date d'inscription mercredi 12 janvier 2011 Statut Membre Dernière intervention 29 août 2024 - Modifié le 18 avril 2023 à 16:11
ccm81 Messages postés 10893 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 29 septembre 2024 - 24 avril 2023 à 16:42

Bonjour,

Je cherche un moyen de calculer le nombre de jours contenu entre plusieurs entrées de date par rapport à un mois donné.

Le tableau se compose d'une date de début et d'une date de fin par ligne, l'écart pouvant courir sur plusieurs mois. Ca ne déborde pas d'une année sur l'autre, mais il n'y a pas de régularité, ni d'ordre dans les dates (pas de tri possible) : Je peux avoir la 1ère ligne avec une date de début en mars 2023, une date de fin en avril 2023 et la 4ème ligne peut proposer une date en janvier 2023 et une date de sortie en février 2023.

Pour chaque mois, je cherche à avoir le nombre de jour qui le concerne, toutes lignes confondues. Dans le vrai tableau , les dates sont sur une feuille mais le résultat attendu est sur une autre du même classeur. 

Exemple ici .

https://cjoint.com/c/MDsocAUPGXD

Pouvez-vous m'aider ? Et en espérant avoir été clair...

En vous remerciant !!
Windows / Edge 112.0.1722.48

A voir également:

10 réponses

PapyLuc51 Messages postés 4380 Date d'inscription dimanche 3 mai 2009 Statut Membre Dernière intervention 1 octobre 2024 1 438
18 avril 2023 à 18:06

Bonjour,

Un exemple https://www.cjoint.com/c/MDsqeZ1BWVD

Cordialement

0
ccm81 Messages postés 10893 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 29 septembre 2024 2 421
Modifié le 18 avril 2023 à 20:34

Salut PapyLuc51

Pas mal du tout ta méthode et (surtout) ta formule !

Comme je ne pense pas trouver plus simple, je me suis lancé dans une solution macro qui évite le tableau intermédiaire (à tester bien sûr : pour les quelques exemples du fichier, on est d'accord sur le résultat, c'est déjà pas mal)

https://www.cjoint.com/c/MDsszthbBTB

Cdlmnt

0
PapyLuc51 Messages postés 4380 Date d'inscription dimanche 3 mai 2009 Statut Membre Dernière intervention 1 octobre 2024 1 438
19 avril 2023 à 06:33

Salut à tous

ccm81 je ne sais pas de quelle formule tu parles.

Si c'est celle du tableau elle n'est pas de moi ; je l'avais récupérée en 2017 dans une discussion.

Je crois que notre ami stitchbouck cherche a faire une concaténation pour avoir le détail par mois. Dans mon premier envoi cette concaténation n'affichait pas le 0 alors j'ai modifié la formule du tableau pour le faire apparaitre s'il y a 0 jour dans le mois concerné.

J'ai également modifié la formule de concaténation pour supprimer le s de jrs lorsqu'il n'y a que 0 ou 1 jour.

stitchbouck si c'est bien ce que tu cherches à faire, la formule de concaténation est déjà longue pour 4 lignes ça ne pourra se jouer que sur un minimum de lignes.

Mon essai 2 https://www.cjoint.com/c/MDteGKiVXkU

Cordialement

0
tricolore56 Messages postés 2 Date d'inscription mardi 7 mars 2023 Statut Membre Dernière intervention 6 mai 2023 1
19 avril 2023 à 06:59

Bonjour à tous,

une autre suggestion

AS

https://cjoint.com/c/MDte433bX2U

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
stitchbouck Messages postés 127 Date d'inscription mercredi 12 janvier 2011 Statut Membre Dernière intervention 29 août 2024 2
19 avril 2023 à 09:25

Bonjour,

Vous êtes trop fort(e)s !!! En effet, l'ajout d'un tableau pour décomposer les mois me convient moins et comme vous me permettez plusieurs solutions, je vais travailler sur la macro ! 

Et si je bute dessus, grâce à vous j'ai d'autres méthode possible avec vos formules et en masquant la feuille qui recevra la décomposition des dates. je n'ai pas tout capter, ni dans les formules ni dans la macro, mais j'y travaille.

Un trèèèèès grand merci à vous, je m'en vais déchiffrer cela !

++

0
ccm81 Messages postés 10893 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 29 septembre 2024 2 421
Modifié le 19 avril 2023 à 11:34

Bonjour

Si tu optes pour la macro

1. La fonction personnalisée nbj se comporte comme une fonction excel, tu peux l'utiliser sur une autre feuille sans problème.

par exemple =nbj(Feuil1!$B$3:$C$8;Feuil2!A3)

2. Elle est à tester bien sûr

3. Alt-F11 pour accéder au code (dans le Module 1)

Bonne journée

0
PapyLuc51 Messages postés 4380 Date d'inscription dimanche 3 mai 2009 Statut Membre Dernière intervention 1 octobre 2024 1 438
Modifié le 21 avril 2023 à 07:31

Salut à tous,

stitchbouck, j'ai vu que tu voulais privilégier une macro. 

J'ai continué dans l'emploi de tableaux intermédiaires pour arriver à une concaténation qui ne mentionne que les N° où il y a au moins 1 jour ; s'il n'y a pas de jour sur le mois ça inscrit "Aucun jour".

Je trouve que c'est plus aéré.

A toi de voir si tu peux/veux concrétiser ça dans ton code

https://www.cjoint.com/c/MDvfEjxUzBU

Cordialement

0
stitchbouck Messages postés 127 Date d'inscription mercredi 12 janvier 2011 Statut Membre Dernière intervention 29 août 2024 2
24 avril 2023 à 14:18

Merci infiniment pour vos recherches !!! 

je vais rester sur la macro, je comprends mieux ce qu'elle fait que les formules (que je garde parce que je ne suis pas  à l'abri d'en avoir besoin !)

Encore merci !

0
stitchbouck Messages postés 127 Date d'inscription mercredi 12 janvier 2011 Statut Membre Dernière intervention 29 août 2024 2
Modifié le 24 avril 2023 à 16:04

@ccm81 StatutMembre En effet ça fonctionne mais il y a un résultat erroné, erreur dont je ne trouve pas la source.

Tous les mois sont correctement pris en compte, sauf le 12ème qui indique un nombre de jour sans avoir de date correspondante... J'ai anonymisé le fichier final (j'ai supprimé quelques colonnes et feuilles annexes aussi) pour être aussi proche que possible de l'utilisation finale, mais je ne pense pas que le fichier y soit pour quelque chose.

Je déchiffre une bonne partie du code (du moins je le pense) mais je ne comprends pas encore à quoi fait référence "dd"  (les autres déclarations sont comprises.)

Ce qui fait que les deux lignes m=m1 et m=m2 ne me sont pas claires : je comprends pourquoi elles existent, à quoi elles font références (les sélections des dates de début et dates de fin) mais pas la résolution du calcul.

Apparemment "n" à un rôle de mémoire ? avec "n", on calcule toutes les lignes pour un même mois donné et sans le "n" on obtient bêtement le nombre de jours dans un mois donné. je suppose donc que "n" permet de garder le nbre de jour de la première ligne et de l'additionner au nbr de jour des lignes suivantes, toujours pour un mois donné.

Ci joint le fichier :

https://cjoint.com/c/MDymRmLVABD

Je veux bien un coup de main pour trouver pourquoi décembre compte 47 jours sans aucune date impliquant ce mois-là. Si vous supprimez toutes les dates en feuille "2023" , le calcule remonte 56 jours.

Merci beaucoup !!

0
stitchbouck Messages postés 127 Date d'inscription mercredi 12 janvier 2011 Statut Membre Dernière intervention 29 août 2024 2
24 avril 2023 à 16:09

Je viens de comprendre !!! Ce sont les cases vides ! 

si m1 = m2 alors

   si m = m1 alors n = d2-d1 +1

Donc 0-0+1... donc 1 par ligne.. je peux peut-être débloquer le truc tout seul, je reviens vers vous.

0
ccm81 Messages postés 10893 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 29 septembre 2024 2 421
24 avril 2023 à 16:27

Bonjour

Effectivement le cas des cellules dates vides n'étatit pas prévu !

Juste un petit test à ajouter

Public Function nbj(plage As Range, d As Date) As Long
Dim m1 As Long, m2 As Long, m As Long, n As Long
Dim d1 As Date, d2 As Date, li As Long, nbli As Long
Dim j1 As Long, a1 As Long, dd As String
nbli = plage.Rows.Count
m = Month(d)
n = 0
For li = 1 To nbli
  If plage.Cells(li, 1) <> "" And plage.Cells(li, 2) <> "" Then
    d1 = plage.Cells(li, 1).Value
    d2 = plage.Cells(li, 2).Value
    m1 = Month(d1)
    m2 = Month(d2)
    j1 = Day(d1)
    a1 = Year(d1)
    If m1 = m2 Then
      If m = m1 Then n = n + d2 - d1 + 1
    Else
      If m = m1 Then dd = a1 & "/" & m & "/" & finmois(a1, m): n = n + CDate(dd) - d1 + 1
      If m = m2 Then dd = a1 & "/" & m & "/01":   n = n + d2 - CDate(dd) + 1
    End If
    If m > m1 And m < m2 Then
      n = n + finmois(a1, m)
    End If
  End If
Next li
nbj = n
End Function

Cdlmnt

0
ccm81 Messages postés 10893 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 29 septembre 2024 2 421
24 avril 2023 à 16:42
    If m1 = m2 Then
      If m = m1 Then n = n + d2 - d1 + 1
    Else
      If m = m1 Then dd = a1 & "/" & m & "/" & finmois(a1, m): n = n + CDate(dd) - d1 + 1
      If m = m2 Then dd = a1 & "/" & m & "/01":   n = n + d2 - CDate(dd) + 1
    End If
    If m > m1 And m < m2 Then
      n = n + finmois(a1, m)
    End If

1. n est un totalisateur comme tu l'as compris

2. . si m1 = m2  = m > les deux dates ont le même mois et si le mois m concerné (m) est le même, on ajoute à n la différence de dates +1

3.   If m = m1 Then dd = a1 & "/" & m & "/" & finmois(a1, m): n = n + CDate(dd) - d1 + 1

si le mois concerné est celui de la date de début, dd est la date de fin de ce mois et le nombre de jours de d1 à dd se calcule de la même façon

4. même chose si m = m2, mais dd est la date de début de mois

Cdlmnt

0
stitchbouck Messages postés 127 Date d'inscription mercredi 12 janvier 2011 Statut Membre Dernière intervention 29 août 2024 2
24 avril 2023 à 16:37

C'est exactement ça et je ne cherchais pas dans la bonne direction pour la solution. 

Désolé, j'espérais mettre en scène tous les cas de figures mais j'ai oublié le cas des cases vides...

Merci !!

0