IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Vos contributions VB6 Discussion :

Comment savoir si une année est bisextile [FAQ]


Sujet :

Vos contributions VB6

  1. #1
    Membre éclairé
    Avatar de Theocourant
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 618
    Points : 739
    Points
    739
    Par défaut Comment savoir si une année est bisextile
    Bonjour,

    Voici le code d'une fonction que j'ai développé suite à ce sujet.

    Ce code pourrait entrer dans la FAQ ou les sources pour comme l'indique le titre :

    Q: Comment savoir si une année est bisextile ?

    R: Grâce au code suivant, il est possible de déterminer si une année est bisextile à partir d'une date :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Function IsBisextil(maDate As Date) As Boolean
    'Fonction de contrôle de la bisextilité d'une année à partir d'une date
     
    'Les conditions pour avoir une année bisextile sont les suivantes:
    ' - année divisible par 4 : année bisextile
    ' - exception : année divisible par 100 : année non bisextile
    ' - exception de l'exception : année divisible par 400 : année bisextile
     
        If Year(maDate) Mod 4 = 0 And (Year(maDate) Mod 100 <> 0 Or Year(maDate) Mod 400 = 0) Then
            IsBisextil = True
        Else
            IsBisextil = False
        End If
     
    End Function
    Bonne journée

    Théo
    Forums VB : lire la notice
    La touche existe pour être utilisée
    Pensez au tag
    Pour ceux n'ayant pas l'aide installée :
    - Aide MSDN pour VB6
    - Aide MSDN pour VBA
    Je ne réponds pas aux questions techniques par MP. Merci d'utiliser le forum fait pour çà.

  2. #2
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 332
    Points : 718
    Points
    718
    Par défaut
    Intéressant, ça peut être utile, je mets ça au chaud dans un coin.
    Xavier

  3. #3
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Intéressant, en effet...
    intéressant également d'y aller ainsi, non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Command3_Click()
       annee = "2104"
       quoi = "non"
       If IsDate("29/02/" & annee) Then quoi = "oui"
       MsgBox quoi
    End Sub
    et de laisser VB voir si oui ou non ...

  4. #4
    Membre chevronné
    Avatar de sovo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 389
    Points : 1 788
    Points
    1 788
    Par défaut
    super astucieu JMF (comme d'habitude).
    "Toute question a une reponse. Et chaque reponse est une nouvelle question." Albert EINSTEIN

    En cas de Question resolu, n'oubliez pas

  5. #5
    Membre éclairé
    Avatar de Theocourant
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 618
    Points : 739
    Points
    739
    Par défaut
    Citation Envoyé par jmfmarques
    Intéressant, en effet...
    intéressant également d'y aller ainsi, non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Command3_Click()
       annee = "2104"
       quoi = "non"
       If IsDate("29/02/" & annee) Then quoi = "oui"
       MsgBox quoi
    End Sub
    et de laisser VB voir si oui ou non ...
    il est vrai qu'il est simple de faire comme cela mais je dirais que mon code a plus une portée générale sur la détermination d'une année bisextile.

    J'aurais pu faire tout un laïus sur le pourquoi du comment mais je ne m'appelle pas wikipédia ...

    Ce code permet de faire passer un petit peu de culture générale dans ce monde de ... programmation.
    Forums VB : lire la notice
    La touche existe pour être utilisée
    Pensez au tag
    Pour ceux n'ayant pas l'aide installée :
    - Aide MSDN pour VB6
    - Aide MSDN pour VBA
    Je ne réponds pas aux questions techniques par MP. Merci d'utiliser le forum fait pour çà.

  6. #6
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Tu as raison, Théo : un peu de culture générale n'est jamais inutile.
    Ce thème et les explications "à la mode Wilkipédia" ont été abordés sur ce forum à l'occasion d'un sujet tournant, si ma mémoire ne me fait pas défaut, autour de l'âge, au jour près.

  7. #7
    Membre actif Avatar de Jihnn
    Inscrit en
    Décembre 2005
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 330
    Points : 273
    Points
    273
    Par défaut
    jmfmarques, j'ai testé ton code et... il ne marche pas :S

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox IIf(IsDate("29/02/5"), "Oui", "Non")
    Il me sort "Oui"

  8. #8
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Sauf que le code que tu me "prêtes", Thunder, n'est pas du tout le mien !!!
    Tu dois confondre avec un autre... il me semble !

    Le mien est là et... essaye donc de le mettre en défaut, pour voir !
    http://www.developpez.net/forums/sho...47&postcount=3

    Je crois me rappeler avoir vu un truc qui ressemblait au code que tu dénonces, et crois me rappeler qu'il était signé Catbull.
    Je ne retrouve toutefois pas la réponse de Catbull, et donc son code ...(effacé ? par qui ? pourquoi ?...et surtout pourquoi sans rien dire ? )

  9. #9
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Citation Envoyé par jmfmarques
    Intéressant, en effet...
    intéressant également d'y aller ainsi, non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Command3_Click()
       annee = "2104"
       quoi = "non"
       If IsDate("29/02/" & annee) Then quoi = "oui"
       MsgBox quoi
    End Sub
    et de laisser VB voir si oui ou non ...
    annee = "05"
    quoi = "non"
    If IsDate("29/02/" & annee) Then quoi = "oui"
    MsgBox quoi
    ça me sors oui

  10. #10
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Bonjour Tofalu... bonjour ...
    A ma connaissance : le format de "05" (ce que tu écris... et celui de "2004" que j'ai écrit.... sont deux choses bien différentes !

    Fais donc ton essai avec "2005", s'il te plait..., pour correspondre avec ce que j'ai écrit ...et être en paix avec toi-même

    dois-je te rappeler certaines choses, à propos des millésimes sur 2 chiffres ?
    Est-il nécessaire de parler à nouveau du bug de l'an 2000 et de dire quelle en était la raison principale ? (peut-être les millesimmes sur 2 chiffres dans certaines bases de données et dans certains programmes... non ?)

    Quand au code repris par Thunder... il n'est pas de moi (et j'ai chez moi, sur mon PC, le code et le message...). Je ne peux toutefois que laisser le soin à l'auteur de ce code de dire pourquoi il l'a effacé sans un mot et sans se préoccuper de ce que d'autres, comme thunderstroke, auraient pu s'en inspirer, le prenant pour de l'argent comptant

  11. #11
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Maintenant, Tofalu :
    comme j'aime la précision et que je veux saluer ton intérêt pour VB,
    essaye de voir ce que te renvoie ton "29/02/05"n sous VB, sur une machine où le millésime est fixé à 4 chiffres ... tu auras quelques surprises
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Command1_Click()
       annee = "05"
       MsgBox DateValue("29/02/" & annee)
       MsgBox DateValue("29/02/05")
    End Sub
    Information amicale aux nouveaux intérêts manifestés pour VB.

  12. #12
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Je veux juste dire par là qu'un calcul avec le modulo sera toujours correct quelque soit le nombre de chiffre passé pour l'année. Sachant que l'utilisateur à souvent tendance à ne saisir que deux chiffres ...

  13. #13
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    J'aime ton souci de précision, tofalu.
    Il se trouve que j'aime aussi la précision et que Theocourant nous a démontré qu'il était dans le même cas et qu'il avait la volonté de nous expliquer dans le détail comment se faisait cette détermination.

    As-tu donc réfléchi, Tofalu, à ce que devient cette précision avec un millésime sur 2 chiffres au lieu de 4 ?
    Nous allons donc le faire ensemble :

    à quelle année peut donc correspondre le millésime 00 ?
    2 suppositions parmi des milliers :

    1) 00 est mis pour l'année 1400 (divisible par 400)
    2) 00 est mis pour l'année 1500 (divisible par 100 et par 4 mais pas par 400)

    Et ce : quelles que soient les bonnes ou mauvaises habitudes des uns ou des autres....
    Je pense avoir été complet en ce qui me concerne.

  14. #14
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Bonjour,

    Je trouve en général mieux le matin comment exposer certaines choses.
    Ce sera ici la démonstration s'il en fallait des situations auxquelles peuvent conduire des saisies non rigoureusement contrôlées (obligation de millésime sur 4 chiffres).

    une form avec :
    - un bouton de commande command1
    - une textbox test1 pour saisir une date
    - une textbox text2 pour afficher le résultat de la saisie

    et le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Command1_Click()
      If IsDate(Text1.Text) Then
        Text2.Text = DateValue(Text1.Text)
      End If
    End Sub
    que l 'utilisateur saisisse maintenant le 29/02/2005 (qui n'est pas une date existante et donc valide)
    mais avec un millésime sur 2 chiffres (donc 29/02/05) et voyons si VB ne va pas penser que cette date inexistante est valide....et... l'enregistrer comme étany le ...05/02/2029
    mais gardons-nous de penser que la chose ne se priduirait qu'avec le 29 février !
    saisissons, entre des milliers d'autres exemples, le 31 avril 2006 (qui n'existe pas) sous la forme 31/04/06 et..la date sera acceptée et enregistrée comme étant le...06/04/1931 !

    recommençons les saisies ci-dessus, mais cette fois-ci avec des millésimes sur 4 chiffres. VB,ne se trompera cette fois-ci pas et refusera la saisie

    voilà le genre de situation qui peut être générée lorsque l'on permet une saisie de millésime sur 2 chiffres seulement !

  15. #15
    Membre éclairé
    Avatar de Theocourant
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 618
    Points : 739
    Points
    739
    Par défaut
    Citation Envoyé par jmfmarques
    Bonjour,

    Je trouve en général mieux le matin comment exposer certaines choses.
    Ce sera ici la démonstration s'il en fallait des situations auxquelles peuvent conduire des saisies non rigoureusement contrôlées (obligation de millésime sur 4 chiffres).

    une form avec :
    - un bouton de commande command1
    - une textbox test1 pour saisir une date
    - une textbox text2 pour afficher le résultat de la saisie

    et le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Command1_Click()
      If IsDate(Text1.Text) Then
        Text2.Text = DateValue(Text1.Text)
      End If
    End Sub
    que l 'utilisateur saisisse maintenant le 29/02/2005 (qui n'est pas une date existante et donc valide)
    mais avec un millésime sur 2 chiffres (donc 29/02/05) et voyons si VB ne va pas penser que cette date inexistante est valide....et... l'enregistrer comme étany le ...05/02/2029
    mais gardons-nous de penser que la chose ne se priduirait qu'avec le 29 février !
    saisissons, entre des milliers d'autres exemples, le 31 avril 2006 (qui n'existe pas) sous la forme 31/04/2006 et..la date sera acceptée et enregistrée comme étant le...06/04/1931 !

    recommençons les saisies ci-dessus, mais cette fois-ci avec des millésimes sur 4 chiffres. VB,ne se trompera cette fois-ci pas et refusera la saisie

    voilà le genre de situation qui peut être générée lorsque l'on permet une saisie de millésime sur 2 chiffres seulement !
    Je suis entièrement d'accord, cela reste une logique d'utilisation de dates et de comportement au niveau de VB du traitement de celles-ci. Mon code est d'ailleurs soumis aux même règles. Cela impose une vigilance toute particulière à la définition des dates utilisées.

    Théo
    Forums VB : lire la notice
    La touche existe pour être utilisée
    Pensez au tag
    Pour ceux n'ayant pas l'aide installée :
    - Aide MSDN pour VB6
    - Aide MSDN pour VBA
    Je ne réponds pas aux questions techniques par MP. Merci d'utiliser le forum fait pour çà.

  16. #16
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Bonour Theo,

    Je n'ai jamais douté une seule seconde de ton souci personnel de rigueur.
    Ton premier message mettait ce souci en exergue.
    Le présent message confirme ce souci.

    Merci d'avoir apporté cette précision sur un aspect important.

  17. #17
    Membre éclairé
    Avatar de Theocourant
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 618
    Points : 739
    Points
    739
    Par défaut
    Citation Envoyé par jmfmarques
    Bonour Theo,

    Je n'ai jamais douté une seule seconde de ton souci personnel de rigueur.
    Ton premier message mettait ce souci en exergue.
    Le présent message confirme ce souci.

    Merci d'avoir apporté cette précision sur un aspect important.
    C'est toujours un plaisir de pouvoir discuter avec toi. J'apprends énormément.

    Théo
    Forums VB : lire la notice
    La touche existe pour être utilisée
    Pensez au tag
    Pour ceux n'ayant pas l'aide installée :
    - Aide MSDN pour VB6
    - Aide MSDN pour VBA
    Je ne réponds pas aux questions techniques par MP. Merci d'utiliser le forum fait pour çà.

  18. #18
    Membre actif Avatar de Jihnn
    Inscrit en
    Décembre 2005
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 330
    Points : 273
    Points
    273
    Par défaut
    Bah oui, jmf, si tu regardes bien j'ai juste adapté ton code avec un IIf ?

    Et ça fait le même problème que Tofalu.

    Bon, c'est pas si grave, de toute façon ^^

  19. #19
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Hé bé !
    j'ai juste adapté ton code avec un IIf ?
    Tu as alors de graves difficultés d'adptation... Thunder !

    Explique donc comment, en "adaptant", tu es passé de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Command3_Click()
       annee = "2104"
       quoi = "non"
       If IsDate("29/02/" & annee) Then quoi = "oui"
       MsgBox quoi
    End Sub
    à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox IIf(IsDate("29/02/5"), "Oui", "Non")
    Amuse-toi donc à "mesurer" ce que pense VB de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Command1_Click()
      MsgBox DateValue("29/02/5")
    End Sub
    c'est pour lui une date (le 5 février 2029) mais certainement pas celle que tu crois !
    Relis tout et apprends enfin ainsi les risques que tu cours à exprimer de cette façon les dates !
    Apprends enfin que chacun est responsable de ses "adaptations" et que, si'il a "adapté" le code d'un autre, il ne "chante" pas que le code de l'autre a un défaut ...
    De surcroît, Thunder, tu n'as rien "adapté" toi-même (j'ai sur mon PC un code fort ressemblant, utilisant le IIf, ainsi que le message qui l'accompagnait)
    Je ne reviendrai plus sur ce sujet pour le moins malheureux...

  20. #20
    Membre actif Avatar de Jihnn
    Inscrit en
    Décembre 2005
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 330
    Points : 273
    Points
    273
    Par défaut
    Premièrement, excuse-moi, je ne suis pas familier avec les dates. Merci de m'avoir appris cela.
    Deuxième, oui je l'ai adapté à partir de ton code. Si quelqu'un d'autre à fait quelque chose de très ressemblant, je suis flatté de "bien" avoir l'adapté.


    Edit: Je viens de tester ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox IIf(IsDate("29/02/1005"), "Oui", "Non")
    Il marche. Mais pour moi, un code qui marche, ça marche avec tous les choix possibles (dont 5). Désolé si ce n'est pas comment ça que tu le vois.

Discussions similaires

  1. Comment savoir si une année est bissextile
    Par Theocourant dans le forum Contribuez
    Réponses: 3
    Dernier message: 19/09/2006, 08h10
  2. Comment savoir si une connexion est deja ouverte?
    Par ghor_bey dans le forum Web & réseau
    Réponses: 3
    Dernier message: 29/07/2005, 15h17
  3. Réponses: 6
    Dernier message: 01/07/2005, 15h06
  4. Comment savoir si une variable est initialisée ?
    Par nabix dans le forum Général Python
    Réponses: 8
    Dernier message: 10/03/2005, 15h12
  5. Comment savoir qu'une fonction est standard ?
    Par D[r]eadLock dans le forum C
    Réponses: 5
    Dernier message: 24/03/2003, 14h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo