numero de semaine sur l'activation d'une cellule

V

valerie

Guest
Bonjour,

J'ai déjà regardé un peu partout mais la je suis perdue. Voici mon problème :
J'ai une feuille qui contient dans la colonne A des dates et dans la colonne B les numeros de semaine correspondantes mises manuellement.
Mon chef voudrait que des que l'on enregistre une nouvelle date, le numero de la semaine se mette automatiquement .
Je crois que la fonction pour la semaine est la suivante :

Function NoSemaine(date, premier_j, première_sem)
' Application.Volatile
' NoSemaine = Format(dDate, "ww", premier_j, Première_Sem)
'End Function

Comment faut-il que je fasse pour lui dire que la date correspond à la case A activée (if (Range("A?").activate)...) et lui dire que cette fonction s'applique sur toute la colonne A ou des cellules sont remplies?

Merci beaucoup a tout ceux qui auront des idées,

valérie
 
M

michel

Guest
bonjour valérie

Cette procedure vba pourra peut etre t'aider

Sub semaine()
Dim sem As Date
Dim val
Dim dte As Date

For Each val In Range("a1:a10")
dte = val
sem = Format(dte, "WW", , vbFirstJan1)
val.Offset(0, 1) = "Semaine " & Format(sem, "00")
Next
End Sub



à adapter selon tes besoins

bonne apres midi
Michel
 
L

LaurentTBT

Guest
Bonsoir à tous.

Juste quelques précisions sur la fonction NO.SEMAINE qui me semble en effet être la meilleure solution ici.

1- Pour pouvoir l'utiliser, il faut charger une macro complémentaire: menu "Outils" puis "Macros complémentaires" puis cocher la case "Utilitaire d'analyse". Si cette case n'apparaît pas, il faut installer cette macro complémentaire à partir du CD rom d'excel.

2- Cette fonction a 2 arguments. Le premier correspond à la date dont on souhaite connaître le numéro de semaine. Le second est soit 1, soit 2: 1 si le numéro de semaine change le dimanche, 2 pour le lundi.

Pour le problème de Valérie, je mettrais donc en B2: =NO.SEMAINE(A2;2), puis j'étirerais cette formule sur toute la colonne B.

3- Petit défaut de cette fonction, lorsque le 1er janvier est un vendredi, samedi ou dimanche, elle donne quand même semaine 1 pour ces trois jours, alors que souvent, on fait débuter le décompte des semaines au lundi suivant (c'était par exemple le cas en 2000).
Petite astuce pour palier ce pb: je rajoute un test pour savoir quel jour est le 1er janvier de l'année considérée, et si c'est vendredi, samedi ou dimanche, j'enlève 1 à la fonction NO.SEMAINE. voici donc la formule complète pour la cellule B2 de Valérie:
=SI(JOURSEM(DATE(ANNEE(A2);1;1);2)>4;NO.SEMAINE(A2;2)-1;NO.SEMAINE(A2;2))

Je n'ai pas d'agenda sous la main, donc je n'ai pas pu tester sur plusieurs dates. Cette formule me donne semaine 30 pour aujourd'hui. J'espère ne pas m'être trompé.

Bonne soirée à tous.
 
C

chris

Guest
Bonjour
J'utilisais la même formule que LaurentBt mais la fonction format prévoit le calcul à la française et évite donc le test sur le 1er janvier.

On peut écrire la fonction et ensuite soit l'utiliser dans une formule à recopier jusqu'en bas ou utiliser la solution de michel qu'il faut déclencher volontairement ou opter pour une procédure événementielle à chaque saisie mais ça va ralentir Excel.

Chris
 
G

Giom

Guest
Fonction

il faut d'abord créer une ligne dans laquelle tu vas placer la date pour laquelle tu souhaite connaître le n° de semaine. Exemple : pour le 17 décembre 2004, tu notes simplement : 17/12/2004

dans la ligne du dessous (ou là où tu le souhaites), il faut indiquer la formule suivante :
=NO.SEMAINE(sélectionner-la-case-précédente-où-tu-as-placé-la-date;2)
soit
=NO.SEMAINE(A2;2)
si tu as placé ta date "17/12/2004" dans la case A2 de ta feuille de calcul.

tu mets un "2" en fin de formule si tu considères que la semaine commence le lundi. tu mets un "1" si pour toi la semaine commence le dimanche.

et basta

tu fais "entrée" et le n° de la semaine apparaît
51, en l'occurrence

tu peux ensuite masque la ligne dans laquelle tu affiches ta date source, pour éviter de multiplier les infos polluantes sur ton doc.
 

Discussions similaires

Statistiques des forums

Discussions
314 450
Messages
2 109 730
Membres
110 553
dernier inscrit
loic55