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

Macros et VBA Excel Discussion :

Le nom des jours depuis le 15/10/1582


Sujet :

Macros et VBA Excel

  1. #1
    Membre chevronné Avatar de Jean-Pierre49
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2007
    Messages
    659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2007
    Messages : 659
    Points : 2 056
    Points
    2 056
    Par défaut Le nom des jours depuis le 15/10/1582
    Bonjour à tout le forum, et tout mes vœux pour cette nouvelle année,

    Je vous envoi une petite fonction, qui peut être sans doute améliorée, pour déterminé le nom du jour d’une date du calendrier grégorien, soit depuis le 15 octobre 1582.

    Mais attention :
    Compte tenu qu’Excel considère l ‘année 1900 comme bissextile , les dates doivent être en format texte dans Excel, sinon il y à problème sur les dates entre le 01/01/1900 et le 01/03/1900

    Excel donne dans tous les cas des noms erronés entre ces deux dates.

    Malgré la discussion « Insertion des dates avant 1/1/1900 », je n’ai pas trouvé la solution
    Car 31/12/1899 et 01/01/1900 ont pour numéro de série 1

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    Public Function JourSemaine(LaDate As String)
                                Dim M                                   As Byte
                                Dim D                                   As Byte
                                Dim Y                                   As Long
                                Dim J                                   As Long
     
            D = Split(LaDate, "/")(0) ' merci ouskel'n'or
            M = Split(LaDate, "/")(1)
            Y = Split(LaDate, "/")(2)
     
            If CSng(Y & "." & M & D) < 1582.1015 Then Exit Function ' Ne prend pas les Dates Julienne
     
            If (D < 1 Or D > 31) Or (M < 1 Or M > 12) Then Exit Function ' Test sur jours et mois
     
            If D = 29 And M = 2 Then ' Test années bissextiles
                If Y Mod 400 = 0 Or (Y Mod 4 = 0 And Y Mod 100 <> 0) Then
                    GoTo Suite
                Else
                    Exit Function
                End If
            End If
    Suite:
     
    ' Je ne sais plus ou j'avais récupérer la formule qui suit, Sans doute dans le livre Le Calendrier de Paul Couderc,
    ' que je n'ais plus et qui ne semble plus disponible aujourd'hui.
     
            If M > 2 Then
                M = M + 1
                Y = Y
            Else
                M = M + 13
                Y = Y - 1
            End If
     
            J = Int(365.25 * Y) - Int(Y / 100) + Int(Y / 400) + Int(30.6001 * M) + D - 478164
     
            Select Case (J Mod 7) + 1
                Case 1
                    JourSemaine = "dimanche"
                Case 2
                    JourSemaine = "lundi"
                Case 3
                    JourSemaine = "mardi"
                Case 4
                    JourSemaine = "mercredi"
                Case 5
                    JourSemaine = "jeudi"
                Case 6
                    JourSemaine = "vendredi"
                Case 7
                    JourSemaine = "samedi"
            End Select
    End Function
    On peut aussi se servir de la variable J pour déterminer le nombre de jour entre deux dates, ect..
    Jean-Pierre Pensez à Voter pour les réponses qui vous ont aidés, d'avance merci
    ---------Et n'oubliez pas de mettre : ..quand c'est le cas !---------

  2. #2
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 699
    Points
    6 699
    Par défaut
    Bonjour,

    ceci t'aidera peut-être...

    Car 31/12/1899 et 01/01/1900 ont pour numéro de série 1
    Euh non, les feuilles Excel et le vba n’ont pas la même base de calendrier :

    - En Feuilles :
    • Le N° de série 1 correspond au 01/01/1900*
    • 1900 est considérée comme bissextile (faux, mais utile)
    • Les dates négatives ne sont pas gérées (option 1900).
    • Le Format date dépend de tes paramètres nationaux (windows).

    - En VBA
    • Le N° de série 1 correspond au 31/12/1899*
    • Le 0 au 30/12/1899
    • Le -1 au 29/12/1899
    • 1900 n’est pas bissextile
    • Le format date est anglo-saxon : mm/dd/yy
    • Les dates négatives sont gérées calendrier du 01/01/100 au 31/12/9999.



    * Ce décalage permet d'ailleurs de s'harmoniser après février 1900

    Le mieux est peut-être de tout piloter en vba et de ne se servir de l’affichage en feuille qu’en format texte, avec touts les calculs en vba....

    cordialement,

    Didier
    Didier Gonard

    Dernier tutoriel :
    Le VBA qu'est ce que c'est ?
    Tutoriels : Voir la liste de mes tutoriels Excel & VBA et mon site pro sur ma Page DVP
    Cours et tutoriels pour apprendre Excel
    N'oubliez pas de mettre : ..quand c'est le cas !

  3. #3
    Membre chevronné Avatar de Jean-Pierre49
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2007
    Messages
    659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2007
    Messages : 659
    Points : 2 056
    Points
    2 056
    Par défaut
    Merci Ormonth pour tes precisions

    Ce n'était que l'histoire de s'amuser,

    Et pour continuer, sur la toile j'ai trouver une formule plus simple mais similaire



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            a = Int((14 - M) / 12)
            Y = Y - a
            M = M + 12 * a - 2
     
            J = D + Y + Int(Y / 4) - Int(Y / 100) + Int(Y / 400) + Int((31 * M) / 12)
    en remplacement de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            If M > 2 Then
                M = M + 1
                Y = Y
            Else
                M = M + 13
                Y = Y - 1
            End If
     
            J = Int(365.25 * Y) - Int(Y / 100) + Int(Y / 400) + Int(30.6001 * M) + D - 478164
    Jean-Pierre Pensez à Voter pour les réponses qui vous ont aidés, d'avance merci
    ---------Et n'oubliez pas de mettre : ..quand c'est le cas !---------

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 102
    Points : 117
    Points
    117
    Par défaut
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    J = Int(365.25 * Y) - Int(Y / 100) + Int(Y / 400) + Int(30.6001 * M) + D - 478164
    On retrouve aussi ce type de formule dans les manuels des premières calculettes et ordinateur programmable des années 70-80.
    La valeur 365.25 permet de tenir compte des années bissextiles qui ont une périodicité de 4 ans.
    Cette valeur ne fonctionne plus si le siècle n'est pas divisible par 400.

    La valeur 30,6 correspond aux mois de 30 ou 31 jours ce qui est valable à partir du mois de mars.

    Pour simplifier l'algorithme le calcul est fait pour des dates comprises entre le 1 er janvier 1901 et le 31 12 2099, l'année 2100 ne sera pas une année bissextile, on risque d'avoir pour cette date un nouveau bug.

    JP014

Discussions similaires

  1. recupéré le nom des fichier depuis un html
    Par badibad dans le forum Langage
    Réponses: 19
    Dernier message: 09/08/2012, 13h15
  2. Réponses: 1
    Dernier message: 09/08/2011, 16h28
  3. extraire le nom du jour depuis une date
    Par switch1 dans le forum Langage
    Réponses: 3
    Dernier message: 16/02/2009, 00h52
  4. Réponses: 6
    Dernier message: 06/06/2007, 17h57
  5. [C#] Liste des noms des jours
    Par Oberown dans le forum C#
    Réponses: 9
    Dernier message: 07/11/2005, 11h38

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