FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Logiciel de planétarium.
Utilitaire de saisie d'une date - Page 2 Emptypar Pedro Aujourd'hui à 8:08

» Un autre pense-bête...
Utilitaire de saisie d'une date - Page 2 Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Utilitaire de saisie d'une date - Page 2 Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Utilitaire de saisie d'une date - Page 2 Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Utilitaire de saisie d'une date - Page 2 Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Utilitaire de saisie d'une date - Page 2 Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Utilitaire de saisie d'une date - Page 2 Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Utilitaire de saisie d'une date - Page 2 Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Utilitaire de saisie d'une date - Page 2 Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Utilitaire de saisie d'une date - Page 2 Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Utilitaire de saisie d'une date - Page 2 Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Utilitaire de saisie d'une date - Page 2 Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Utilitaire de saisie d'une date - Page 2 Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Utilitaire de saisie d'une date - Page 2 Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Utilitaire de saisie d'une date - Page 2 Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
Le Deal du moment : -20%
Drone Dji DJI Mini 4K (EU)
Voir le deal
239 €

 

 Utilitaire de saisie d'une date

Aller en bas 
+3
Jicehel
Klaus
Jean Claude
7 participants
Aller à la page : Précédent  1, 2, 3, 4  Suivant
AuteurMessage
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Utilitaire de saisie d'une date - Page 2 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 2 EmptyVen 25 Mai 2012 - 18:38

Tu as raison, c'est une engeance sournoise et pleine d'imagination pour trouver les imprévus du programmeur !

Tiens, je vais boire un coup pour me consoler, bon ap'
(avec modération comme dit l'autre, on voit qu'il n'a pas soif, lui !)
Revenir en haut Aller en bas
Jean Claude

Jean Claude


Nombre de messages : 5950
Age : 70
Localisation : 83 Var
Date d'inscription : 07/05/2009

Utilitaire de saisie d'une date - Page 2 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 2 EmptyVen 25 Mai 2012 - 18:46

WIKIPEDIA
Depuis l'ajustement du calendrier grégorien, sont bissextiles les années1 :
soit divisibles par 4 mais non divisibles par 100 ;
soit divisibles par 400.
Donc, inversement, ne sont pas bissextiles les années :
soit non divisibles par 4 ;
soit divisibles par 100, mais pas par 400.
Ainsi, 2012 est bissextile. L'an 2008 était bissextile suivant la première règle. L'an 1900 n'était pas bissextile, car divisible par 100, ce qui est contraire à la première règle (ou exclusif), et non divisible par 400, ce qui confirme la seconde. L'an 2000 était bissextile car divisible par 400.
Le calendrier julien, qui avait cours avant le calendrier actuel, ne distinguait pas les fins de siècles (années divisibles par 100). Une année était bissextile tous les 4 ans, sans autre exception. Le calendrier julien avait ainsi une année moyenne de 365,25 jours, au lieu des 365,2422 jours nécessaires au cycle terrestre. Ce qui a engendré l'accumulation d'une dizaine de jours de retard en quinze siècles.
L'instauration du calendrier grégorien a permis d'une part de rattraper le retard en supprimant des jours, et d'autre part de ralentir le rythme en supprimant 3 années bissextiles tous les 400 ans. Ce calendrier grégorien offre selon les règles énoncées une année moyenne de 365,2425 jours, ce qui est encore un peu trop long, mais n'engendre qu'une erreur de 3 jours en 10 000 ans.



Bon on me réclame à l'apéro.

A+
Revenir en haut Aller en bas
ambroise




Nombre de messages : 264
Localisation : Haute-Savoie
Date d'inscription : 29/04/2012

Utilitaire de saisie d'une date - Page 2 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 2 EmptyVen 25 Mai 2012 - 19:32

J'ai posté ce même code dans le fil "contrôler le contenu d'un edit", mais je pense qu'il a aussi sa place ici, ayant glané ici ou là les bonnes idées des Panoramiciens de ce fil. Merci à tous.
Code:

dim annee$ , mois$ , jour$ , annee_util$ , mois_util$ , jour_util$ , mil$ , aujourdhui$ , date_util$ , annee% , bissex% , bissex100% , bissex400% edit1_objet%
label verif

annee$ = right$(date$,4)
mil$ = mid$(annee$,1,1)
edit1_objet% = 1

alpha 2
caption 2, "Entrez une date sous le format JJ/MM/AAAA"+chr$(13)+"Faute de quoi vous serez rappelé à l'ordre !"+chr$(13)+"Toutes les erreurs sont théoriquement signalées..."+chr$(13)+"Celui qui trouvera une faille gagnera... ce code gratuit !"
top 2,30
left 2, 100

edit 1:on_change 1,verif
top 1,100
left 1, 100

alpha 3
caption 3, "Ce code s'est largement inspiré des codes et/ou de l'aide de Klaus, Bignono, Jean-Claude, Jicehel, JL35"+chr$(13)+"Merci à eux..."
top 3,150
left 3, 100

end

verif:
if len(text$(edit1_objet%))=1
  if numeric(right$(text$(edit1_objet%),1))=0 or right$(text$(edit1_objet%),1)="."
    text edit1_objet%,""
    message "Quantième du jour en chiffres"
    return
    end_if
 if val(right$(text$(edit1_objet%),1))>3
    text edit1_objet%,""
    message "Quantième du jour sur 2 chiffres"
    return
    end_if
end_if
if len(text$(edit1_objet%))=2
  if numeric(right$(text$(edit1_objet%),1))=0 or right$(text$(edit1_objet%),1)="."
    text edit1_objet%,left$(text$(edit1_objet%),1)
    message "Quantième du jour sur 2 chiffres"
    return
    end_if
  if val(text$(edit1_objet%))>31 or val(text$(edit1_objet%))<1
    text edit1_objet%,""
    message "Le quantième du jour ne peut être supérieur à 31"
    return
    end_if
end_if

if mid$(text$(edit1_objet%),3,1)<>"/" and len(text$(edit1_objet%))= 3
  text edit1_objet%,left$(text$(edit1_objet%),2) + "/"
  message "Le signe de séparation / doit être accolé aux chiffres"
  return
end_if

if len(text$(edit1_objet%))=4
  if numeric(right$(text$(edit1_objet%),1))=0 or right$(text$(edit1_objet%),1)="."
    text edit1_objet%,left$(text$(edit1_objet%),3)
    message "Quantième du mois en chiffres"
    return
    end_if
  if val(right$(text$(edit1_objet%),1))>1
    text edit1_objet%,left$(text$(edit1_objet%),3)
    message "Quantième du mois sur 2 chiffres"
    return
    end_if
end_if

if len(text$(edit1_objet%))=5
  if numeric(right$(text$(edit1_objet%),1))=0 or right$(text$(edit1_objet%),1)="."
    text edit1_objet%,left$(text$(edit1_objet%),4)
    message "Quantième du mois en chiffres"
    return
    end_if
  if val(right$(text$(edit1_objet%),2))>12
    text edit1_objet%,left$(text$(edit1_objet%),3)
    message "Le quantième du mois ne peut être supérieur à 12"
    return
    end_if
  if val(left$(text$(edit1_objet%),2))>30 and (val(mid$(text$(edit1_objet%),4,2))=4 or val(mid$(text$(edit1_objet%),4,2))=6 or val(mid$(text$(edit1_objet%),4,2))=9 or val(mid$(text$(edit1_objet%),4,2))=11)
    if val(mid$(text$(edit1_objet%),4,2))=4 then message "Le mois d'avril ne compte que 30 jours."
    if val(mid$(text$(edit1_objet%),4,2))=6 then message "Le mois de juin ne compte que 30 jours."
    if val(mid$(text$(edit1_objet%),4,2))=9 then message "Le mois de septembre ne compte que 30 jours."
    if val(mid$(text$(edit1_objet%),4,2))=11 then message "Le mois de novembre ne compte que 30 jours."
    return
    end_if
end_if

if mid$(text$(edit1_objet%),6,1)<>"/"  and len(text$(edit1_objet%))= 6
  text edit1_objet%,left$(text$(edit1_objet%),5) + "/"
  message "Le signe de séparation / doit être accolé aux chiffres"
  return
end_if
if len(text$(edit1_objet%))=7
  if numeric(right$(text$(edit1_objet%),1))=0 or right$(text$(edit1_objet%),1)="."
    text edit1_objet%,left$(text$(edit1_objet%),6)
    message "Quantième de l'année en chiffres"
    return
    end_if
  if val(right$(text$(edit1_objet%),1))>val(mil$)
    text edit1_objet%,left$(text$(edit1_objet%),6)
    message "Le quantième de l'année ne peut être supérieur à "+annee$
    return
    end_if

end_if
if len(text$(edit1_objet%))=8
  if numeric(right$(text$(edit1_objet%),1))=0 or right$(text$(edit1_objet%),1)="."
    text edit1_objet%,left$(text$(edit1_objet%),7)
    message "Quantième de l'année en chiffres"
    return
    end_if

end_if
if len(text$(edit1_objet%))=9
  if numeric(right$(text$(edit1_objet%),1))=0 or right$(text$(edit1_objet%),1)="."
    text edit1_objet%,left$(text$(edit1_objet%),8)
    message "Quantième de l'année en chiffres"
    return
    end_if

end_if
if len(text$(edit1_objet%))=10
  annee% = val(right$(text$(edit1_objet%),4))
  bissex% = annee% - int((annee% / 4))*4
  bissex100% = annee% - int((annee% / 100))*100
  bissex400% = annee% - int((annee% / 400))*400

  if numeric(right$(text$(edit1_objet%),1))=0 or right$(text$(edit1_objet%),1)="."
    text edit1_objet%,left$(text$(edit1_objet%),9)
    message "Quantième de l'année en chiffres"
    return
    end_if
  if val(right$(text$(edit1_objet%),4))>val(annee$)
    text edit1_objet%,left$(text$(edit1_objet%),6)
    message "Le quantième de l'année ne peut être supérieur à "+annee$
    return
    end_if
  if val(mid$(text$(edit1_objet%),4,2))=2 and val(left$(text$(edit1_objet%),2))>28 and bissex% > 0
    message "Le mois de février "+ right$(text$(edit1_objet%),4) + " ne compte que 28 jours."
    return
    end_if
  if val(mid$(text$(edit1_objet%),4,2))=2 and val(left$(text$(edit1_objet%),2))>29 and bissex% = 0
    message "Le mois de février "+ right$(text$(edit1_objet%),4) + " ne compte que 29 jours."
    return
    end_if
  if val(mid$(text$(edit1_objet%),4,2))=2 and val(left$(text$(edit1_objet%),2))>28 and bissex100% = 0 and bissex400% > 0
    message "Le mois de février "+ right$(text$(edit1_objet%),4) + " ne compte que 28 jours."
    return
    end_if
  if val(mid$(text$(edit1_objet%),4,2))=2 and val(left$(text$(edit1_objet%),2))>29 and bissex100% = 0 and bissex400% = 0
    message "Le mois de février "+ right$(text$(edit1_objet%),4) + " ne compte que 29 jours."
    return
    end_if

end_if
if len(text$(edit1_objet%))>10
  text edit1_objet%,left$(text$(edit1_objet%),10)
return
end_if

if len(text$(edit1_objet%))=10
if val(left$(text$(edit1_objet%),2))>30 and (val(mid$(text$(edit1_objet%),4,2))=4 or val(mid$(text$(edit1_objet%),4,2))=6 or val(mid$(text$(edit1_objet%),4,2))=9 or val(mid$(text$(edit1_objet%),4,2))=11)
    if val(mid$(text$(edit1_objet%),4,2))=4 then message "Le mois d'avril ne compte que 30 jours."
    if val(mid$(text$(edit1_objet%),4,2))=6 then message "Le mois de juin ne compte que 30 jours."
    if val(mid$(text$(edit1_objet%),4,2))=9 then message "Le mois de septembre ne compte que 30 jours."
    if val(mid$(text$(edit1_objet%),4,2))=11 then message "Le mois de novembre ne compte que 30 jours."
end_if

mois$ = mid$(date$,4,2)
jour$ = left$(date$,2)
jour_util$ = left$(text$(edit1_objet%),2)
mois_util$ = mid$(text$(edit1_objet%),4,2)
annee_util$ = right$(text$(edit1_objet%),4)

aujourdhui$ = annee$+mois$+jour$
date_util$ = annee_util$+mois_util$+jour_util$

if val(date_util$) > val(aujourdhui$) then message "Vous avez entré une date du futur !"

return
end_if

return



J'ai tiré profit de la leçon sur les années bissextiles.

Modification du code le 26/05/2012 : le précédent code posait problème lors de certaines corrections de la date


Dernière édition par ambroise le Sam 26 Mai 2012 - 11:08, édité 3 fois
Revenir en haut Aller en bas
http://genealogie.cwebh.org/index.html
Jean Claude

Jean Claude


Nombre de messages : 5950
Age : 70
Localisation : 83 Var
Date d'inscription : 07/05/2009

Utilitaire de saisie d'une date - Page 2 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 2 EmptyVen 25 Mai 2012 - 20:09

@Ambroise
Involontairement j'ai mis le message WIKIPEDIA ici,

Mais finalement c'est bien, vu que tu as suivi. Ton code fais parti du "concours". Very Happy

Dans ton code, la correction du 29/02/1900 est OK.

Donc nous en avons 3, le tien, le mien et celui de Bignono, chacun pourra y faire son choix.
Pour ma part, je vais repartir sur ma conception et revoir la saisie pour l'utilisateur.


N'empêche qu'on est des bons. Very Happy


A+
Revenir en haut Aller en bas
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Utilitaire de saisie d'une date - Page 2 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 2 EmptyVen 25 Mai 2012 - 21:31

et les premiers à le reconnaître...
Revenir en haut Aller en bas
papydall

papydall


Nombre de messages : 7017
Age : 74
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Utilitaire de saisie d'une date - Page 2 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 2 EmptyVen 25 Mai 2012 - 22:45

Salut tout le monde.

D’après ce que j’ai pu récolter sur la question de l’année bissextile :

Règle : Une année est bissextile (elle possède un 29 février) si son millésime est divisible par 4 (ex: 1904 1980 1996), mais pas par 100 (ex: 1900), à moins qu'il soit divisible par 400 (ex: 2000), sauf s'il est divisible par 4000 (ex: 4000 8000 12000 ).

Justification:

L'ANNEE : durée "moyenne" de la rotation de la Terre autour du Soleil (valeur: 365,24220 jours)
Une année civile de 365 jours présente donc un déficit annuel de :
365,24220 – 365 = 0, 24220 jour par rapport à l'année astronomique.

En ajoutant un 29 février tous les 4 ans, l’année civile moyenne devient :
365 + 0,25 = 365,25 jours; soit un excédent annuel moyen de :
365,25 – 365,24220 = 0,0078 jour.

En supprimant un 29 février par siècle, l'année civile moyenne devient :
365,25 – 0,01 = 365,24 jours; soit un déficit annuel moyen de :
365,24220 – 365,24 = 0,00220 jour.

En ajoutant un 29 février tous les 400 ans, l’année civile moyenne devient alors égale à :
365,24 + 0,0025 = 365,2425 jours; d'où un excédent annuel moyen de :
365,2425 – 365,2422 = 0,0003 jour.

En supprimant un 29 février tous les 4000 ans, l'année civile moyenne devient
365,24250 – 0,00025 = 365,24225 ; soit encore un excédent annuel de :
365,24225 – 365,24220 = 0,00005 jour.


L'année 4000, ne sera pas bissextile , ainsi que 8000 et 12000 ...


Alors, les optimistes et ceux qui veulent coder « une saisie de date » sans erreur, doivent revoir leurs copies !


lol! lol!
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Utilitaire de saisie d'une date - Page 2 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 2 EmptyVen 25 Mai 2012 - 22:54

Ah oui tiens c'est vrai, j'avais pas pensé à l'année 4000 Very Happy
Revenir en haut Aller en bas
papydall

papydall


Nombre de messages : 7017
Age : 74
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Utilitaire de saisie d'une date - Page 2 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 2 EmptyVen 25 Mai 2012 - 23:10

Et pourtant, l’année 4000, c’est dans moins de 2 millénaires !
C’est donc très bientôt !
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
bignono

bignono


Nombre de messages : 1127
Age : 67
Localisation : Val de Marne
Date d'inscription : 13/11/2011

Utilitaire de saisie d'une date - Page 2 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 2 EmptyVen 25 Mai 2012 - 23:37

Donc, si j'ai bien suivi tout les calculs de date: 1/0.2422=4.1288=> soit la partie entière 4 donc 1 jour de plus tous les 4 ans; ensuite on a 1/0.0078=128.205=> soit la partie entière 128, mais 1 jour de plus tout les 128 ans ça tombe pas juste, donc on a arrondi à 100 ans, etc... et il nous reste à la fin un résidu de 0.00005 et quand on fait 1/0.00005 ça donne tout juste 20000! Mais l'année 20000 sera déjà bissextile et il faudra lui rajouter un jour encore! Donc l'an 20000 aura 367 jours! Génial! lol! lol! lol!
Waow! J'ai rien compris drunken
Revenir en haut Aller en bas
papydall

papydall


Nombre de messages : 7017
Age : 74
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Utilitaire de saisie d'une date - Page 2 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 2 EmptySam 26 Mai 2012 - 1:34

Dans notre calendrier grégorien actuel, l'année civile comporte donc 365 jours (année normale) ou 366 jours (année bissextile).
Il y a un excédent de l'année civile moyenne sur l'année astronomique de 0,00005 jour soit 0,00005*24*60*60 = 4,32 secondes.

Le résidu de 0.00005 jour est un excédent. On doit donc retrancher un jour et non ajouter. Ce qui donne que l’année 20000 aura 365 jours et non 367 !!

Mais d’ici là, ils naitront plusieurs génies pour proposer et imposer d’autres calendriers!

Et nous autres, nous ne sauront jamais si l’année 20000 sera de 365 ou 366 jours. Quelle perte pour l’humanité !!!


Laughing Laughing Laughing
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Jean Claude

Jean Claude


Nombre de messages : 5950
Age : 70
Localisation : 83 Var
Date d'inscription : 07/05/2009

Utilitaire de saisie d'une date - Page 2 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 2 EmptySam 26 Mai 2012 - 8:22

J'ai mal à la tête drunken

Finalement je vais prendre le calendrier Maya, au moins je serais là pour en voir la fin Smile
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Utilitaire de saisie d'une date - Page 2 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 2 EmptySam 26 Mai 2012 - 8:55

C'est amusant, ces réflexions sur une routine générale pouvant vérifier n'importe quelle date. Pour cela, on trouve facilement des algorithmes sur le net (Google est mon ami...). Mais est-ce vraiment utile ? Dans la demande initiale, ne s'agissait-il pas tout simplement de contrôler si une date "utile" est valide ? Date de naissance, date d'échéance, ... Donc, des dates au maximum entre (aujourd'hui-200 ans) et (aujourd'hui+200 ans) ?
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Utilitaire de saisie d'une date - Page 2 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 2 EmptySam 26 Mai 2012 - 9:38

Côté pratique (et pour mettre dans le programme), c'est évidemment ça.
Et pour le cas particulier de la généalogie, jusqu'à plus ample informé, on recherche plutôt ses ancêtres que ses descendants !
Alors, l'an 4000...
Et de toute façon, comme dit Jean Claude, on va tous y passer en décembre (je ne sais plus à quelle heure), selon les mayas.

C'était un exercice de style amusant de papydall !
Revenir en haut Aller en bas
ambroise




Nombre de messages : 264
Localisation : Haute-Savoie
Date d'inscription : 29/04/2012

Utilitaire de saisie d'une date - Page 2 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 2 EmptySam 26 Mai 2012 - 10:59

Bonjour,
Voici mon petit code pour contrôler une saisie de date future :

Code:

annee$ = right$(date$,4)
mois$ = mid$(date$,4,2)
jour$ = left$(date$,2)
annee_util$ = right$(text$(1),4)
mois_util$ = mid$(text$(1),4,2)
jour_util$ = left$(text$(1),2)
aujourdhui$ = annee$+mois$+jour$
date_util$ = annee_util$+mois_util$+jour_util$

if val(date_util$) > val(aujourdhui$) then message "Vous avez entré une date du futur !"

Le code fonctionne mais voyez-vous un code plus simple ou plus intelligent ?

J'ai remarqué dans l'aide de Panoramic que la fonction date$ affichait MM/DD/YYYY . Alors que date$ affiche bien à la française DD/MM/YYYY
Revenir en haut Aller en bas
http://genealogie.cwebh.org/index.html
Jean Claude

Jean Claude


Nombre de messages : 5950
Age : 70
Localisation : 83 Var
Date d'inscription : 07/05/2009

Utilitaire de saisie d'une date - Page 2 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 2 EmptySam 26 Mai 2012 - 14:23

Klaus à dit:
Citation :
C'est amusant, ces réflexions sur une routine générale pouvant vérifier n'importe quelle date. Pour cela, on trouve facilement des algorithmes sur le net (Google est mon ami...). Mais est-ce vraiment utile ?

Certes c'était pas le but, mais tout de même cet échange nous a appris beaucoup de choses sur le calcul des années bissextiles et s'est déroulé dans un climat de bonne humeur.... Very Happy


@Ambroise, j'ai beaucoup de choses à faire ce WE. Je regarderais ton code en début de semaine.


A+
Revenir en haut Aller en bas
ambroise




Nombre de messages : 264
Localisation : Haute-Savoie
Date d'inscription : 29/04/2012

Utilitaire de saisie d'une date - Page 2 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 2 EmptySam 26 Mai 2012 - 15:33

Klaus a écrit:
... Donc, des dates au maximum entre (aujourd'hui-200 ans) et (aujourd'hui+200 ans) ?
Ah non ! Le généalogiste ne se limite pas dans le passé. Et les données doivent être saisies minutieusement si on veut que les recherches informatiques ultérieures dans les tableurs aboutissent.

@Jean Claude

Bonnes et saines occupations durant ce long we de Pentecôte !
Revenir en haut Aller en bas
http://genealogie.cwebh.org/index.html
papydall

papydall


Nombre de messages : 7017
Age : 74
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Utilitaire de saisie d'une date - Page 2 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 2 EmptySam 26 Mai 2012 - 19:08

Salut tout le monde.

Le problème initial était de saisir une date valide dans un formulaire par exemple.

Nous sommes allés assez loin et c’est amusant avant d’être utile ! On a échangé des messages dans une ambiance de bonne humeur.

Mais pour être pratique, je pense qu’on doit prendre en considération qu’une année dont le millésime est divisible par 4, non divisible par 100, divisible par 400 est bissextile.
C’est largement suffisant.

Si j’ai évoqué qu’il ne doit pas être divisible par 4000 (j’ai trouvé l’information sur internet) c’est dans un esprit humoristique (et sans doute du point de vue théorique !) Et non pratique.

Alors, si vous estimez que vous irez au delà de l’année 4000 (voir 8000,12000) vous savez comment procéder !


lol! lol!
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Jean Claude

Jean Claude


Nombre de messages : 5950
Age : 70
Localisation : 83 Var
Date d'inscription : 07/05/2009

Utilitaire de saisie d'une date - Page 2 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 2 EmptySam 26 Mai 2012 - 21:02

Vu que tu es inscrit au forum (1012) avant même que l'informatique n'est été inventé, je pense qu'il faut t'écouter....
lol! lol! lol! lol! lol! lol!

Bon, faut que j'y aille... à demain
Revenir en haut Aller en bas
papydall

papydall


Nombre de messages : 7017
Age : 74
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Utilitaire de saisie d'une date - Page 2 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 2 EmptySam 26 Mai 2012 - 22:42

C’est tout à fait ça.
Et tu ne le regretterais pas !

Very Happy Smile Laughing
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
bignono

bignono


Nombre de messages : 1127
Age : 67
Localisation : Val de Marne
Date d'inscription : 13/11/2011

Utilitaire de saisie d'une date - Page 2 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 2 EmptyDim 27 Mai 2012 - 7:06

Bonjour à tous et à Ambroise,
J'ai pensé que au lieu de saisir la date au format jj/mm/aaaa, et qu'en utilisant 3 edit dans lesquels on ne saisirai que les chiffres des jours pour le premier, des mois pour le second et de l'année pour le dernier ce serait plus simple à programmer et plus simple d'utilisation. Ainsi l'utilisateur n'a pas les slash à saisir. Dès qu'on a saisi les 2 chiffres du jour, on donne le focus au mois, puis à l'année.
J'ai vite fait la structure du code, mais je n'ai pas le temps d'implémenter les tests car je travaille sur autre chose. Si quelqu'un veut bien complèter le code dans mon esprit, sinon je verrais plus tard.
Code:
label verif1,verif2,verif3
edit 1:left 1,200:top 1,50:width 1,20:on_change 1,verif1
edit 2:left 2,240:top 2,50:width 2,20:on_change 2,verif2
edit 3:left 3,280:top 3,50:width 3,40:on_change 3,verif3
alpha 4:left 4,200:top 4,25:caption 4,"FORMAT DATE JJ/MM/AAAA"
alpha 5:left 5,225:top 5,55:caption 5,"/"
alpha 6:left 6,265:top 6,55:caption 6,"/"
set_focus 1
end

verif1:
' routine de vérification des jours
return
verif2:
' routine de vérification des mois
return
verif3:
' routine de vérification des années
return
A+
Revenir en haut Aller en bas
ambroise




Nombre de messages : 264
Localisation : Haute-Savoie
Date d'inscription : 29/04/2012

Utilitaire de saisie d'une date - Page 2 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 2 EmptyDim 27 Mai 2012 - 8:56

C'est la solution de Jean Claude. Pour le contrôle du 28 et du 29 février qui dépend de l'année entrée puis du mois entré., il faut commencer par un edit sur l'année, puis un edit sur le mois et un edit sur le jour. La question n'est pas d'entrer la date, la question est de contrôler automatiquement les entrées utilisateur afin qu'il rentre à coup sûr une date valide.
Revenir en haut Aller en bas
http://genealogie.cwebh.org/index.html
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Utilitaire de saisie d'une date - Page 2 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 2 EmptyDim 27 Mai 2012 - 13:08

A mon tour de mettre mon grain de sel.

Dans mon code, on saisit le jour, puis le mois (je dernier jour du mois est alors automatiquement ajusté si besoin), puis on saisit l'année. En quittant l'année (ici, par le bouton Valider, mais ça peut être autre chose), on contrôle l'année bissextile et on ajuste éventuellement le dernier jour du mois de février. L'année étant saisie, si l'on revient sur la date ou le mois, le contrôle de l'année bissextile se fait aussi.

Code:
' saisie de date par Klaus

label ch_mois, val_date, bisextile

dim i%, nj%, j_mois%(12), s$, a%, f%
data 31,29,31,30,31,30,31,31,30,31,30,31
for i%=1 to 12
  read j_mois%(i%)
next i%

' pour 31 jours
nj% = 31
combo 1031 : top 1031,10 : left 1031,10 : width 1031,50
 text 1031,"Jour"
 for i%=1 to 31
  item_add 1031,str$(i%)
 next i%

' pour 30 jours
combo 1030 : hide 1030 : top 1030,10 : left 1030,10 : width 1030,50
 text 1030,"Jour"
 for i%=1 to 30
  item_add 1030,str$(i%)
 next i%

' pour 29 jours
combo 1029 : hide 1029 : top 1029,10 : left 1029,10 : width 1029,50
 text 1029,"Jour"
 for i%=1 to 29
  item_add 1029,str$(i%)
 next i%

' pour 28 jours
combo 1028 : hide 1028 : top 1028,10 : left 1028,10 : width 1028,50
 text 1028,"Jour"
 for i%=1 to 28
  item_add 1028,str$(i%)
 next i%

' pour le mois
combo 1012 : top 1012,10 : left 1012,70 : width 1012,50
 text 1012,"Mois" : on_click 1012,ch_mois
 for i%=1 to 12
  item_add 1012,str$(i%)
 next i%

' pour l'année
edit 1099 : top 1099,10 : left 1099,130 : width 1099,40
  text 1099,"Année"

' pour valider
button 10 : top 10,10 : left 10,200 : caption 10,"Valider"
  on_click 10,val_date

 end

ch_mois:
  off_click 1012
  s$ = text$(1012)
  if numeric(s$)=0
    text 1012,"Mois"
  else
    if val(s$)<1
      text 1012,"1"
    else
      if val(s$)>12 then text 1012,"12"
    end_if
  end_if
  s$ = text$(1012)
  i% = j_mois%(val(s$))
  if i%<>nj%
    s$ = text$(1000+nj%)
    if numeric(s$)=1
      if val(s$)>i% then s$ = str$(i%)
    end_if
    text 1000+i%,s$
    show 1000+i%
    hide 1000+nj%
    nj% = i%
  end_if
  on_click 1012,ch_mois
  return

val_date:
  if numeric(text$(1099))=0
    text 1099,"Année"
    set_focus 1099
    return
  end_if
  if text$(1012)="2" then gosub bisextile
  return

bisextile:
  f% = 0
  if numeric(text$(1099))=0
    f% = 1
  else
' ici, on détermine si c'est une année bisextile
    a% = val(text$(1099))
    if a%-int(a%/4)*4=0 then f% = 1
    if a%-int(a%/400)*400=0 then f% = 0
' fin de contrôle d'année bisextile:  f%=1 si c'est vrai
  end_if
  if f%=0
    if text$(1000+nj%)="29"
      text 1028,"28"
    else
      text 1028,text$(1000+nj%)
    end_if
    show 1028
    hide 1000+nj%
    nj% = 28
  else
    if val(text$(1000+nj%))>29
      text 1029,"29"
    else
      text 1029,text$(1000+nj%)
    end_if
    show 1029
    if nj%<>29 then hide 1000+nj%
    nj% = 29
  end_if
  return
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jean Claude

Jean Claude


Nombre de messages : 5950
Age : 70
Localisation : 83 Var
Date d'inscription : 07/05/2009

Utilitaire de saisie d'une date - Page 2 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 2 EmptyDim 27 Mai 2012 - 18:45

Salut Klaus,

j'ai regardé ton code, et j'ai du mal à m'y retrouver. Pourrais-tu me dire quelles sont les variables exploitables en sortie et comment afficher le résultat dans caption 0 par exemple.

A+
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Utilitaire de saisie d'une date - Page 2 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 2 EmptyDim 27 Mai 2012 - 19:17

Voilà le programme qui met la date dans caption 0:
Code:
' saisie de date par Klaus

label ch_mois, val_date, bissextile

dim i%, nj%, j_mois%(12), s$, a%, f%
data 31,29,31,30,31,30,31,31,30,31,30,31
for i%=1 to 12
  read j_mois%(i%)
next i%

' pour 31 jours
nj% = 31
combo 1031 : top 1031,10 : left 1031,10 : width 1031,50
 text 1031,"Jour"
 for i%=1 to 31
  item_add 1031,str$(i%)  : ' jour sur 1 ou 2 chiffres
'  item_add 1031,right$("0"+str$(i%),2)  : ' jour sur 2 chiffres
 next i%

' pour 30 jours
combo 1030 : hide 1030 : top 1030,10 : left 1030,10 : width 1030,50
 text 1030,"Jour"
 for i%=1 to 30
  item_add 1030,str$(i%)  : ' jour sur 1 ou 2 chiffres
'  item_add 1030,right$("0"+str$(i%),2)  : ' jour sur 2 chiffres
 next i%

' pour 29 jours
combo 1029 : hide 1029 : top 1029,10 : left 1029,10 : width 1029,50
 text 1029,"Jour"
 for i%=1 to 29
  item_add 1029,str$(i%)  : ' jour sur 1 ou 2 chiffres
'  item_add 1029,right$("0"+str$(i%),2)  : ' jour sur 2 chiffres
 next i%

' pour 28 jours
combo 1028 : hide 1028 : top 1028,10 : left 1028,10 : width 1028,50
 text 1028,"Jour"
 for i%=1 to 28
  item_add 1028,str$(i%)  : ' jour sur 1 ou 2 chiffres
'  item_add 1028,right$("0"+str$(i%),2)  : ' jour sur 2 chiffres
 next i%

' pour le mois
combo 1012 : top 1012,10 : left 1012,70 : width 1012,50
 text 1012,"Mois" : on_click 1012,ch_mois
 for i%=1 to 12
  item_add 1012,str$(i%)  : ' mois sur 1 ou 2 chiffres
'  item_add 1012,right$("0"+str$(i%),2)  : ' moisr sur 2 chiffres
 next i%

' pour l'année
edit 1099 : top 1099,10 : left 1099,130 : width 1099,40
  text 1099,"Année"

' pour valider
button 10 : top 10,10 : left 10,200 : caption 10,"Valider"
  on_click 10,val_date

 end

ch_mois:
  off_click 1012
  s$ = text$(1012)
  if numeric(s$)=0
    text 1012,"Mois"
  else
    if val(s$)<1
      text 1012,"1"
    else
      if val(s$)>12 then text 1012,"12"
    end_if
  end_if
  s$ = text$(1012)
  i% = j_mois%(val(s$))
  if i%<>nj%
    s$ = text$(1000+nj%)
    if numeric(s$)=1
      if val(s$)>i% then s$ = str$(i%)
    end_if
    text 1000+i%,s$
    show 1000+i%
    hide 1000+nj%
    nj% = i%
  end_if
  on_click 1012,ch_mois
  return

val_date:
  if numeric(text$(1099))=0
    text 1099,"Année"
    set_focus 1099
    return
  end_if
  if text$(1012)="2" then gosub bissextile  : ' mois sur 1 ou 2 chiffres
'  if text$(1012)="02" then gosub bissextile  : ' mois sur 2 chiffres
  caption 0,"Date saisie: "+text$(1000+nj%)+"/"+text$(1012)+"/"+text$(1099)
  return

bissextile:
  f% = 0
  if numeric(text$(1099))=0
    f% = 1
  else
' ici, on détermine si c'est une année bissextile
    a% = val(text$(1099))
    if a%-int(a%/4)*4=0 then f% = 1
    if a%-int(a%/400)*400=0 then f% = 0
' fin de contrôle d'année bissextile:  f%=1 si c'est vrai
  end_if
  if f%=0
    if text$(1000+nj%)="29"
      text 1028,"28"
    else
      text 1028,text$(1000+nj%)
    end_if
    show 1028
    hide 1000+nj%
    nj% = 28
  else
    if val(text$(1000+nj%))>29
      text 1029,"29"
    else
      text 1029,text$(1000+nj%)
    end_if
    show 1029
    if nj%<>29 then hide 1000+nj%
    nj% = 29
  end_if
  return

Je jour est accessible par le text$(1000+nj%) (nj% étant toujours 28, 29, 30 ou 31, selon le mois et l'année nissextile). Le mois est dans text$(1012), et l'année par text$(1099).

En même temps, j'ai ajouté, par des commentaires, le code pour forcer le jour et le mois toujours sur 2 chiffres.

Si l'on veut des jours et mois toujours sur 2 chiffres, il
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
ambroise




Nombre de messages : 264
Localisation : Haute-Savoie
Date d'inscription : 29/04/2012

Utilitaire de saisie d'une date - Page 2 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 2 EmptyDim 27 Mai 2012 - 20:06

Merci Klaus pour ce codage intéressant : je l'étudie.
Une question : pourquoi afficher les combo avec 1 pixel de décalage les uns des autres ?
Suggestion 1 : on pourrait ne proposer que les mois à 31 jours si l'utilisateur entrait le 31. Il s'apercevrait ainsi de son erreur s'il avait entré un 31 pour l'un des mois : 4, 6, 9, 11...
Suggestion 2 : On pourrait peut-être utiliser la fonction modulo (mod()] à la place des lignes if a%-int(a%/4)*4=0 then f% = 1
if a%-int(a%/400)*400=0 then f% = 0
Revenir en haut Aller en bas
http://genealogie.cwebh.org/index.html
Contenu sponsorisé





Utilitaire de saisie d'une date - Page 2 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 2 Empty

Revenir en haut Aller en bas
 
Utilitaire de saisie d'une date
Revenir en haut 
Page 2 sur 4Aller à la page : Précédent  1, 2, 3, 4  Suivant
 Sujets similaires
-
» Combo date : sélecteur de date
» Date <-> Date julienne
» saisie de texte
» Indexer une saisie en vue d'un classement.
» Découpe dans une image

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: