Bonjour,
J’aimerai récupérer le n° de mois en VBA à partir d’un n° de semaine et d’une année : 2016-sem21.
Quelqu’un pourrais m’aider svp ??
Bonjour,
J’aimerai récupérer le n° de mois en VBA à partir d’un n° de semaine et d’une année : 2016-sem21.
Quelqu’un pourrais m’aider svp ??
Bonjour
Prends un café, puis reviens après avoir réfléchi à la durée d'une semaine (elle peut commencer à l'intérieur d'un mois et se terminer à l'intérieur du mois suivant).
Ta question est donc à reformuler avec plus de précision.
Pour les semaines à cheval, j'aimerais le mois où il y a le plus de jours dans ces semaines là.
Je m'exprime mal donc pour exemple : semaine 13 2016 il y a 3 jours en mars et 2 en avril j'aimerai donc qu'il me récupère le mois de mars.
Pour les semaines complètes d'un mois tel que : semaine 14 2016 les 5 jours sont en avril je veux qu'il me récupère le mois d'avril.
Ah ! Que voilà une définition rigolote !
Mais on va jouer ce jeu-là :
Il commence par la définition de la date de début de la première semaine de l'année concernée (le reste n'est qu'arithmétique).
Questions, donc :
1) sais-tu déterminer cette date ?
2) si oui : comme,t t'en sers-tu ensuite ? Si non : comment entrevois-tu de t'en servir ensuite ? (juste pour "voir" si tu "vois" bien).
Salut, via une recherche ?
re
bonjour
perso les dates et mois avec excel ca fait 3
mais si je raisonne logiquement
semaine 13 = 13*7 jour de l'année
on ajoute donc ce nombre a la date du 01/01/xxxx
on obtiens ainsi une date complete
il est facile apres d'en récupérer le mois avec "month"
et si le jour correspond a "lundi,"mardi" et.... on devine aisément si l'on doit enlever ou pas 11 au mois obtenu
je le redis c'a n'est qu'une idée
une base
format(unedate,"ddd") nous donne le jour en texte
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Sub test() 'nombre de jour = 13 semaines * 7 jour jour = 13 * 7 mois = Month(CDate("01/01/2016") + jour) ' on ajoute ce nombre de jour a la date du 1 1 2016 avec la fonction month on obtient le mois days = Weekday(CDate("01/01/2016") + jour) weekday nous donne si je ne me trompre pas le jour de la semaine (1,2,3,et....) MsgBox Format("01/" & mois & "/2016", "mmmm") & " (" & mois & ")" End Sub
je suis certain qu'avec ca on doit pouvoir trouver le bon truc
re
de même que encore plus facile finalement
si le mois de (la date obtenu -4 jour) <> du (mois de la date obtenu ) alors c'est mois -1
en ayant controlé si date obtenu est bien la 13 eme auparavant bien sur avec worksheetfunction.weeknum(ta date obtenue)
c'est juste un raisonnement
edit:
logiquement c'est même 4 jour 3 d'un coté 3 de l'autre qui nous font 7 avec le 4 eme
Bon il ne fallait pas aller chercher bien loin finalement le probleme avait déjà été posé
ICI!!
CODE vba
J 'AVAIS ZAPER LE DATEADD
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 Public Function SemaineToMois(annee As String, semaine As String) As Integer Dim jour As Date jour = DateAdd("ww", semaine, DateSerial(annee, 1, 1)) Debug.Print jour SemaineToMois = Month(DateAdd("ww", semaine, DateSerial(annee, 1, 1))) End Function Sub essai() Debug.Print SemaineToMois(2016, 13) End Sub
mes fichiers dans les contributions:
mail avec CDO en vba et mail avec CDO en vbs dans un HTA
survol des bouton dans userform
prendre un cliché d'un range
si ton problème est résolu n'oublie pas de pointer :: ça peut servir aux autres
et n'oublie pas de voter
Bonsoir,
J'ai un doute sur les 5 jours sachant que dans la semaine 13 2016 nous avons le lundi de pâques donc devons prendre en compte du lundi au vendredi ou du mardi au samedi ?
ces 2 types de semaines dans le travail existent si on considère éventuellement les lundi repos et le samedi travail
Sinon si je reprends le titre du lien de Docmarti :
puis un peu plus bas :BUG: Les fonctions Format et DatePart peuvent renvoyer un numéro de semaine erroné pour le dernier lundi de l'année
ça ne toucherai que les pc vu qu'il parle de dllLors de la détermination du numéro de semaine d'une date selon la norme ISO 8601, l'appel de la fonction sous-jacente au fichier Oleaut32.dll renvoie par erreur la semaine 53 au lieu de la semaine 1 pour le dernier lundi de certaines années.
En tout cas j'ai pas encore essayé sur PC mais DatePart me va pour déterminé le 1er jour de la semaine 1 de l'année choisie (Solution Mac PC bien sur) en norme iso bien sur(j'ai pas intérêt a me louper
)
le résultat :
En 2000, le 1er jour de la semaine 1 est : 03/01/2000
il y a 52 semaines
En 2001, le 1er jour de la semaine 1 est : 01/01/2001
il y a 52 semaines
En 2002, le 1er jour de la semaine 1 est : 31/12/2001
il y a 52 semaines
En 2003, le 1er jour de la semaine 1 est : 30/12/2002
il y a 52 semaines
En 2004, le 1er jour de la semaine 1 est : 29/12/2003
il y a 53 semaines
En 2005, le 1er jour de la semaine 1 est : 03/01/2005
il y a 52 semaines
En 2006, le 1er jour de la semaine 1 est : 02/01/2006
il y a 52 semaines
En 2007, le 1er jour de la semaine 1 est : 01/01/2007
il y a 52 semaines
En 2008, le 1er jour de la semaine 1 est : 31/12/2007
il y a 52 semaines
En 2009, le 1er jour de la semaine 1 est : 29/12/2008
il y a 53 semaines
En 2010, le 1er jour de la semaine 1 est : 04/01/2010
il y a 52 semaines
En 2011, le 1er jour de la semaine 1 est : 03/01/2011
il y a 52 semaines
En 2012, le 1er jour de la semaine 1 est : 02/01/2012
il y a 52 semaines
En 2013, le 1er jour de la semaine 1 est : 31/12/2012
il y a 52 semaines
En 2014, le 1er jour de la semaine 1 est : 30/12/2013
il y a 52 semaines
En 2015, le 1er jour de la semaine 1 est : 29/12/2014
il y a 53 semaines
En 2016, le 1er jour de la semaine 1 est : 04/01/2016
il y a 52 semaines
En 2017, le 1er jour de la semaine 1 est : 02/01/2017
il y a 52 semaines
En 2018, le 1er jour de la semaine 1 est : 01/01/2018
il y a 52 semaines
En 2019, le 1er jour de la semaine 1 est : 31/12/2018
il y a 52 semaines
En 2020, le 1er jour de la semaine 1 est : 30/12/2019
il y a 53 semaines
En 2021, le 1er jour de la semaine 1 est : 04/01/2021
il y a 52 semaines
En 2022, le 1er jour de la semaine 1 est : 03/01/2022
il y a 52 semaines
En 2023, le 1er jour de la semaine 1 est : 02/01/2023
il y a 52 semaines
En 2024, le 1er jour de la semaine 1 est : 01/01/2024
il y a 52 semaines
En 2025, le 1er jour de la semaine 1 est : 30/12/2024
il y a 52 semaines
En 2026, le 1er jour de la semaine 1 est : 29/12/2025
il y a 53 semaines
En 2027, le 1er jour de la semaine 1 est : 04/01/2027
il y a 52 semaines
En 2028, le 1er jour de la semaine 1 est : 03/01/2028
il y a 52 semaines
En 2029, le 1er jour de la semaine 1 est : 01/01/2029
il y a 52 semaines
En 2030, le 1er jour de la semaine 1 est : 31/12/2029
il y a 52 semaines
Cordialement
Ryu
La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein
Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple
Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)
re
coucou TYU
la tu éveille ma curiositéDatePart me va pour déterminé le 1er jour de la semaine 1 de l'année choisie
je t'envoie ma méthode parMP tout de suite
envoie la tienne si tu veux par MP bien sur
mes fichiers dans les contributions:
mail avec CDO en vba et mail avec CDO en vbs dans un HTA
survol des bouton dans userform
prendre un cliché d'un range
si ton problème est résolu n'oublie pas de pointer :: ça peut servir aux autres
et n'oublie pas de voter
Re,
bon c'est envoyé, tu me diras ce qu'il en est …
Edit : j'ai procédé de cette manière là à cause de ce qu'il est dit (en rouge) dans le lien de Docmarti :
BUG: Les fonctions Format et DatePart peuvent renvoyer un numéro de semaine erroné pour le dernier lundi de l'année
Cordialement
Ryu
La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein
Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple
Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)
Partager