Recuperer le numero de la semaine

Contenu du snippet

Public Function NumeroSemaine(dateSemaine As Date) As Integer
    Dim NumJour             As Integer
    Dim NbJour              As Integer
    Dim nbpremier           As Integer
    Dim Jour                As Date
    Dim DernierJourSemaine  As Date

    'Correspond au 1 er janvier de l'année de la date donnée
    Jour = DateSerial(Year(dateSemaine), 1, 1)
    
    'Correspond au jour dans la semaine (1 = lundi, 2 = mardi, 3 = mercredi, 4 = jeudi, etc ...)
    NumJour = Weekday(Jour, vbMonday)
    
    'Correspond au dernier jour de la semaine du 1er janvier
    DernierJourSemaine = DateSerial(Year(dateSemaine), 1, 8 - NumJour)
    
    'Si le 1er janvier est après le vendredi, la semaine du 1 er janvier n'est pas comptabilisée dans la nouvelle année
    If NumJour > 5 Then
        NumeroSemaine = 0
    Else
    'sinon elle l'est
        NumeroSemaine = 1
    End If
    
    'Différence entre la date et le jour de la fin de semaine du 1er janvier
    NbJour = dateSemaine - DernierJourSemaine

    'Ensuite, on calcule le numéro de la semaine
    'Si le calcul tombe juste, on met le résultat
    If NbJour Mod 7 = 0 Then
        NumeroSemaine = (NbJour / 7) + NumeroSemaine
    Else
    'Sinon, on, rajoute un car il y a une semaine en cours
        NumeroSemaine = NumeroSemaine + Int(NbJour / 7) + 1
    End If
    
    'Si le numéro est égal à 53, on vérifie où se trouve le 1er janvier
    If NumeroSemaine = 53 Then
        nbpremier = Weekday(DateSerial(Year(dateSemaine) + 1, 1, 1), vbMonday)
        'Si le 1er tombe avant le vendredi, le numéro de la semaine est le numéro 1
        If nbpremier < 5 Then NumeroSemaine = 1
        'sinon, le numéro est le 53
    End If
    
    'Le numéro de la semaine peut être egale à 0 (01/01/2005)
    'car il ne detécte pasla semaine 53
    'On cherche alors le numéro de la semaine du 31/12 de l'année d'avant
    If NumeroSemaine = 0 Then
        'Sauf si le 01/01 est le lundi
        If nbpremier = 1 Then
            NumeroSemaine = 1
        Else
            NumeroSemaine = NumeroSemaine(DateSerial(Year(dateSemaine) - 1, 12, 31))
        End If
    End If
End Function



Compatibilité : VB6, VBA

Disponible dans d'autres langages :

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.