DATES DES FÊTES FIXES ET MOBILES

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 - 12 sept. 2011 à 13:53
Shaegal Messages postés 110 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 12 mai 2021 - 3 oct. 2011 à 09:42
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/53581-dates-des-fetes-fixes-et-mobiles

Shaegal Messages postés 110 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 12 mai 2021 1
3 oct. 2011 à 09:42
Il me semble n'avoir jamais encore "frictionné les oreilles" de quelqu'un. Il faut bien une première fois. ;-)

IL y a bien longtemps que je n'ai pas utilisé VB6, et si mes souvenirs sont exacts, l'Option Explicit était déjà "décochable". D'où le terme "Option". Dans ce cas, ça ne la rend pas obligatoire. Et ça ne rendait pas le code moins optimal pour peu que le développeur soit vigilant.
C'est vrai que VB.Net augmente les chances d'éviter les erreurs.
J'avais effectivement commencé un projet utilisant cette dll. Il s'agissait d'un calendrier perpétuel de gestion des congés de groupes interdisant qu'un poste soit inoccupé. Le projet n'a pas abouti car il devait être fait sur mon temps libre. Et c'est ce qu'il me manque le plus. Mais l'idée est toujours d'actualité.

Maintenant, il est vrai que mon post est peu explicite. La commande la plus utilisée est "Férier" (faute d'orthographe volontaire dont je ne connais plus la raison. :-/).
Celle-ci retourne une chaine vide (si ce n'est pas un jour férier) ou le nom du jour férié, en fonction de la date saisie.

A+
cs_lermite222 Messages postés 492 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 2 juillet 2012 4
29 sept. 2011 à 17:32
Re,
Beh oui, j'ai peut-être été un peu heuuu... mais ta façon de répondre m'a un peu "frictionner les oreilles".
Mais comme tu dis, soyons plus constructif.
En VB6 Option explicit était une condition obligatoire si l'ont voulait un code optimum (autant que faire se peu), par contre et à ta décharge, cette 'option' n'est plus aussi impérative en VB.Net, la page "Liste d'erreurs" donne bien plus de renseignements que VB6 n'en donnaient.
Une remarque quand même...
Tu a certainement fait un projet pour tester ta dll ?
En postant uniquement le code de la dll, un débutant devra drôlement chercher pour la comprendre.
Il serait préférable de poster les deux projets, celui du test et celui de la dll, en les regroupant dans un 'Groupe de projet'.
Ainsi, il sera possible de suivre les actions en mode Debug.
Sinon, je n'ai pas trouvés que ton code était aussi brouillon que ça et j'ai tester ta fonction Pâques et elle est juste.
Tu pourrais aussi mettre dans le poste le mode d'emploi pour compiler la dll.
A+
Shaegal Messages postés 110 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 12 mai 2021 1
29 sept. 2011 à 08:58
Bonjour lermitte222,

"Je n'ai pas regardé le code et de ce fait, pas analyser, mais pour le fait d'avoir poster un code qui à été composer "à l'arrache" je pointerai ton code à ZÉRO".

Si effectivement tu as ni regardé, ni analysé le code, comment peux-tu me noter? Et puis que tu me mettes 0 ou que tu puisses mettre -10, je n'ai pas posté pour être noté mais pour dépanner quelqu'un et recevoir des critiques constructives, pas démolissantes. La tienne ne m'apporte rien.

Le code fonctionne, bien qu'il soit vrai qu'il est très brouillon et très peu commenté. Et je m'en suis déjà excusé.

Je ne pense pas être irréceptif aux conseils donnés. J'aime juste qu'ils soient accompagnés d'arguments convainquants. Sans vouloir t'offenser NHenry.
J'ai bien compris la raison pour laquelle il faut éviter les lettres accentuées dans le code. Et je l'ai adopté.

Je pense qu'il peut y avoir plusieurs écoles possibles dans tous les domaines. C'est à chacun d'entre nous de trouver la sienne.
Lorsque quelqu'un me dit qu'il faut faire les choses ainsi, je veux qu'on me dise pourquoi.

Encore une fois, ici n'est pas le lieu pour ça. C'est un lieu d'échanges sur le code et non sur ma façon d'être. Je VEUX être critiqué sur mon code (avec des arguments) car c'est ainsi qu'on avance. Et encore une fois, désolé pour celui-ci si ... bordélique.

A bientôt... ;-)
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
28 sept. 2011 à 19:29
Bonsoir,

lermite222, pas la peine d'être si agressif, les commentaires précédents donnent des pistes d'évolution du code.
cs_lermite222 Messages postés 492 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 2 juillet 2012 4
28 sept. 2011 à 18:31
Bonjour,
Je n'ai pas regardé le code et de ce fait, pas analyser, mais pour le fait d'avoir poster un code qui à été composer "à l'arrache" je pointerai ton code à ZERO. (Un puisque zéro y à pas)
Tu dis.. C'est le tout premier code que je poste !! je pense que tu ferais bien de voir comment les autres code sont "bidouillés" avant de poster à nouveau et je pense aussi que tu devrais être un peu plus réceptif aux conseiles qui te sont donnés.
A+
Shaegal Messages postés 110 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 12 mai 2021 1
14 sept. 2011 à 09:05
Salut ADN56

Tout simplement parce qu'il intéressait quelqu'un sur ce site qui en avait besoin.
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
13 sept. 2011 à 20:54
je cite : "Si c'est juste une question d'écriture ou de style, qu'importe. Mais c'est juste mon avis. [...] ta remarque est très juste.Comme je te l'ai dit, ce code à été écrit à l'arrache. [...] Si tu veux en discuter, pas de problème. Mais pas ici, ce n'est pas le lieu pour."
Une question se pose donc ! Pourquoi poster ce code ici ?
Shaegal Messages postés 110 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 12 mai 2021 1
13 sept. 2011 à 08:44
Effectivement, concernant le paramètre Année, ta remarque est très juste.
Comme je te l'ai dit, ce code à été écrit à l'arrache.
Il faut remplacer la ligne "LundiPâques DateAdd(DateInterval.Day, 1, Pâques)" par "LundiPâques DateAdd(DateInterval.Day, 1, Pâques(Année))".

Maintenant, pour les Option Strict et Explicit, si tu veux m'aider à comprendre, il ne faut pas me l"imposer mais m'expliquer pourquoi il est préférable de les mettre à On.
Pas d'arguments, pas convaincu.
Si tu veux en discuter, pas de problème. Mais pas ici, ce n'est pas le lieu pour.
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
12 sept. 2011 à 18:32
"Donc, le paramètre Année va servir au calcul de la date de Pâques en fonction de l'année donnée. Il est optionnel et est égal à zéro pour l'année en cours.
En effet, j'ai voulu écrire Optional ByVal Année As Integer=now.year, mais c'est interdit..."

Le paramètre Année n'est pas utilisé dans cette fonction, d'où ma question.

Concernant Option Strict et Option Explicit, quand on veut faire un code assez propre, ce n'est pas discutable, ce sont des options qui ne sont pas des options pour un code correct.
amenjouj Messages postés 16 Date d'inscription mercredi 8 octobre 2008 Statut Membre Dernière intervention 26 septembre 2014
12 sept. 2011 à 18:08
ok
Shaegal Messages postés 110 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 12 mai 2021 1
12 sept. 2011 à 15:28
Donc, le paramètre Année va servir au calcul de la date de Pâques en fonction de l'année donnée. Il est optionnel et est égal à zéro pour l'année en cours.
En effet, j'ai voulu écrire Optional ByVal Année As Integer=now.year, mais c'est interdit...

Je n'avais jamais pensé aux "claviers sans accents". Ok. C'est vrai qu'une de mes applications s'est retrouvée à tourner sous Linux et n'a pas aimé les accents.
Je le saurai pour la prochaine fois.

Quant aux options Strict et Explicit à On, ça reste discutable et sûrement sujet à de longues discutions dont ce n'est pas là l'objet.

Le code de calcul de la date de Pâques:
Je l'ai repiqué sur Wikipédia (http://fr.wikipedia.org/wiki/Calcul_de_la_date_de_P%C3%A2ques). Il s'agit d'un calcul empirique, très compliqué à comprendre car n'ayant pas de "logique" à mon sens. Mais il fonctionne.
Sinon, avec de très bonnes connaissances en mécanique céleste, la date de Pâques est le premier dimanche qui suit la première pleine lune à l'équinoxe de printemps...
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
12 sept. 2011 à 15:02
"# Public Function LundiPâques(Optional ByVal Année As Integer = 0) As Date
# LundiPâques = DateAdd(DateInterval.Day, 1, Pâques)
# End Function

A quoi sert le paramètre ?"

Je parles de Année.

Sinon, les accents rendent le code moins international, non ASCII (128 premiers caractères), et empêche sa réutilisation avec d'autres claviers qui n'auraient pas d'accents ou pas la bonne page de code chargée.

Option Explicit et Option Strict doivent être à On en VB.NET et Option Explicit doit être précisé en VB6, ce sont des options, mais pour un code propre, c'est INDISPENSABLE.

Je n'avais pas vu l'Import de Math, dsl.

Les noms de variables à 1 caractères sont tolérés quand il s'agit de compteurs de boucle :
For I As Integer=0 To 10
Mais quand on fait des calculs, c'est pas top clair.
De plus, n'étant pas mathématicien mais développeur, ton calcul est incompréhensible (car aucun commentaire en vient éclairer la chose).

Le but des sources présentes sur ce site est aussi de faire des codes propres pouvant servir de modèles pour des débutants.
Shaegal Messages postés 110 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 12 mai 2021 1
12 sept. 2011 à 14:39
Ah! Pardon pour les noms explicites. j'ai confondu.

En fait, étant de formation math, je n'utilise que des caractères uniques pour toute équation algèbrique. Une lettre suffit amplement et donne à l'équation une lecture plus aérée et facile à lire.

De même, le calcul de la date de pâques demande beaucoup de variables/constantes qui, ainsi nommées facilite la lecture mathématique.

Encore désolé de mettre précipité...
Shaegal Messages postés 110 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 12 mai 2021 1
12 sept. 2011 à 14:33
Salut NHENRY,

J'ai écrit ce code il y a pas mal d'années et très rapidement car un besoin urgent. Puis à été "rebidouillé" depuis. J'ai bien précisé que j'étais désolé de la qualité du code fourni.

Je n'ai jamais mis Option Explicit sur On et je n'ai jamais eu de problème. Si l'option peut être mise sur Off, c'est que ça doit servir. Si c'est juste une question d'écriture ou de style, qu'importe. Mais c'est juste mon avis.

De même pour les accents. L'habitude de taper des rapports en y mettant les accents sans doute. Et puis ça fonctionne bien avec, je trouve ça plus lisible et ça permet parfois d'utiliser des noms réservés démunis d'accents.

NHENRY:
# Public Function LundiPâques(Optional ByVal Année As Integer = 0) As Date
# LundiPâques = DateAdd(DateInterval.Day, 1, Pâques)
# End Function

A quoi sert le paramètre ?

ShaeGal:
De quel paramètre parles-tu? 1 ou Pâques?

Quant à Truncate, il ne fait pas tout à fait la même chose. Il récupère la partie entière SANS l'arrondir. Une troncature...
De plus, j'ai importé Math tout en haut du code. Ceci pour éviter des codes à rallonge. Ca l'allège un peu.

Pour l'objet Date, tu as sûrement raison. Il doit y avoir de meilleurs façon de l'utiliser. J'avoue ne pas avoir cherché. Mais je crois que l'objet Date comporte quelques lacunes. Rien n'est parfait en ce monde.

Merci pour ces quelques remarques...
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
12 sept. 2011 à 13:53
J'ai légèrement bloqué sur quelques points :

# Public Function Pâques(Optional ByVal Année As Integer = 0) As Date
# Dim a, b, c, d, e, f, g, h, i, k, l, m, n, p, x As Integer

On nomme ses variable avec un nom explicite ...

On évite les accents dans les noms d'éléments de code, c'est plus facilement lisible.

# Public Function LundiPâques(Optional ByVal Année As Integer = 0) As Date
# LundiPâques = DateAdd(DateInterval.Day, 1, Pâques)
# End Function

A quoi sert le paramètre ?

# Public Function Férier(ByVal dte As Date) As String
# Dim a As Integer = dte.Year
# Férier = ""# If dte Pâques(a) Then Férier "Pâques"# If dte LundiPâques(a) Then Férier "Lundi de Pâques"# If dte Ascension(a) Then Férier "Jeudi de l'Ascension"# If dte Pentecôte(a) Then Férier "Lundi de Pentecôte"# If dte NouvelAn(a) Then Férier "Nouvel an"# If dte FêteTravail(a) Then Férier "Fête du travail"# If dte Victoire(a) Then Férier "Victoire"# If dte FêteNationale(a) Then Férier "Fête Nationale"# If dte Assomption(a) Then Férier "Assomption"# If dte Toussaint(a) Then Férier "Toussaint"# If dte Armistice(a) Then Férier "Armistice"# If dte Noël(a) Then Férier "Noël"
#
# Return Férier
# End Function

Pourquoi ne pas avoir utiliser une variable locale à la place de l'ancienne syntaxe ?
(Et encore les accents)

DateAdd, Weekday, CDate("01/01/" & Année), ...
Sont nettement améliorable en utilisant les fonctions de l'objet Date.

Truncate(Diff / 7) + 1
Préfère voir du coté de Math.*, ce sera plus propre, sinon :
(Diff\7)+1
fait la même chose.

Voilà pour la première salve.
Rejoignez-nous