Calcul du nbr de jour par mois de plusieurs entrées de date
Résolu/Ferméccm81 Messages postés 10900 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 2 novembre 2024 - 24 avril 2023 à 16:42
- Calcul du nbr de jour par mois de plusieurs entrées de date
- Calcul moyenne excel - Guide
- Excel mois en lettre ✓ - Forum Excel
- Mise a jour chrome - Accueil - Applications & Logiciels
- Airpods 3 date de sortie - Guide
10 réponses
18 avril 2023 à 18:06
Bonjour,
Un exemple https://www.cjoint.com/c/MDsqeZ1BWVD
Cordialement
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
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
19 avril 2023 à 06:59
Bonjour à tous,
une autre suggestion
AS
https://cjoint.com/c/MDte433bX2U
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question19 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 !
++
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
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
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 !
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 !!
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.
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
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
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 !!