Bonsoir,
help d'EXCEL:
NO.SEMAINE
Dans le menu Outils, cliquez sur Macros complémentaires.
Dans la liste Macros complémentaires disponibles, activez la case à cocher Utilitaire d'analyse, puis cliquez sur OK.
Si nécessaire, suivez les instructions fournies par le programme d'installation.
Syntaxe
NO.SEMAINE(numéro_de_série;méthode)
numéro_de_série représente une date de la semaine. Les dates doivent être entrées en utilisant la fonction DATE, ou sous la forme de résultats d'autres formules ou fonctions. Par exemple, utilisez DATE(2008; 5; 23) pour le 23e jour du mois de mai 2008. Des problèmes peuvent survenir si les dates sont entrées sous forme de texte.
méthode détermine quel jour est considéré comme le début de la semaine. La valeur par défaut est 1.
donc tu mets dans la cellule après avoir coché "Utilitaire d'analyse"
=NO.SEMAINE(AUJOURDHUI();1) si tu considères que tes semaines commencent le Dimanche
=NO.SEMAINE(AUJOURDHUI();2) si tu considères que tes semaines commencent le Lundi
ATTENTION : Par exemple le 1er Janvier 2005 constitue à lui seul, pour cette formule, 1 semaine. C'est à dire que la semaine qui suit est la semaine 2.
Ce n'est peut-être pas la numérotation désirée. En fait je ne connaîs pas le critère réel de définition de la première semaine d'une année.
...........j'ai cherché et trouvé ceci
http://fr.wikipedia.org/wiki/ISO_8601
voici, trouvé sur un site, une fonction qui semble répondre aux normes ISO:
pour l'installer insérer un module normal en VBE puis coller le code.
revenir sous excel cliquer sur fx pour ajouter une fonction dans la cellule active.
sélectionner toutes puis personnalisées
choisir numerosemaine
ajouter AJOURDHUI() entre les parenthèses
j'ai testé cela semble bon
ouf!
Cordialement
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
Message édité par seniorpapou le 05-11-2006 à 15:52:07