le premier dimanche du mois, reprendre la date

jmst

XLDnaute Junior
Bonjour,
je cherche une formule qui serait:
"si la date est inférieur ou égal au le 1er dimanche du mois en cours, afficher le 1er dimanche du mois en cours, si la date est supérieur au 1er dimanche du mois en cours, afficher le 1er dimanche du mois suivant"



Il y a une formule:
si la date n'est pas le 1er du mois , arrondir la date au 1er du mois suivant sinon reprendre la date, mais je n'arrive pas à la modifier pour le 1er dimanche


=SI(AUJOURDHUI()=DATE(ANNEE(AUJOURDHUI());MOIS(AUJOURDHUI())+0;1);AUJOURDHUI();DATE(ANNEE(AUJOURDHUI());MOIS(AUJOURDHUI())+1;1))

La progression souhaitée:

sam 02.janv.2016--> dim 03.janv.2016
dim 03.janv.2016--> dim 03.janv.2016
lun 04.janv.2016--> dim 07.févr.2016

sam 06.févr.2016--> dim 07.févr.2016
dim 07.févr.2016--> dim 07.févr.2016
lun 08.févr.2016--> dim 06.mars.2016

sam 05.mars.2016--> dim 06.mars.2016
dim 06.mars.2016--> dim 06.mars.2016
lun 07.mars.2016--> dim 03.avr.2016

etc


Merci pour votre aide

Les meilleurs réponse

Re : le premier dimanche du mois, reprendre la date
Citation Envoyé par Victor21
Bonjour à tous.

"=SI(JOUR(A1+7-JOURSEM(A1;2))<=7;A1+7-JOURSEM(A1;2);DATE(ANNEE(A1);MOIS(A1)+1;1)+7-
JOURSEM(DATE(ANNEE(A1);MOIS(A1)+1;1);2))"


130 car. avec $A1, 122 car. avec A1
Vous pouvez également utiliser des noms définis pour les termes récurrents.

Victor21
la formule est correct et une performance à relever: de 1900 au 5.12.9999
Hors en dessous du 1 mars 1900 (voir page 4 )
Avec si: A1 122 caractères et avec AUJOURDHUI() 202 caractères !

Une autre aussi performante

De Tontong - 3 mars 2016 à 16:57
avec un petit effort:
=SI(JOUR(A1+7-JOURSEM(A1;2))<=7;A1+7-JOURSEM(A1;2);FIN.MOIS(A1;0)+8-JOURSEM(FIN.MOIS(A1;0)+1;2))

Et une autre aussi performante

la formule est correct et une performance à relever: de 1900 au 9999
Hors en dessous du 1 mars 1900 et depuis le 6.12.9999 où elle conserve la date du 5.12.9999 à la place de donner #NOMBRE! puisque EXCEL ne peut pas afficher: Dimanche 2 janvier 10000

de job75 Une formule dérivée de la formule de Monique :
164 caractères =-RECHERCHE(-AUJOURDHUI();JOUR(FIN.MOIS(AUJOURDHUI();{1;0}))-FIN.MOIS(AUJOURDHUI();{1;0})-8+JOURSEM(FIN.MOIS(AUJOURDHUI();{1;0})-JOUR(FIN.MOIS(AUJOURDHUI();{1;0}))))
114 caractères =-RECHERCHE(-a3;JOUR(FIN.MOIS(a3;{1;0}))-FIN.MOIS(a3;{1;0})-8+JOURSEM(FIN.MOIS(a3;{1;0})-JOUR(FIN.MOIS(a3;{1;0}))))

Le FUN de job75

La solution de tontong est de loin la meilleure.


Mais en nombre de caractères on peut l'améliorer en utilisant des matrices :

Code :
=-RECHERCHE(-AUJOURDHUI();JOURSEM(FIN.MOIS(AUJOURDHUI();{0;-1})+1;2)-FIN.MOIS(AUJOURDHUI();{0;-1})-8)
115 octets - 101 caractères.

Code :
=-RECHERCHE(-A3;JOURSEM(FIN.MOIS(A3;{0;-1})+1;2)-FIN.MOIS(A3;{0;-1})-8)
117 octets - 71 caractères.


Bravo et magnifique performance de ces trois internautes

PS le faite de remplacer A1 ou A3 par AUJOURDHUI() est de la rendre autonome dans un calendrier:D
 
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Re : le premier dimanche du mois, reprendre la date

Bonjour le fil, le forum,

Désolé, prenant le train en marche j'ai cru qu'il fallait déterminer le 1er dimanche du mois en cours :mad:

Alors pour changer voici une petite fonction VBA utilisant la formule de Monique :

Code:
Function PremierDimanche(dat)
1 PremierDimanche = dat - Day(dat) + 8 - Weekday(dat - Day(dat) + 7)
If dat > PremierDimanche Then dat = DateSerial(Year(dat), Month(dat) + 1, 1): GoTo 1
End Function
Fichier joint.

Bonne journée.
Simplifions (voir #52) :​
Code:
Function PremierDimanche(dat)
1 PremierDimanche = dat - Day(dat) + 8 - Weekday(dat - Day(dat))
If dat > PremierDimanche Then dat = DateSerial(Year(dat), Month(dat) + 1, 1): GoTo 1
End Function

Et pour qui n'aime pas GOTO :​
Code:
Function PremierDimanche(dat)
If 8 < Day(dat) + Weekday(dat - Day(dat)) Then dat = DateSerial(Year(dat), Month(dat) + 1, 1)
PremierDimanche = dat - Day(dat) + 8 - Weekday(dat - Day(dat))
End Function


Bonne journée.


ℝOGER2327
#8229


Mercredi 11 Pédale 143 (Testament de Saint P. Ucello, le mal illuminé - fête Suprême Quarte)
15 Ventôse An CCXXIV, 4,3390h - chèvre
2016-W09-6T10:24:49Z
 

Modeste geedee

XLDnaute Barbatruc
Re : le premier dimanche du mois, reprendre la date

Bonsour®
Non pas Georges mais Nicolas
Ce qui se conçoit bien s'énonce clairement
Read more at Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aiséme - Dicocitations

:mad: Question à géométrie variable !!!
#8
Voici la progression à obtenir

06.02.2016 -> dim 07 février 2016
07.02.2016 -> dim 07 février 2016
08.02.2016 -> dim 06 mars 2016
09.02.2016 -> dim 06 mars 2016
05.03.2016 -> dim 06 mars 2016
06.03.2016 -> dim 06 mars 2016
07.03.2016 -> dim 03 avril 2016
:confused::confused:

#1, #17
"si la date n'est pas le 1er dimanche du mois , arrondir la date au 1er dimanche du mois suivant sinon reprendre la date."
#53
"si la date n'est pas un DIMANCHE arrondir la date au DIMANCHE suivant sinon reprendre la date."

aucune des hypothèses ci-dessus ne correspond à la progression souhaitée !!!

:rolleyes:
Dire qu'il y en a qui veulent réformer la grammaire et l'orthographe ...:mad:
 
Dernière édition:

jmst

XLDnaute Junior
Re : le premier dimanche du mois, reprendre la date

Simplifions (voir #52) :​
Code:
Function PremierDimanche(dat)
1 PremierDimanche = dat - Day(dat) + 8 - Weekday(dat - Day(dat))
If dat > PremierDimanche Then dat = DateSerial(Year(dat), Month(dat) + 1, 1): GoTo 1
End Function

Et pour qui n'aime pas GOTO :​
Code:
Function PremierDimanche(dat)
If 8 < Day(dat) + Weekday(dat - Day(dat)) Then dat = DateSerial(Year(dat), Month(dat) + 1, 1)
PremierDimanche = dat - Day(dat) + 8 - Weekday(dat - Day(dat))
End Function


Bonne journée.


ℝOGER2327
#8229


Mercredi 11 Pédale 143 (Testament de Saint P. Ucello, le mal illuminé - fête Suprême Quarte)
15 Ventôse An CCXXIV, 4,3390h - chèvre
2016-W09-6T10:24:49Z

CORRECTIF
La formule de Monique corrigée donne tous les "dimanche" dans le mois en cours (SANS erreurs

=DATE(ANNEE(A3);MOIS(A3)+1;0)

Elle n'est pas comme celle de ci-dessous, qui donne

si la date n'est pas un DIMANCHE arrondir la date au DIMANCHE suivant sinon reprendre la date.

=AUJOURDHUI()+CHOISIR(JOURSEM(AUJOURDHUI();2);6;5; 4;3;2;1;0)+N("si la date n'est pas un DIMANCHE arrondir la date au DIMANCHE suivant sinon reprendre la date.")

En VBA je n'ais pas contrôlé
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : le premier dimanche du mois, reprendre la date

La formule de Monique donne tous les "dimanche" suivant dans le mois(avec des erreurs, (par ex:le lundi 30 mars 2016 ce n'est pas = 29.03.2016)!

:confused::confused: La formule de Monique donne toujours le 1er dimanche du mois en cours, voir le fichier joint.

Comme l'a signalé Roger2327 le +7 était en effet inutile.

A+
 

Pièces jointes

  • Formule de Monique(1).xlsx
    21.1 KB · Affichages: 107

Modeste geedee

XLDnaute Barbatruc
Re : le premier dimanche du mois, reprendre la date

Bonsour®
que vient faire AUJOURDHUI() dans une formule donnant le 1er Dimanche du mois d'une date donnée ????

selon :
Voici la progression à obtenir

06.02.2016 -> dim 07 février 2016
07.02.2016 -> dim 07 février 2016
08.02.2016 -> dim 06 mars 2016
09.02.2016 -> dim 06 mars 2016
05.03.2016 -> dim 06 mars 2016
06.03.2016 -> dim 06 mars 2016
07.03.2016 -> dim 03 avril 2016
et indépendamment des hypothèses pas très claires précédentes !!!
Capture.jpg
=SI(A2<=PDM(A2);PDM(A2);PDM(MOIS.DECALER(A2;1)))
ou bien :
=PDM(MOIS.DECALER(A2;1*(A2>PDM(A2))))
avec la fonction personnalisée :
VB:
Function PDM(target As Date) As Date
'-------------------retourne le 1er dimanche du mois de la date passée en parametre
PDM = DateSerial(Year(target), Month(target), 0) + 7 - (Weekday(DateSerial(Year(target), Month(target), 0)) - 1)
End Function
 

Pièces jointes

  • Capture.jpg
    Capture.jpg
    44.3 KB · Affichages: 110
  • jmst.xls
    84 KB · Affichages: 98
  • jmst.xls
    84 KB · Affichages: 100
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Re : le premier dimanche du mois, reprendre la date

Re...


:confused::confused: La formule de Monique donne toujours le 1er dimanche du mois en cours, voir le fichier joint.
(...)
Dans le fichier joint, la formule n'est pas ce que vous appelez «la formule de Monique» (pour mémoire =A3-JOUR(A3)+8-JOURSEM(A3-JOUR(A3)+7)) qui est utilisée, mais la formule plus courte
Code:
=A3-JOUR(A3)+8-JOURSEM(A3-JOUR(A3))

En résumé :
Par définition, la fonction JOURSEM est périodique de période 7.
Ce qui signifie qu'on a toujours
JOURSEM(x + n'importe quel multiple de 7) = JOURSEM(x) = MOD(x-1;7)+1.​
«n'importe quel multiple de 7» peut être aussi bien 1x7=7 que 0x7=0.
C'est pourquoi la formule «la formule de Monique» et «la formule plus courte» donnent nécessairement le même résultat.
Ce n'est même pas la peine de vérifier sur des centaines d'exemples.


Bonne journée.


ℝOGER2327
#8230


Mercredi 11 Pédale 143 (Testament de Saint P. Ucello, le mal illuminé - fête Suprême Quarte)
15 Ventôse An CCXXIV, 5,5006h - chèvre
2016-W09-6T13:12:05Z
 

job75

XLDnaute Barbatruc
Re : le premier dimanche du mois, reprendre la date

Re,

Oui Roger, et j'ai bien dit au post #65 :

Comme l'a signalé Roger2327 le +7 était en effet inutile.

Pour revenir au VBA ceci fonctionne sur les 2 calendriers Excel, 1900 et 1904 :

Code:
Function PremierDimanche(dat)
If TypeName(dat) <> "Range" And ThisWorkbook.Date1904 Then dat = dat + 1462
1 PremierDimanche = dat - Day(dat) + 8 - Weekday(dat - Day(dat))
If dat > PremierDimanche Then dat = DateSerial(Year(dat), Month(dat) + 1, 1): GoTo 1
If ThisWorkbook.Date1904 Then PremierDimanche = PremierDimanche - 1462
End Function
Fichier (2).

Edit : pourquoi TypeName(dat) <> "Range" me direz-vous ?

Parce que quand dat est un "Range" VBA fait automatiquement la conversion.

A+
 

Pièces jointes

  • Premier dimanche(2).xlsm
    27.7 KB · Affichages: 92
Dernière édition:

job75

XLDnaute Barbatruc
Re : le premier dimanche du mois, reprendre la date

Bonsoir à tous,

Une formule dérivée de la formule de Monique :

Code:
=-RECHERCHE(-AUJOURDHUI();JOUR(FIN.MOIS(AUJOURDHUI();{1;0}))-FIN.MOIS(AUJOURDHUI();{1;0})-8+JOURSEM(FIN.MOIS(AUJOURDHUI();{1;0})-JOUR(FIN.MOIS(AUJOURDHUI();{1;0}))))
203 octets - 165 caractères.

Fichier joint.

A+
 

Pièces jointes

  • Premier dimanche par formule(1).xlsx
    32.6 KB · Affichages: 100

jmst

XLDnaute Junior
Re : le premier dimanche du mois, reprendre la date

Bonsoir à tous,

Une formule dérivée de la formule de Monique :

Code:
=-RECHERCHE(-AUJOURDHUI();JOUR(FIN.MOIS(AUJOURDHUI();{1;0}))-FIN.MOIS(AUJOURDHUI();{1;0})-8+JOURSEM(FIN.MOIS(AUJOURDHUI();{1;0})-JOUR(FIN.MOIS(AUJOURDHUI();{1;0}))))
203 octets - 165 caractères.

Fichier joint.

A+

Bonsoir job75, tu n'est pas dans le bon topic, la formule de Monique est "d'une une date, afficher le premier dimanche du mois en cours" -> https://www.excel-downloads.com/threads/premier-dimanche-de-chaque-mois.71974/

Celui-ci concerne "d'une date, afficher le 1er dimanche du mois, reprendre la date, si non, le 1er dimanche du mois suivant"

(voir première page)

Mais ta solution est juste pour le premier dimanche du mois, reprendre la date
 
Dernière édition:

Victor21

XLDnaute Barbatruc
Re : le premier dimanche du mois, reprendre la date

Bonsoir à tous.

Je tiens à remercier jmst, XLDnaute junior, 55 posts à son actif, dont 26 dans ce fil, de rappeler à job 75,
20 034 posts
le mode d'emploi de XLD :p ;)

J'en profite pour lui suggérer de tester le fichier que job75 a joint à sa dernière intervention.
 

job75

XLDnaute Barbatruc
Re : le premier dimanche du mois, reprendre la date

Re,

La solution de tontong est de loin la meilleure.

Mais en nombre de caractères on peut l'améliorer en utilisant des matrices :

Code:
=-RECHERCHE(-AUJOURDHUI();JOURSEM(FIN.MOIS(AUJOURDHUI();{0;-1})+1;2)-FIN.MOIS(AUJOURDHUI();{0;-1})-8)
115 octets - 101 caractères.

Code:
=-RECHERCHE(-A3;JOURSEM(FIN.MOIS(A3;{0;-1})+1;2)-FIN.MOIS(A3;{0;-1})-8)
117 octets - 71 caractères.

Fichier joint.

A+
 

Pièces jointes

  • tontong(1).xlsx
    33.9 KB · Affichages: 112

jmst

XLDnaute Junior
Re : le premier dimanche du mois, reprendre la date

Re,

La solution de tontong est de loin la meilleure.

Mais en nombre de caractères on peut l'améliorer en utilisant des matrices :

Code:
=-RECHERCHE(-AUJOURDHUI();JOURSEM(FIN.MOIS(AUJOURDHUI();{0;-1})+1;2)-FIN.MOIS(AUJOURDHUI();{0;-1})-8)
115 octets - 101 caractères.

Code:
=-RECHERCHE(-A3;JOURSEM(FIN.MOIS(A3;{0;-1})+1;2)-FIN.MOIS(A3;{0;-1})-8)
117 octets - 71 caractères.

Fichier joint.

A+

Joli Job75
 

Discussions similaires

Statistiques des forums

Discussions
312 198
Messages
2 086 142
Membres
103 129
dernier inscrit
Atruc81500