Accueil > > > NUMÉRO DE LA SEMAINE : SANS LES BUGS DE LA SEMAINE 53 ET DU 29/12 (TESTÉ ET VÉRIFIÉ)
NUMÉRO DE LA SEMAINE : SANS LES BUGS DE LA SEMAINE 53 ET DU 29/12 (TESTÉ ET VÉRIFIÉ)
Information sur la source
Description
Il y a un ensemble de fonction dont 2 que j'ai eu sur ce site mais je les ai un peu remaniées pour qu'elles soient plus compréhensibles. Mais j'ai entièrement créé la fonction principale nommée : "NumeroSemaine". S'en servir est très facile, il suffit de mettre la date en argument de la fonction pour avoir le numéro EXACT de la semaine! En effet, la majorité des codes que j'ai trouvé avaient juste un bug ou deux. Celui que je propose n'a pas les bugs de la semaine 53 et du 29 décembre (si vous en trouvez un... prévenez-moi! Finalement, c'est plus une mise à jour de fonctions déjà existantes que d'une nouvelle fonction!!!
Source
- Option Explicit
-
- Public Function NumeroSemaine(dateSemaine As Date) As Integer
- 'Réalisé par Alexsimps en VBA
-
- Dim Jour As Date
- Dim NumJour As Integer
- Dim DernierJourSemaine As Date
- Dim NbJour As Integer
- Dim nbpremier As Integer
-
- '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 = JourSemaine(Jour)
-
- '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 = JourSemaine(DateSerial(Year(dateSemaine) + 1, 1, 1))
-
- 'Si le 1er tombe avant le vendredi, le numéro de la semaine est le numéro 1
- If nbpremier < 5 Then
- NumeroSemaine = 1
- End If
- '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
-
- Private Function NumeroJourJulien(dateATraiter As Date)
- 'Récupéré sur vbFrance.com
- 'J'ai uniquement renommé quelques variables
- 'Par Alexsimps
- Dim y As Long
- Dim m As Long
- Dim DDdd As Double
- Dim Annee As Long
- Dim Mois As Long
- Dim a As Double
- Dim b As Double
-
- Annee = Year(dateATraiter)
- Mois = Month(dateATraiter)
- DDdd = Day(dateATraiter) + Hour(dateATraiter) / 24 + Minute(dateATraiter) / 24 / 60 + Second(dateATraiter) / 24 / 60 / 60
-
- If Mois <= 2 Then y = Annee - 1: m = Mois + 12 Else y = Annee: m = Mois
-
- If dateATraiter >= 1582.1015 Then
- a = y \ 100
- b = 2 - a + a \ 4
- End If
-
- If y = Abs(y) Then
- NumeroJourJulien = Int(365.25 * y) + Int(30.6001 * (m + 1)) + DDdd + 1720994.5 + b
- Else
- NumeroJourJulien = Int(365.25 * y) + Int(30.6001 * (m + 1)) + DDdd + 1720994.5
- End If
-
- End Function
-
- Private Function JourSemaine(LaDate As Date) As Integer
- 'Récupéré sur vbfrance.com
- 'Quelques modifications quand même...
- 'Par Alexsimps
- Dim res As Double
-
- res = NumeroJourJulien(LaDate) + 1.5
- res = res Mod 7
- JourSemaine = CInt(res)
-
- End Function
-
Option Explicit
Public Function NumeroSemaine(dateSemaine As Date) As Integer
'Réalisé par Alexsimps en VBA
Dim Jour As Date
Dim NumJour As Integer
Dim DernierJourSemaine As Date
Dim NbJour As Integer
Dim nbpremier As Integer
'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 = JourSemaine(Jour)
'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 = JourSemaine(DateSerial(Year(dateSemaine) + 1, 1, 1))
'Si le 1er tombe avant le vendredi, le numéro de la semaine est le numéro 1
If nbpremier < 5 Then
NumeroSemaine = 1
End If
'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
Private Function NumeroJourJulien(dateATraiter As Date)
'Récupéré sur vbFrance.com
'J'ai uniquement renommé quelques variables
'Par Alexsimps
Dim y As Long
Dim m As Long
Dim DDdd As Double
Dim Annee As Long
Dim Mois As Long
Dim a As Double
Dim b As Double
Annee = Year(dateATraiter)
Mois = Month(dateATraiter)
DDdd = Day(dateATraiter) + Hour(dateATraiter) / 24 + Minute(dateATraiter) / 24 / 60 + Second(dateATraiter) / 24 / 60 / 60
If Mois <= 2 Then y = Annee - 1: m = Mois + 12 Else y = Annee: m = Mois
If dateATraiter >= 1582.1015 Then
a = y \ 100
b = 2 - a + a \ 4
End If
If y = Abs(y) Then
NumeroJourJulien = Int(365.25 * y) + Int(30.6001 * (m + 1)) + DDdd + 1720994.5 + b
Else
NumeroJourJulien = Int(365.25 * y) + Int(30.6001 * (m + 1)) + DDdd + 1720994.5
End If
End Function
Private Function JourSemaine(LaDate As Date) As Integer
'Récupéré sur vbfrance.com
'Quelques modifications quand même...
'Par Alexsimps
Dim res As Double
res = NumeroJourJulien(LaDate) + 1.5
res = res Mod 7
JourSemaine = CInt(res)
End Function
Conclusion
Merci pour le gens de VBFrance (je me souviens plus son nom) qui m'a filé... euh, sur lequel j'ai "pompé" deux fonctions, s'il se reconnait, ben je lui dis merci!
Historique
- 05 août 2004 15:17:27 :
- Y avait un oubli tout ridicule qui m'affichait le numéro de la semaine précédente! Voila, c'est corrigé!!!
Sources du même auteur
Sources de la même categorie
Commentaires et avis
|
Derniers Blogs
SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko
Logiciels
Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning
|