Installation fonction NO.SEMAINE

klm

XLDnaute Nouveau
Salut a tous! je vous explique mon probleme, j'ai besoin d'utiliser la fonction NO.SEMAINE pour une entreprise ou je fait mon stage,
la bas pas de souci pour l'installation
outils -> macro complementaire
et ca roule!

mais chez moi impossible de l'installer sachant que je n'ai pas le cd EXCEL, y a-t-il un endroit ou je pourrais telecharger la fonction?
ou par un autre moyen?

j'utilise Excel 2003, merci d'avance c'est trés important !!!
:eek:
 

ROGER2327

XLDnaute Barbatruc
Re : Installation fonction NO.SEMAINE

Bonsoir à tous,
Je n'ajouterai pas grand chose à cette discussion si ce n'est un "merci !" aux excellents Monique et JCGL pour la formule simple
Code:
=ENT(MOD(ENT((C2-2)/7)+0.6;52+5/28))+1
que je ne connaissais pas. Attention toutefois au domaine de validité : mer-31-déc-2104 renvoie 53 au lieu du 1 attendu. Mais d'ici-là, on a le temps de voir venir !
Je joins un tableau comparatif des résultats comparés de la fonction NO.SEMAINE(), version américaine (colonne MS-A) et européenne (colonne MS-I) avec la fonction ISO
Code:
=ENT((A3-SOMME(MOD(DATE(ANNEE(A3-MOD(A3-2;7)+3);1;2);{1E+99;7})*{1;-1})+5)/7)
(pour une date donnée en A3).
L'examen de ce tableau devrait conduire les utilisateurs à oublier définitivement la fonction NO.SEMAINE().​
Cordialement,
ROGER2327
 

Pièces jointes

  • Semaine_ISO.zip
    37.4 KB · Affichages: 241

Karinette31

XLDnaute Nouveau
Re : Installation fonction NO.SEMAINE

Bonjour à tous,

Tout d'abord un grand merci à monique pour cette formule qui fonctionne très bien.

Par contre, je me retrouve avec un tableau que l'on doit désormais prolonger sur une durée supérieure à un an, et la conversion date en semaine, ne précise pas l'année.

Cela occasionne donc des erreurs dans les graphes réalisés à partir de ce résultat en semaine car par exemple pour une date au 14/09/2010 ou 14/09/2011, le résultat est toujours 37, or je souhaite les différencier.

Je suis donc à la recherche d'une formule de conversion de "date" en "semaine/année".
En recherchant sur le net, je n'ai pour le moment pas trouvé de réponse à ma question.

J'espère que l'un de vous pourra éclairer ma lanterne.

Merci par avance.

Karine
 

Karinette31

XLDnaute Nouveau
Re : Installation fonction NO.SEMAINE

oh! merci Piga25! J'avais tenté de rajouter cette fonction ANNEE, mais j'avais omis de mettre le &.

Cela fait toute la différence! ; )

Allez, je continue l'exploration de mon fichier! Merci encore et bonne journée!

Karine
 

pierrejean

XLDnaute Barbatruc
Re : Installation fonction NO.SEMAINE

Bonjour à tous

Un petit fichier repertoriant diverses fonctions relatives au N° de semaine
une de mon cru
une de Bigmousse
et surtout une de notre formidable ROGER grand specialiste des dates

Arf: Je suis vraiment en retard et n'avais même pas vu que ROGER s'etait manifesté !!
 

Pièces jointes

  • NOSEM.xls
    55.5 KB · Affichages: 190
  • NOSEM.xls
    55.5 KB · Affichages: 206
  • NOSEM.xls
    55.5 KB · Affichages: 209
Dernière édition:

roby

XLDnaute Occasionnel
Re : Installation fonction NO.SEMAINE

Bonjour le Forum, Monique

Ta formule suivante affiche le n° de semaine 9 pour le jour par exemple 26/02/2012 mais devrait afficher encore 8 du fait que c'est un dimanche non:
=ENT(MOD(ENT((C2-2+(JOUR(1)=2)*6)/7)+0,6+((JOUR(1)=2)*208);52+5/28))+1

Cordialement
 

JCGL

XLDnaute Barbatruc
Re : Installation fonction NO.SEMAINE

Bonjour à tous,

La formule :
=ENT(MOD(ENT((A1-2+(JOUR(1)=2)*6)/7)+3/5+((JOUR(1)=2)*208);52+5/28))+1
renvoie 8 pour le 26/02/2012 en A1...

Tu remarqueras la suppression du +0,6 ou +0.6 et le remplacement par +3/5... Astuce de Roger qui permet de se départir du choix du séparateur décimal.

A+ à tous
 

Misange

XLDnaute Barbatruc
Re : Installation fonction NO.SEMAINE

Hello
Une page assez complète sur ce sujet avec surtout le décorticage pas à pas par laurent Longre de ces formules alambiquées à souhait.
Ce lien n'existe plus

Une superbe démonstration !

Laurent y explique du reste les limites de la détermination par formule des N° de semaine à la norme européenne.
Et sinon pour les fonctions en VBA il y a ça aussi
Ce lien n'existe plus

Ca doit bien faire 15 ans qu'on demande à microsoft de se souvenir qu'il y a quelques personnes dans le monde qui n'utilisent pas la norme américaine. On verra dans la prochaine version d'excel si on a fini par être entendus !
 

chris

XLDnaute Barbatruc
Re : Installation fonction NO.SEMAINE

Bonjour

...
Ca doit bien faire 15 ans qu'on demande à microsoft de se souvenir qu'il y a quelques personnes dans le monde qui n'utilisent pas la norme américaine. On verra dans la prochaine version d'excel si on a fini par être entendus !

Idem pour le changement de semaine avec les filtres chronologiques : on aimerait bien que la rupture se fasse le lundi...
 

ROGER2327

XLDnaute Barbatruc
Re : Installation fonction NO.SEMAINE

Bonjour à tous


J'ai proposé, il y a quelque temps, des procédures de conversion de la date grégorienne en date à la norme ISO, mais elles sont devenues illisibles avec le temps.
Je les rappelle :
VB:
Function ISO(ByVal r, Optional X As Byte = 0)
' Transcription ISO d'une date grégorienne r.
'
'.__________________________________________________________________________________________.
'|           |                   |              |        |                                  |
'|     x     |       retour      |    format    |  type  |              exemple             |
'|___________|___________________|______________|________|__________________________________|
'|           |                   |              |        |                                  |
'| 0 ou omis | date ISO complète | "aaaa-WSS-J" | String |=ISO("3/3/2003")   | 2003-W10-1   |
'|     1     | semaine ISO       | "aaaa-WSS"   | String |=ISO("3/3/2003";1) | 2003-W10     |
'|     2     | semaine ISO       | SS           | Double |=ISO("3/3/2003";2) |           10 |
'|                                                                                          |
'|    Validité probable : lundi premier janvier 1900 - vendredi 31 décembre 9999 inclus.    |
'|__________________________________________________________________________________________|
'
Application.Volatile
Dim a&, b&
  r = CDate(r)
  r = r - (r < 61)
  a = r - Weekday(r, vbMonday)
  b = DateSerial(Year(a + 4), 1, 1)
  ISO = IIf(X < 2, Year(b) & "-W", 0) + (Format((a - b + Weekday(b, vbMonday)) \ 7 + (Weekday(b, vbMonday) > 4) + 1, "00") & IIf(X < 1, "-" & Weekday(r, vbMonday), ""))
End Function

Function GREG(ByVal r) As Date
' Transcription grégorienne d'une date ISO r.
'
'.__________________________________________________________________________________.
'|              |                        |        |                                 |
'|       r      |         retour         | format |             exemple             |
'|______________|________________________|________|_________________________________|
'|              |                        |        |                                 |
'| "aaaa-WSS-J" |    date grégorienne    |  Date  | =GRG("2003-W14-5") | 04/04/2003 |
'|  "aaaa-WSS"  | lundi de la semaine SS |  Date  | =GRG("2003-W14")   | 31/03/2003 |
'|                                                                                  |
'|                Validité probable : 1900-W01-1 - 9999-W52-5 inclus.               |
'|__________________________________________________________________________________|
'
Application.Volatile
Dim X, y, z As Date, u%
  X = Split(r, "-W", 2)
  y = Split(X(1) & "-1", "-")
  z = DateSerial(X(0), 1, 1) + 7 * y(0)
  u = Weekday(z, vbMonday)
  z = z - u + 7 * (u < 5) + y(1)
  GREG = z + (z < 61)
End Function


ROGER2327
#5529


Vendredi 27 Gueules 139 (Saint Tabagie, cosmogène - fête Suprême Quarte)
2 Ventôse An CCXX, 0,9081h - cornouiller
2012-W08-2T02:10:46Z
 

clark...kent

XLDnaute Nouveau
Re : Installation fonction NO.SEMAINE

Bonjour le forum,

Je déterre un vieux sujet mais c'est ce que je recherche : une macro qui me permet
d'afficher le numéro de semaine si il y a une date remplie en collone A.
Si A est vide O sera vide.

J'ai trouvé la fonction excel le problème est que mon fichier se charge chaque jour et
que si je recopie la fonction excel mon fichier fait plus de 12 Mo!!!

J'ai essayé (format("ww", vbMonday, firstfourdays) et ça ne fonctionne pas.

Je suis sous excel 2007 pro, je le précise car j'ai eu beaucoup de soucis pour paramétré mes critères
de tri sous format date en macro.

J'ai le sentiment que la fonction ci-dessous est un bout de solution mais je n'arrive pas à l'utiliser
merci de votre aide.

Bonjour,
Puisqu'on est en plein dans NO.SEMAINE voici quelques fonctions aussi très utiles

Code:
Function NOSEM(D As Date) As Long
   D = Int(D)
   NOSEM = DateSerial(Year(D + (8 - WeekDay(D)) Mod 7 - 3), 1, 1)
   NOSEM = ((D - NOSEM - 3 + (WeekDay(NOSEM) + 1) Mod 7)) \ 7 + 1
End Function

Code:
Public Function NumSemaine(D As Date)
Dim t As Long
  t = DateSerial(Year(D + (8 - Weekday(D)) Mod 7 - 3), 1, 1)
  NumSemaine = ((D - t - 3 + (Weekday(t) + 1) Mod 7)) \ 7 + 1
End Function
 

clark...kent

XLDnaute Nouveau
Re : Installation fonction NO.SEMAINE

J'y manquerais pas, un petit cou...cou en plein vol ;)

Une macro parce que mon fichier fait déjà plus de 5Mo et qu'il sera remplie de 40 lignes par jour de A à O,
je ne peux donc pas copier ma fonction sur TOUTE la colonne O sinon le fichier fera plus de 15 mo
sans les données journalières. (ou alors j'investi sur une bête de calcul)

Mais également parce que je ne veux pas que le fichier puisse être corrompue par erreur ce qui est souvent le cas lorsque des fonctions excels sont visible, une mauvaise manipulation est si vite arrivée (ooups pardon Madame j'ai glissée) :)

J'ai trouvé une fonction bidouille : (ici exemple avec 2009,2010, 2011 et 2012)
Range("O2:O65356").Value = Range("A2:A65356").Value
For Each X In Range("O2:" & Range("O65356").End(xlUp).Address)
If X < #1/1/2012# And X > #12/31/2010# Then
X.Value = DatePart("ww", X)
X.NumberFormat = "General"
X.Value = X - 1
ElseIf X < #1/1/2011# And X > #12/31/2009# Then
X.Value = DatePart("ww", X)
X.NumberFormat = "General"
X.Value = X - 1
ElseIf X < #1/1/2010# And X > #12/31/2008# Then
X.Value = DatePart("ww", X)
X.NumberFormat = "General"
X.Value = X
ElseIf X > #12/31/2011# Then
X.Value = DatePart("ww", X)
X.NumberFormat = "General"
X.Value = X
End If
Next

Je vais ainsi régler avec +1 ou -1 toutes les années ou le numéro de semaine est décalé jusqu'à 2020 :)

Merci
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 276
Messages
2 086 714
Membres
103 377
dernier inscrit
fredy45