Formule recherche jour semaine

ya_v_ka

XLDnaute Impliqué
Hello le forum,

Voilà plusieurs jours que je sèche pour créer un tableau des jours fériés qui fonctionne pour toutes les dates et toutes les années.
Les formules proposées sur le net ont toutes leurs avantages et leurs défauts... Alors je me suis dit :

Si un spécialiste nous créait la panacée universelle sous forme de formule personnalisée du genre :

=CHERCHE.JOUR(a;m;j;o)

Qui correspondrait à :
a = année de recherche
m = mois de recherche (de 1 à 12)
j = jour recherché (de lundi : 1 à dimanche : 7)
o = occurrence dans le mois (de 1 à 5)

Ainsi en donnant par exemple : = CHERCHE.JOUR(2015;9;3;2) on trouverai le 2e mercredi de septembre 2015 !

Avec un petit souci pour la 5e occurrence qui pourrait se retrouver sur le mois suivant...

Y'aurait même moyen de compliquer en rajoutant le sens... afin de trouver le dernier lundi du mois ou l'avant-dernier jeudi...

Qu'en dites vous ?

Ya'v
 

ROGER2327

XLDnaute Barbatruc
Re : Formule recherche jour semaine

Re...


(...) SUPERBE et en plus en formule !(...)

Ravi que ça réponde à votre attente. Mais pour le « SUPERBE », c'est exagéré !
On trouve des choses stupides dans la formule (et dans le code).

Cette expression, par exemple :​
Code:
(D2<0)*(C2<=1+MOD(DATE(A2;B2+(D2<0);5+(D2>0));7))
Il est clair que dès que D2<0 est FAUX, l'expression renvoie 0 quelle que soit la valeur de
C2<=1+MOD(DATE(A2;B2+(D2<0);5+(D2>0));7).​

Lorsque D2<0 est VRAI, sa valeur numérique associée est 1 et l'expression renvoie la valeur de
C2<=1+MOD(DATE(A2;B2+(D2<0);5+(D2>0));7).​

C'est parfaitement idiot de l'écrire ainsi puisqu'on sait que D2<0 vaut 1 et que D2>0 vaut 0.

C2<=1+MOD(DATE(A2;B2+1;5);7) suffit amplement !​

On trouve des inepties du même genre dans le code VBA.

Bref, si la solution vous convient, autant la formuler correctement. Après élagage, on a par exemple :​
Code:
=SI(
MOIS(DATE(A2;B2+(D2<0);C2-MOD(DATE(A2;B2+(D2<0);6);7)+7*(D2+SI(D2<0;C2<=MOD(DATE(A2;B2+1;6);7);-(C2>MOD(DATE(A2;B2;6);7))))))=B2;
     DATE(A2;B2+(D2<0);C2-MOD(DATE(A2;B2+(D2<0);6);7)+7*(D2+SI(D2<0;C2<=MOD(DATE(A2;B2+1;6);7);-(C2>MOD(DATE(A2;B2;6);7)))));
"")
et​
Code:
Function QuandJour(a%, m%, j%, o%)
Dim x As Date
  x = DateSerial(a, m - (o < 0), j) - (DateSerial(a, m - (o < 0), 6) Mod 7) + 7 * (o + IIf(o < 0, -(j <= DateSerial(a, m + 1, 6) Mod 7), j > DateSerial(a, m, 6) Mod 7))
  If Month(x) = m Then QuandJour = x Else QuandJour = ""
End Function
ou​
Code:
Function QuandJour(a%, m%, j%, o%)
Dim y%, x As Date
  x = DateSerial(a, m - (o < 0), 0)
  y = (x + 6) Mod 7
  x = x + j - y + 7 * (o + IIf(o < 0, -(j <= y), j > y))
  If Month(x) = m Then QuandJour = x Else QuandJour = ""
End Function


Bonne nuit.


ℝOGER2327
#7970


Mardi 10 Tatane 142 (Saints Pieds Nickelés, trinité - fête Suprême Quarte)
5 Thermidor An CCXXIII, 9,6374h - bélier
2015-W30-4T23:07:47Z
 

Pièces jointes

  • QuelJourDansLeMois_(2).xlsm
    18.8 KB · Affichages: 45

ya_v_ka

XLDnaute Impliqué
Re : Formule recherche jour semaine

Hello tous

Roger, Merci pour ce correctif (amélioration) du sujet... Il est clair qu'avec mes modestes connaissances, j'essaye tout au plus de comprendre ce qui m'est proposé et que je suis incapable de chercher si ineptie ou amélioration possible il y a. Si j'ai déjà l'impression de comprendre la manière de fonctionner je suis content !

En tous cas MERCI encore, et au plaisir...

Ya'v
 

job75

XLDnaute Barbatruc
Re : Formule recherche jour semaine

Bonjour à tous,

@Le_Troll : Quel rapport entre le sujet et ta date de naissance ? je ne comprend pas...

Oui, surtout que le fichier de Roger pour le 3ème dimanche d'octobre 1974 donne bien le 20...

Edit : en fait Le_Troll n'a rien compris : il a entré 20 pour le jour.

Alors qu'il faut entrer 7 (numéro de dimanche).

A+
 
Dernière édition:

JCGL

XLDnaute Barbatruc
Re : Formule recherche jour semaine

Bonjour à tous,
Salut les amis,


Essayé le 20 octobre 1974 et vous verrez

Pour vérifier ton jour de naissance, il y a plus simple que le code ou la formule de l'ami Roger (qui n'est fait pour ça):

Tu entres la date dans une cellule et tu passes en format "jjjj" ou dans une autre cellule =lacellulleoùtuastadate et au format "jjjj".

Bien évidemment : :)

A++ les amis moqueurs.
A+ à tous
 

ROGER2327

XLDnaute Barbatruc
Re : Formule recherche jour semaine

Bonsoir à tous.


J'ai testé vite fait et je suis né un Dimanche et non Samedi sur le fichier
Essayé le 20 octobre 1974 et vous verrez. (...)
Très-drôle !​


(...) Sinon calcul très complexe.
(...)
Bof...

Avec deux neurones de plus, faisons plus court :​
Code:
=SI(
MOIS(DATE(A2;B2+(D2<0);C2-MOD(DATE(A2;B2+(D2<0);6);7)+7*(D2-SIGNE(D2)*((D2>0)=(C2>MOD(DATE(A2;B2+(D2<0);6);7))))))=B2;
     DATE(A2;B2+(D2<0);C2-MOD(DATE(A2;B2+(D2<0);6);7)+7*(D2-SIGNE(D2)*((D2>0)=(C2>MOD(DATE(A2;B2+(D2<0);6);7)))));
"")
Code:
Function QuandJour(a%, m%, j%, o%)
Dim x As Date
  x = DateSerial(a, m - (o < 0), j - (DateSerial(a, m - (o < 0), 6) Mod 7) + 7 * (o + Sgn(o) * ((o > 0) = (j > (DateSerial(a, m - (o < 0), 6) Mod 7)))))
  If Month(x) = m Then QuandJour = x Else QuandJour = ""
End Function
ou​
VB:
Function QuandJour(a%, m%, j%, o%)
Dim y%, x As Date
  x = DateSerial(a, m - (o < 0), 0)
  y = (x + 6) Mod 7
  x = x + j - y + 7 * (o + Sgn(o) * ((o > 0) = (j > y)))
  If Month(x) = m Then QuandJour = x Else QuandJour = ""
End Function

(...)
Bravo comme même
(...)
Un compliment, aussi mesuré soit-il, va au cœur. Surtout s'il vient d'un expert. Merci.​


Bonne nuit.


ℝOGER2327
#7971


Dimanche 15 Tatane 142 (Procession aux Phynances - fête Suprême Seconde)
10 Thermidor An CCXXIII, 0,0211h - arrosoir
2015-W31-2T00:03:02Z
 

Pièces jointes

  • QuelJourDansLeMois_(3).xlsm
    17.9 KB · Affichages: 34

ya_v_ka

XLDnaute Impliqué
Re : Formule recherche jour semaine

Salut tout le monde,

Roger si tu continues, pas à pas, à améliorer sans cesse tes codes, il est certain que tu vas continuer à recevoir des compliments, à la mesure du résultat. ;-)

Merci encore

Ya'v
 

Discussions similaires

Statistiques des forums

Discussions
311 740
Messages
2 082 041
Membres
101 879
dernier inscrit
Arthur M