Calcul du nbr de jour par mois de plusieurs entrées de date
Résoluccm81 Messages postés 10909 Date d'inscription Statut Membre Dernière intervention -
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
- Calcul du nbr de jour par mois de plusieurs entrées de date
- Nombre de jours entre deux dates excel - Guide
- Mise a jour chrome - Accueil - Applications & Logiciels
- Mise a jour windows 10 - Accueil - Mise à jour
- Calcul moyenne excel - Guide
- Le jour de ma naissance gratuit - Télécharger - Histoire & Religion
10 réponses
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionBonjour,
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 !
++
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
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
@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 !!
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
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