decalage n°semaine avec date Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
s
snoopy
Jeune membre
Jeune membre
Messages : 40
Inscrit le : 27 décembre 2006

Message par snoopy » 30 mai 2016, 15:08

bonjour,

j ai un souci avec la semaine et la date réelle (aujourd'hui :semaine 22 début le 30 mai alors que mon fichier ouvre semaine 33 au 6 juin) et je ne trouve pas pourquoi
de plus mes listbox bloquent aussi (incompatibilité de type) mais j ai vérifié ma requête et ne vois pas ce qui cloche

merci de votre aide
le fichier étant lourd, j'ai mis un lien



http://www.cjoint.com/c/FEEnaeLkIMZ
Avatar du membre
LouReeD
Contributeur
Contributeur
Messages : 6'674
Appréciations reçues : 322
Inscrit le : 14 octobre 2014
Version d'Excel : 2013 FR, 2016 FR
Contact :
Téléchargements : Mes applications

Message par LouReeD » 30 mai 2016, 21:25

Bonsoir,

une petite erreur le fichier s'ouvre en semaine 23 au 06/06/2016 et non pas semaine 33...
Ceci dit ce doit être du à une erreur de calcul "connu" d'Excel... bien que VBA soit plus précis...
Bref , sur ce site il y a pas mal de sujet sur ces histoire d'erreur, d'ailleurs certain imprimeur devraient y faire un tour avant d'imprimer leur calendrier, j'en ai trouvé qui avait "une semaine" d'avance !

là un lien : http://forum.excel-pratique.com/post452 ... lit=calcul n° de semaine#p452191
et là : http://forum.excel-pratique.com/excel/f ... it=semaine

@ bientôt

LouReeD
Quelques règles à lire ICI ;;)
______________________________________________________Vous pouvez allez faire un tour sur : Index de "Mes applications" ;;)
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'171
Appréciations reçues : 446
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 30 mai 2016, 21:45

Bonsoir,

Ton calcul est faux... mais plutôt que de continuer avec les fonctions de Microsoft qui n'a jamais réussi à faire un calcul pérenne du numéro de semaine européen (on finit toujours par rencontrer un bogue un jour ou l'autre malgré la simplicité de ce calcul !) je conseille d'utiliser une fonction sûre, par exemple :
Function NSem(d As Date) As Integer
    Dim dref
    dref = DateSerial(Year(d + (8 - Weekday(d)) Mod 7 - 3), 1, 3)
    dref = dref - Weekday(dref) + 2
    NSem = (d - dref) \ 7 + 1
End Function
Cordialement.
s
snoopy
Jeune membre
Jeune membre
Messages : 40
Inscrit le : 27 décembre 2006

Message par snoopy » 31 mai 2016, 16:19

bonjour
merci ferrand pour ta réponse mais cette formule :
Function NSem(d As Date) As Integer
Dim dref
dref = DateSerial(Year(d + (8 - Weekday(d)) Mod 7 - 3), 1, 3)
dref = dref - Weekday(dref) + 2
NSem = (d - dref) \ 7 + 1
End Function[/i][/b]

je l insere à quel niveau car j ai 2 parties ou il y a le n° de semaine
de plus pour les listbox qu'en est il

merci
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'171
Appréciations reçues : 446
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 31 mai 2016, 17:09

C'est une fonction. Tu la colles donc dans un module. Elle renvoie le numéro de semaine à partir d'une date.
Partout où tu as besoin du numéro de semaine dans ton code tu l'utilises pour le renvoyer : NSem(ladateconcernée).
Je n'ai pas ton classeur sous les yeux, je regarderai dans la soirée.

A+
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'171
Appréciations reçues : 446
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 1 juin 2016, 00:48

Bonsoir,

J'ai jeté un oeil... et je t'avoue que devant la difficulté de s'y retrouver rapidement je ne suis pas très enclin à approfondir...

Pour ce qui est du problème semaine, il te suffit de coller la fonction en tête du module (parce que les procédures Function se placent avant les procédures Sub dans un module, je pense qu'on ne te l'a pas encore dit...) et avec ta variable N_semaine tu fais simplement : N_semaine = NSsem(Date).
Date plutôt que Now, car Now te renvoie aussi l'heure et si tu n'as pas besoin des deux en même temps, Date est tout à fait indiqué (de même que Time l'est pour avoir l'heure indépendamment de la date).
En outre, le type de procédures Auto_... telle Auto_Open, constitue depuis longtemps une vieillerie remplacée avantageusement par les procédures évènementielles, ce que tu aurais donc intérêt à faire, et donc placer ce code dans une procédure Workbook_Open dans le module ThisWorkbook.
Egalement, la présence de 4 modules ne fait que disperser le code et occuper de la place inutilement en mémoire, un suffit largement à accueillir tout ton code et celui qui tu auras à ajouter (des modules distincts se mettent en place s'ils sont justifiés par des utilisations spécifiques qui conduisent à y placer une partie du code pour l'isoler du reste, ce qui n'est pas le cas ici.

Tu as pris soin de nommer tes modules, je n'ai rien contre mais il me semble que le renommage des contrôles, qui lui apporte de nombreux avantages aurait dû passer avant les modules, pour lesquels c'est relativement secondaire, or les contrôles n'ont pas été renommés et on va à la pêche pour savoir lequel est quoi...
J'ai réussi à voir tes ListBox (pas évident !) mais j'ai cherché en vain leur mention dans le code. Ils n'apparaissent qu'une fois :
sheets(ListBox2.Value).Select
sheets(ListBox1.Value).Select
Je ne vois donc pas comment ils peuvent être alimentés... ni quel problème ils te posent... ?

Si je peux encore ajouter quelques remarques dans le désordre :
- Dès que je vois Select écrit dans une ligne de code, j'ai la tentation de m'arrêter là, parce que je sais que je vais souffrir ! Sauf les rares cas où il s'agit de manipuler l'interface pour faire visualiser telle ou telle partie du fichier à l'utilisateur à un moment précis, c'est toujours inutile... Il y a pire dans le genre, mais les deux lignes citées plus haut, une sélection se substituant nécessairement à la précédente, montrent que si la seconde sera de toute façon superflue, la première est de plus totalement gratuite puisque abandonnée sitôt faite !

- Je crois aussi qu'il faut prioritairement apprendre à indenter correctement le code, ce qui permet de le lire en sachant rapidement ce qu'on lit... et aussi à manier les boucles pour éviter de longues énumérations dont on peut agréablement se dispenser.

Pour le reste, je n'ai pas spécialement regardé la nature de ton projet mais j'ai tout de même vu le grand nombre de feuille, dont 53 pour les semaines de l'année : dans ma conception d'un planning, cela en fait déjà 52 de trop, une doit me suffire pour afficher l'une ou l'autre des 53 semaines, les données étant alors stockées de façon plus économique, tout en devant rester accessibles et appelables à tout moment. Mais cela, doit se penser avant de passer à la réalisation.

Bonne continuation cependant.
s
snoopy
Jeune membre
Jeune membre
Messages : 40
Inscrit le : 27 décembre 2006

Message par snoopy » 1 juin 2016, 17:57

bonjour

merci pour toutes ces infos MFERRAND, je vais revoir tout cela de près , remanier les codes
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message