FONCTION MOD

RAMIRES

XLDnaute Nouveau
Bonjour,
Je ne suis pas spécialisée dans les fonctions excel.
J'ai recherché une méthode sur internet pour distinguer le nombre de lundi, mardi, mercredi, jeudi vendredi, samedi, dimanche dans un mois et une année. Je suis tombée sur votre forum et une réponse conseillant plusieurs méthode dont la méthode MOD.
Cette méthode fonctionne à merveille.
Je joins le fichier correspondant créé par Monique membre de ce forum, mais qui ne semble plus connectée à excel domnloads depuis 2014.
j'ai essayé de décrypter pas à pas cette méthode pour la comprendre dans ce cas de figure mais je ne trouve pas.
Je recherche une personne qui pourrait m'expliquer pas à pas cette formule dans ce fichier.
je vous remercie d'avance
cordialement
Régine
 

Pièces jointes

  • Copie de NbLundisSeb.xlsm
    35.7 KB · Affichages: 54

CISCO

XLDnaute Barbatruc
Bonjour

Dans G2 on a
SOMMEPROD((JOURSEM(LIGNE(INDIRECT(G$1&":"&DATE(ANNEE(G$1);MOIS(G$1)+1;0))))=JOURSEM($A2))*1)


G$1 contient le nombre X correspondant au 1/1/ d'une année tirée au hasard dans le système de date d'Excel (1/1/1900 = 0, 2/1/1900 = 1 et ainsi de suite).

DATE(ANNEE(G$1);MOIS(G$1)+1;0) te renvoie le nombre X+30 correspondant au dernier jour de janvier, de cette année là (Car MOIS(G$1) renvoie le nombre 1 (janvier), MOIS(G$1)+1 renvoie le nombre 2 (février). DATE(ANNEE(G$1);MOIS(G$1)+1;1) donnerait le 1er février mais comme c'est écrit DATE(ANNEE(G$1);MOIS(G$1)+1;0), on a le 31 janvier).

LIGNE(INDIRECT(G$1&":"&DATE(ANNEE(G$1);MOIS(G$1)+1;0))) renvoie tous les nombres de X à X+30 (Tout cela fonctionne ainsi car SOMMEPROD fonctionne comme une fonction matricielle, sinon, tu n'aurai que le X).

JOURSEM(blabla) renvoie un nombre correspondant à la position de blabla dans la semaine (1 pour dimanche, 2 pour lundi, 3 pour mardi et ainsi de suite).

(JOURSEM(LIGNE(INDIRECT(G$1&":"&DATE(ANNEE(G$1);MOIS(G$1)+1;0))))=JOURSEM($A2)) renvoie une série de VRAI (si JOURSEM(LIGNE(INDIRECT(G$1&":"&DATE(ANNEE(G$1);MOIS(G$1)+1;0)))) renvoie le même nombre que le nombre renvoyé par JOURSEM($A2) et FAUX (dans le cas contraire)).

(JOURSEM(LIGNE(INDIRECT(G$1&":"&DATE(ANNEE(G$1);MOIS(G$1)+1;0))))=JOURSEM($A2))*1 renvoie une série de 1 et de 0.

SOMMEPROD(....) fait la somme de ces 1.

Pour voir tous ces résultats intermédiaires, tu sélectionnes la cellule G2, puis tu cliques sur Formule, puis sur Evaluation de formule.

Pour voir ce que donne une seule fonction, tu cliques sur le nom de la fonction dans la formule dans la barre de formule, puis sur fx juste devant cette barre.

@ plus

P.S : Au passage, une pensée pour Monique.
 
Dernière édition:

Dugenou

XLDnaute Barbatruc
Hello Cisco,
Oui une pensée pour Monique et à son grand art, elle qui a fait une autre formule avec que des MOD dans la colonne K qui, je pense est le point de départ de la question de Ramires.
Merci d'avance pour ton éclairage savant !
 

chris

XLDnaute Barbatruc
Bonjour à tous
Une pensée aussi pour Monique qui continue de là-haut à aider les xldiens avec ses formules magiques

Pour compléter l'excellente explication de Cisco :) :
dans la fenêtre d'évaluation il y a le bouton pas à pas détaillé.

On peut aussi sélectionner dans la barre de formule, des parties de formule et appuyer sur la touche F9 pour évaluer cette partie...

Coucou Dugenou : pas rafraîchi...;)
 

CISCO

XLDnaute Barbatruc
Bonjour

Hello Cisco,
Oui une pensée pour Monique et à son grand art, elle qui a fait une autre formule avec que des MOD dans la colonne K qui, je pense est le point de départ de la question de Ramires.
Merci d'avance pour ton éclairage savant !

Et voui, c'est l'explication des formules utilisant MOD qu'il faut. Pas le temps pour le moment. J'essayerai plus tard de comprendre comment elle fonctionne.

@ plus
 

RAMIRES

XLDnaute Nouveau
Bonjour à tous, je vous remercie pour toutes ces réponses. je suis un peu émue, je ne savais pas pour Monique et ce que je crois comprendre me peine.
Effectivement j'ai essayé de comprendre la formule avec MOD, mais les explications que vous m'avez fournies sont très intéressantes et j'essaierais d'en faire très bon profit.
je vais également essayer de comprendre avec les touches pour les parties de formules avec MOD.
Merci à vous tous.
bien cordialement
Régine
 

CISCO

XLDnaute Barbatruc
Bonjour

Alors, pour ce qui est de la formule dans K2
Code:
(DATE(ANNEE(K$1);MOIS(K$1)+1;1)-MOD(DATE(ANNEE(K$1);MOIS(K$1)+1;1)+6-MOD($A2;7);7)-K$1+MOD(K$1+6-MOD($A2;7);7))/7
...

En fait, avec cette formule, on compte un nombre de semaines...

Quelques petites transformations avant d'expliquer cette formule :
* DATE(ANNEE(K$1);MOIS(K$1)+1;1)+6 donne le nombre correspondant au premier jour (à cause du 1) du mois suivant (à cause du +1) la date donnée dans K1 dans le système de datation d'Excel, + 6 jours. Si dans K1 on a janvier, cela donne le 7 février. On peut donc faire directement avec DATE(ANNEE(K$1);MOIS(K$1)+1;7).
* Si on regarde bien la formule, on voit qu'il y a deux parties composée de la même manière, aux signes près, mises en gris et vert ci-dessous
(DATE(ANNEE(K$1);MOIS(K$1)+1;1)-MOD(DATE(ANNEE(K$1);MOIS(K$1)+1;1)+6 -MOD($A2;7);7) -K$1+MOD(K$1+6-MOD($A2;7);7))/7
avec DATE(ANNEE(K$1);MOIS(K$1)+1;1) correspondant à K$1
et MOD(DATE(ANNEE(K$1);MOIS(K$1)+1;1)+6 -MOD($A2;7);7) à MOD(K$1+6-MOD($A2;7);7).
En remplaçant le ;1)+6 par ;7) et le -...- par -(...+...), on peut transformer cette formule sous la forme
(DATE(ANNEE(K$1);MOIS(K$1)+1;1)-MOD(DATE(ANNEE(K$1);MOIS(K$1)+1;7)-MOD($A2;7);7)
-(K$1-MOD(K$1+6-MOD($A2;7);7)))/7.

Regardons uniquement la partie grise.
DATE(ANNEE(K$1);MOIS(K$1)+1;1) donne le 1er jour du mois suivant la date donnée dans K1.
DATE(ANNEE(K$1);MOIS(K$1)+1;7) donne le 7ème jour du mois suivant la date donnée dans K1.
MOD($A2;7) donne la position du jour dans A2 dans la semaine, avec dimanche -->1, lundi -->2, ..., vendredi --> 6 et samedi --> 0 (un peu comme JOURSEM(A2), sauf pour les samedis). Ici, MOD($A2;7) = 2.

Exemple 1 : Donc, si DATE(ANNEE(K$1);MOIS(K$1)+1;1) est un mardi, DATE(ANNEE(K$1);MOIS(K$1)+1;7) sera un lundi (6 jours après le mardi précédent)
DATE(ANNEE(K$1);MOIS(K$1)+1;7)-MOD($A2;7) = DATE(ANNEE(K$1);MOIS(K$1)+1;7)-2 sera un samedi (2 jours avant le lundi à cause du -2)
MOD(DATE(ANNEE(K$1);MOIS(K$1)+1;7)-MOD($A2;7);7) donnera 0 (puisque MOD(samedi;7) = 0).
DATE(ANNEE(K$1);MOIS(K$1)+1;1)-MOD(DATE(ANNEE(K$1);MOIS(K$1)+1;7)-MOD($A2;7);7) = DATE(ANNEE(K$1);MOIS(K$1)+1;1) - 0, donc mardi 1er février

Exemple 2 : Si DATE(ANNEE(K$1);MOIS(K$1)+1;1) est un mercredi, DATE(ANNEE(K$1);MOIS(K$1)+1;7) sera un mardi (6 jours après le mercredi précédent))
DATE(ANNEE(K$1);MOIS(K$1)+1;7)-MOD($A2;7) = DATE(ANNEE(K$1);MOIS(K$1)+1;7)-2 sera un dimanche
MOD(DATE(ANNEE(K$1);MOIS(K$1)+1;7)-MOD($A2;7);7) donnera 1 (puisque MOD(dimanche;7) = 1).
DATE(ANNEE(K$1);MOIS(K$1)+1;1)-MOD(DATE(ANNEE(K$1);MOIS(K$1)+1;7)-MOD($A2;7);7) = DATE(ANNEE(K$1);MOIS(K$1)+1;1)-1, donc le dernier mardi de janvier


Exemple 3 : Si DATE(ANNEE(K$1);MOIS(K$1)+1;1) est un jeudi, DATE(ANNEE(K$1);MOIS(K$1)+1;7) sera un mercredi
DATE(ANNEE(K$1);MOIS(K$1)+1;7)-MOD($A2;7) = DATE(ANNEE(K$1);MOIS(K$1)+1;7)-2 sera un lundi
MOD(DATE(ANNEE(K$1);MOIS(K$1)+1;7)-MOD($A2;7);7) donnera 2.
DATE(ANNEE(K$1);MOIS(K$1)+1;1)-MOD(DATE(ANNEE(K$1);MOIS(K$1)+1;7)-MOD($A2;7);7) = DATE(ANNEE(K$1);MOIS(K$1)+1;1)-2, donc le dernier mardi de janvier (2 jours avant le jeudi 1er février)

En prenant d'autres exemples, on constate que cette formule
DATE(ANNEE(K$1);MOIS(K$1)+1;1)-MOD(DATE(ANNEE(K$1);MOIS(K$1)+1;7)-MOD($A2;7);7)
donne toujours une date correspondant à un mardi, soit le mardi 1er février, soit le dernier mardi du mois de janvier (donc après le dernier lundi du mois de janvier).

De même, la partie en vert donne toujours, soit le dernier mardi du mois de décembre, soit le mardi 1er janvier (donc avant le premier lundi du mois de janvier).

La soustraction de ces deux parties donne le nombre de jours et une fois divisée par 7, le nombre de semaines (= nombre de lundis du mois de janvier) pour aller du "mardi vert" au "mardi gris", donc les semaines comprenant le premier lundi, le second, le 3ème... et le dernier lundi du mois de janvier.

Dans K3 (nombre de mardi du mois de janvier) , on a le nombre de semaines pour aller du "mercredi vert" au "mercredi gris",
dans K4 (nombre de mercredi du mois de janvier), le nombre de semaines séparant le "jeudi vert" du "jeudi gris", et ainsi de suite.

@ plus
 
Dernière édition:

CISCO

XLDnaute Barbatruc
Bonjour

Une autre possibilité en pièce jointe pour obtenir le nombre de lundi dans O2, le nombre de mardi dans O3, et ainsi de suite.

@ plus
 

Pièces jointes

  • NbLundisSeb-1ter.xlsm
    39.1 KB · Affichages: 39
Dernière édition:

Si...

XLDnaute Barbatruc
Bonjour


J’ai toujours été époustouflé par les formules de Monique (merci à toi).

Voici une fonction personnelle qui pourrait tenter ceux qui sont, comme moi, de piètres « formulistes » qui ne refusent pas le VBA.
VB:
Function JM(j As Byte, d As Range)
  Dim nj As Byte, n As Byte, k As Byte
  nj = DateSerial(Year(d), Month(d) + 1, 1) - DateSerial(Year(d), Month(d), 1)
  For n = 1 To nj
      If Weekday(DateSerial(Year(d), Month(d), n)) = j Then k = k + 1
  Next
  JM = k
End Function
 

Pièces jointes

  • Copie de Copie de NbLundisSeb.xlsm
    18.6 KB · Affichages: 38

RAMIRES

XLDnaute Nouveau
bonjour à tout le monde. Je remercie toute l'équipe qui a bien voulu se pencher sur ce problème de recensement des nombre de jours de la semaine dans un mois, une année.
Je vous remercie pour toutes les réponses qui m'ont été apportées et qui vont m'aider à comprendre ces formules , ainsi que les codes vba. Je pourrais ainsi les appliquer dans d autres situations.
Bien a vous tous.
Regine
 

RAMIRES

XLDnaute Nouveau
Re bonjour à vous tous, Les formules que vous m'avez fournies pour le calcul du nombre de lundi mardi mercredi jeudi vendredi samedi, dimanche, sont très très efficaces ; et je tiens encore à vous remercier et à vous rendre hommage.
Je souhaiterais savoir s'il est possible de rajouter dans la formule, une procédure qui permettent de décompter le nombre de lundi, mardi, mercredi, jeudi, vendredi, samedi, pour la période donnée, sans les jours féries.
En fait nous devons répertorier, par exemple, le nombre de lundi, mardi, mercredi, jeudi, vendredi, samedi, par mois , et par année, mais sans compter les jours fériés.
Je ne sais pas si c'est bien explicite et si c'est possible. Vous me direz.
bien à vous tous
et avec tous mes remerciements.
 

CISCO

XLDnaute Barbatruc
Bonjour

Cf. les formules en rouge dans la pièce jointe.

Il faut compléter la colonne AC en y écrivant le début des dates correspondant aux jours fériés sous la forme 01/01 pour le 1er janvier, 11/11 pour le 11 novembre, et ainsi de suite. Les formules en rouge utilisent la plage dynamique fériés (définie dans le gestionnaire de noms) correspondant à la partie listant les jours fériés dans la colonne AD. On peut tirer les formules rouges vers la droite. Il faut toujours qu'il y ait un mois de plus que désiré dans la première ligne. Attention au changement d'année dans la formule dans cette ligne uniquement.

@ plus
 

Pièces jointes

  • NbLundisSeb-1quatre.xlsm
    36.1 KB · Affichages: 27
Dernière édition:

RAMIRES

XLDnaute Nouveau
Bonjour CISCO, ce sont des formules magiques ; c'est impeccable. je ne sais comment vous remercier.
J'imagine que pour arriver à niveau il faut avoir fait des études d'ingénieur, ou d'informatique ?
Je ne crois pas que l'on puisse arriver à se former sans avoir de connaissance mathémtiques ou informatiques.
A bientôt.
 

Discussions similaires

Réponses
3
Affichages
433

Statistiques des forums

Discussions
312 508
Messages
2 089 134
Membres
104 042
dernier inscrit
tropsy89