Fonction qui coince pour obtenir la date du dernier dimanche du mois

Magic_Doctor

XLDnaute Barbatruc
Bonsoir à tous,

J'ai essayé de réaliser une fonction permettant de connaître la date d'un jour quelconque de la semaine quelle que soit sa position dans un mois donné (par exemple : 3ème lundi du mois de mars 2009). Si cette position va au-delà du mois en question, on obtiendra la date correspondante (par exemple 63ème dimanche après le début du mois choisi comme paramètre de la fonction).
La fonction a l'air de bien marcher, sauf concernant l'option de trouver la date du dernier dimanche (par exemple) d'un mois donné. Suivant les années elle peut se tromper d'une semaine.
Cette fonction est prévue pour fonctionner en français, anglais et espagnol. Afin d'éviter les erreurs, elle fait appel à une autre fonction (de Ti) qui supprime tous les accents. Mercredi en espagnol s'écrit miércoles, on peut très facilement oublier l'accent sur le e. Idem pour février en français.

Merci pour toute aide au sujet de cette fonction.
 

Pièces jointes

  • dates.xls
    47 KB · Affichages: 105
  • dates.xls
    47 KB · Affichages: 110
  • dates.xls
    47 KB · Affichages: 114

job75

XLDnaute Barbatruc
Re : Fonction qui coince pour obtenir la date du dernier dimanche du mois

Bonsoir Magic Doctor,

Ci-joint mon fichier.

Entrer en A2 (mise au format "jjjj") une date quelconque du mois étudié.

Puis en B2 la formule matricielle (ouf !) :

Code:
=GRANDE.VALEUR(SI(JOURSEM(SI(ESTNUM(DATE(ANNEE(A2);MOIS(A2);LIGNE($1:$31)));DATE(ANNEE(A2);MOIS(A2);LIGNE($1:$31))))=[SIZE="3"][B]1[/B][/SIZE];DATE(ANNEE(A2);MOIS(A2);LIGNE($1:$31)));[SIZE="3"][COLOR="Red"]1[/COLOR][/SIZE])

Edit : on peut utiliser cette formule pour déterminer la position d'un jour quelconque. Il faut alors remplacer GRANDE.VALEUR par PETITE.VALEUR et jouer sur les 2 paramètres (en gras pour le jour, en rouge pour la position).

Bonne fin de soirée.
 

Pièces jointes

  • Dernier dimanche.xls
    21 KB · Affichages: 116
  • Dernier dimanche.xls
    21 KB · Affichages: 111
  • Dernier dimanche.xls
    21 KB · Affichages: 101
Dernière édition:

job75

XLDnaute Barbatruc
Re : Fonction qui coince pour obtenir la date du dernier dimanche du mois

Re,

Ah mais non, j'oubliais que ça ne peut pas marcher avec la fonction DATE. En effet, DATE(2009;2;31) renvoie 03/03/2009 et non pas une erreur...

Utiliser donc, sur le même principe, la formule matricielle suivante :

Code:
=GRANDE.VALEUR(SI(JOURSEM(SI(ESTNUM(1*(LIGNE($1:$31)&"/"&MOIS(A2)&"/"&ANNEE(A2)));1*(LIGNE($1:$31)&"/"&MOIS(A2)&"/"&ANNEE(A2))))=[B][SIZE="3"]1[/SIZE][/B];1*(LIGNE($1:$31)&"/"&MOIS(A2)&"/"&ANNEE(A2)));[COLOR="Red"][SIZE="3"]1[/SIZE][/COLOR])

A+
 

Pièces jointes

  • Dernier dimanche.xls
    21 KB · Affichages: 96
  • Dernier dimanche.xls
    21 KB · Affichages: 98
  • Dernier dimanche.xls
    21 KB · Affichages: 102

Magic_Doctor

XLDnaute Barbatruc
Re : Fonction qui coince pour obtenir la date du dernier dimanche du mois

Merci Job pour ta réponse que je conserve en cas de besoin.
Mais, pour des raisons techniques, je voulais résoudre le problème grâce à une fonction.

Bonne fin de soirée.
 

Monique

Nous a quitté
Repose en paix
Re : Fonction qui coince pour obtenir la date du dernier dimanche du mois

Bonjour,

Fonction non, formule oui
1ers et derniers lundis, mardis et les autres
 

Pièces jointes

  • DernierDimancheMagicDoctor.zip
    3.7 KB · Affichages: 96

ROGER2327

XLDnaute Barbatruc
Re : Fonction qui coince pour obtenir la date du dernier dimanche du mois

Bonsoir à tous
Cette formule donne le dernier dimanche du mois :
Code:
=DATE(année;mois+1;1)-1-MOD(JOURSEM(DATE(année;mois+1;1)-1;2);7)
Bonne nuit !
ROGER2327
 

ROGER2327

XLDnaute Barbatruc
Re : Fonction qui coince pour obtenir la date du dernier dimanche du mois

RE...
J'oubliais : en remplaçant k par 3 (respectivement 2, 1, 0, -1, -2, -3) dans
Code:
=DATE(année;mois+1;1)-1-MOD(JOURSEM(DATE(année;mois+1;1)+[COLOR="Red"][B]k[/B][/COLOR];2);7)
on obtient le dernier mercredi (respectivement jeudi, vendredi, samedi, dimanche, lundi, mardi) du mois.​
ROGER2327
 

ROGER2327

XLDnaute Barbatruc
Re : Fonction qui coince pour obtenir la date du dernier dimanche du mois

Bonjour à tous
Personne n'ayant proposé de fonction à notre ami Magic_Doctor, je m'y colle. Le code original est assez obscur, faisant notamment appel à une multitude de variables intermédiaires parfaitement inutiles et à une boucle Do ... Loop hors de propos dans un calcul ne laissant aucune place au tâtonnement. Je l'ai donc réécrit sur une base raisonnée. (Mon principe est que la réflexion précède l'action. En programmation, il se traduit ainsi : Commençons par réfléchir avant de nous précipiter sur le clavier. Ce faisant, le code ne pourra que gagner en clarté.) Le code de la fonction DateJourSemaine devient :
Code:
Function DateJourSemaine(Année As Integer, Mois As String, JourSemaine As String, RangJourSemaine As Integer, AuDelaMois) As String
'Révision : ROGER2327 - 5 Germinal CCXVII

Dim mes As Byte, dia As Byte
Dim DateCherchée, DerDuMois [COLOR="SeaGreen"]'DerDuMois renvoie la date de la dernière occurence du jour
                            'cherché dans le mois passé en paramètre.[/COLOR]

    Select Case MajMinSansAccent(Mois, 0)
    Case "janvier", "january", "enero": mes = 1
    Case "fevrier", "february", "febrero": mes = 2
    Case "mars", "march", "marzo": mes = 3
    Case "avril", "april", "abril": mes = 4
    Case "mai", "may", "mayo": mes = 5
    Case "juin", "june", "junio": mes = 6
    Case "juillet", "july", "julio": mes = 7
    Case "aout", "august", "agosto": mes = 8
    Case "septembre", "september", "septiembre", "setiembre": mes = 9
    Case "octobre", "october", "octubre": mes = 10
    Case "novembre", "november", "noviembre": mes = 11
    Case "decembre", "december", "diciembre": mes = 12
    Case Else: DateCherchée = "?": GoTo fin
    End Select

    Select Case MajMinSansAccent(JourSemaine, 0)
    Case "lundi", "monday", "lunes": dia = 1
    Case "mardi", "tuesday", "martes": dia = 2
    Case "mercredi", "wednesday", "miercoles": dia = 3
    Case "jeudi", "thursday", "jueves": dia = 4
    Case "vendredi", "friday", "viernes": dia = 5
    Case "samedi", "saturday", "sabado": dia = 6
    Case "dimanche", "sunday", "domingo": dia = 7
    Case Else: DateCherchée = "?": GoTo fin
    End Select

[B][COLOR="DarkRed"]    DerDuMois = DateSerial(Année, mes + 1, 1) - 1 - (Weekday(DateSerial(Année, mes + 1, 1) - dia, vbMonday) - 1) Mod 7
    DateCherchée = DerDuMois + 7 * (IIf(RangJourSemaine < 0, RangJourSemaine + 1, RangJourSemaine) - 1 - Day(DerDuMois - 1) \ 7)
    If AuDelaMois = 0 Then
        If DateCherchée >= DateSerial(Année, mes + 1, 1) Then DateCherchée = DerDuMois
        If DateCherchée < DateSerial(Année, mes, 1) Then DateCherchée = DerDuMois - 7 * (Day(DerDuMois - 1) \ 7)
    End If[/COLOR][/B]

fin:
    DateJourSemaine = DateCherchée
End Function
La fonction MajMinSansAccent n'est pas modifiée.​
Bonne soirée.
ROGER2327
 

Pièces jointes

  • Copie de dates.xls
    46.5 KB · Affichages: 109
  • Copie de dates.xls
    46.5 KB · Affichages: 102
  • Copie de dates.xls
    46.5 KB · Affichages: 98
Dernière édition:

Magic_Doctor

XLDnaute Barbatruc
Re : Fonction qui coince pour obtenir la date du dernier dimanche du mois

Bonjour à tous,

Merci Monique pour ta "joyita" et merci à Job et Roger pour leurs solutions.
Je n'ai pu vous répondre plus tôt pour un problème de connexion et c'est tant mieux, car cela m'a obligé à résoudre le problème de cette fonction récalcitrante qui, maintenant, marche... du moins je l'espère.
Comme toute fonction, son intérêt est de pouvoir aussi être facilement utilisée dans une procédure.

Bonne fin de journée à tous.
 

Pièces jointes

  • Compilation Dates.zip
    18.2 KB · Affichages: 62

Magic_Doctor

XLDnaute Barbatruc
Re : Fonction qui coince pour obtenir la date du dernier dimanche du mois

Bonsoir Roger,

Les grands esprits se rencontrent !
À peine ai-je envoyé mon dernier message que je croise le vôtre !

Vous avez tout à fait raison et les mots n'étaient pas faibles. Non seulement ce que j'avais écrit il y a voilà 3 ou 4 ans était obscur, mais même plutôt tordu. En me relisant j'avais presque honte d'adresser cette "perle" à ce forum. Je l'ai donc revue et corrigée et m'empresse d'essayer votre solution qui, en première lecture me paraît déjà et plus concise et plus élégante.
 

Magic_Doctor

XLDnaute Barbatruc
Re : Fonction qui coince pour obtenir la date du dernier dimanche du mois

Bravo Roger, on ne peut pas faire plus simple et plus concis.

Je me suis permis de rajouter dans votre fonction la possibilité de choisir les mois et dates en numérique.
Définitivement je conserve votre solution.

Bonne fin de soirée.
 

Pièces jointes

  • Compilation Dates2.zip
    21.6 KB · Affichages: 61

ROGER2327

XLDnaute Barbatruc
Re : Fonction qui coince pour obtenir la date du dernier dimanche du mois

Bonsoir à tous,
Hier, j'ai oublié de signaler qu'on pouvait donner une valeur négative au paramètre RangJourSemaine. Cela permet de trouver un jour donné un certain nombre de semaines avant le début du mois choisi.
(Note : 0 (zéro) et -1 donnent le même résultat.)​
Bonne soirée.
ROGER2327
 

Magic_Doctor

XLDnaute Barbatruc
Re : Fonction qui coince pour obtenir la date du dernier dimanche du mois

Bonjour Roger et à tous,

Afin de rendre cette fonction la plus polyvalente possible, j'ai envisagé de pouvoir obtenir la date du nième jour de la semaine à partir du 1er d'un mois donné (3ème mercredi à partir du 1er mars 2009) mais aussi à partir de nimporte quel jour du mois (3ème mercredi à partir du 15 mars 2009).
Malheureusement la fonction heurte sur la date correspondant à la dernière parution du jour choisi de la semaine dans le mois. Tant que le jour du mois à partir duquel doit s'effectuer la recherche est inférieur à la dernière parution du jour de la semaine choisi dans le mois, le résultat est juste, en revanche, si le jour du mois à partir duquel doit s'effectuer la recherche est >= à la dernière parution du jour de la semaine choisi dans le mois, le résultat est des plus curieux.

Un grand merci pour compléter cette fonction.
 

Pièces jointes

  • Compilation Dates5.zip
    19.1 KB · Affichages: 49
  • Compilation Dates5.zip
    19.1 KB · Affichages: 50
  • Compilation Dates5.zip
    19.1 KB · Affichages: 51

Magic_Doctor

XLDnaute Barbatruc
Re : Fonction qui coince pour obtenir la date du dernier dimanche du mois

Excusez-moi, mais une erreur s'était glissée dans la fonction de l'exemple.
 

Pièces jointes

  • Compilation Dates5.zip
    19.1 KB · Affichages: 61
  • Compilation Dates5.zip
    19.1 KB · Affichages: 58
  • Compilation Dates5.zip
    19.1 KB · Affichages: 61

ROGER2327

XLDnaute Barbatruc
Re : Fonction qui coince pour obtenir la date du dernier dimanche du mois

Bonjour à tous
Dans le classeur joint, deux formules à tester. Si l'une d'elle convient, il ne sera pas difficile de la transformer en fonction.
Compte tenu du changement de problématique de Magic_Doctor, je ne me fonde plus sur la recherche du dernier dimanche du mois.​
À bientôt, peut-être...
ROGER2327
 

Pièces jointes

  • Date_décalée.xls
    27 KB · Affichages: 99
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 196
Messages
2 086 097
Membres
103 116
dernier inscrit
kutobi87