Déterminer 1er lundi du mois en semaine paire etc...
Fermé
SF-TU
Messages postés
18
Date d'inscription
mercredi 21 mai 2014
Statut
Membre
Dernière intervention
13 juin 2016
-
18 déc. 2014 à 13:37
SF-TU Messages postés 18 Date d'inscription mercredi 21 mai 2014 Statut Membre Dernière intervention 13 juin 2016 - 19 déc. 2014 à 09:47
SF-TU Messages postés 18 Date d'inscription mercredi 21 mai 2014 Statut Membre Dernière intervention 13 juin 2016 - 19 déc. 2014 à 09:47
A voir également:
- Semaine paire et impaire 2022
- Microsoft money 2022 gratuit - Télécharger - Comptabilité & Facturation
- Qui visite mon profil facebook sans être ami 2022 - Guide
- Passer de windows 7 à windows 10 gratuitement 2022 - Guide
- Photoshop 2022 - Guide
- Clé windows 8.1 gratuit 2022 - Guide
5 réponses
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 744
Modifié par pijaku le 18/12/2014 à 14:18
Modifié par pijaku le 18/12/2014 à 14:18
Bonjour,
Mon premier conseil, en ce qui concerne les dates sous VBA, est d'utiliser un max de petites fonctions. En effet, avec les dates on réalise bien souvent le même type d'opération.
Mon second conseil est de s'accrocher parce que... ça "saoule" vite.
Voici déjà quelques fonctions :
🎼 Cordialement,
Franck 🎶
Mon premier conseil, en ce qui concerne les dates sous VBA, est d'utiliser un max de petites fonctions. En effet, avec les dates on réalise bien souvent le même type d'opération.
Mon second conseil est de s'accrocher parce que... ça "saoule" vite.
Voici déjà quelques fonctions :
Option Explicit 'variables Dim Annee As Integer Dim Mois As Integer Dim Jour As Integer 'la sub principale : Sub test() MsgBox Combientieme("MERCREDI", CDate("12/02/2014")) End Sub 'Les fonctions : Function Combientieme(Jourdelasemaine As String, maDate As Date) As Integer Dim i, Dates As Object, Cpt As Integer Mois = Month(maDate) Annee = Year(maDate) Set Dates = CreateObject("Scripting.Dictionary") For i = 1 To DernierJour(Mois, Annee) If UCase(Format(i & "/" & Mois & "/" & Annee, "dddd")) = UCase(Jourdelasemaine) Then Cpt = Cpt + 1 Dates(CDate(i & "/" & Mois & "/" & Annee)) = Cpt End If Next i Combientieme = Dates(maDate) End Function Function DernierJour(Mois As Integer, Annee As Integer) As Integer Select Case Mois Case 1, 3, 5, 7, 8, 10, 12 DernierJour = 31 Case 4, 6, 9, 11 DernierJour = 30 Case 2 DernierJour = IIf(EstBissextile(Annee), 29, 28) Case Else DernierJour = 0 'cas d'une erreur End Select End Function Function EstBissextile(Annee As Integer) As Boolean EstBissextile = False If Annee Mod 4 = 0 And (Annee Mod 100 <> 0 Or Annee Mod 400 = 0) Then EstBissextile = True End Function
🎼 Cordialement,
Franck 🎶
Whismeril
Messages postés
19028
Date d'inscription
mardi 11 mars 2003
Statut
Non membre
Dernière intervention
24 avril 2024
931
18 déc. 2014 à 14:22
18 déc. 2014 à 14:22
Bonjour.
Voici des éléments, pour savoir à quel jour correspond une date, il faut utiliser Weekday().
Si tu cherches le premier lundi du moi, et bien par du premier jour, regarde si c'est un lundi si oui super, sinon ajoute un jour etc...
Pour savoir à quel numéro de semaine correspond une date regade ici https://www.mrexcel.com/board/threads/date-to-week-number-using-vba.218978/#post1069391
Pour ta récurrence, ça me parrait trés compliqué de mettre tous les paramètres dans une seule colonne, déjà ton départ est un jour ou un numéro (le mardi ou le 10), ensuite tu peux avoir une récurence mensuelle, hebdomadaire ou journalière.
Tu pourrais faire un UserForm avec des boutons à cocher et des listes déroulantes qui proposent toutes les conditions possibles.
Tu peux t"inspirer des récurrences des différents logiciels de rendez-vous (outlook, etc..)
Voici des éléments, pour savoir à quel jour correspond une date, il faut utiliser Weekday().
Si tu cherches le premier lundi du moi, et bien par du premier jour, regarde si c'est un lundi si oui super, sinon ajoute un jour etc...
Pour savoir à quel numéro de semaine correspond une date regade ici https://www.mrexcel.com/board/threads/date-to-week-number-using-vba.218978/#post1069391
Pour ta récurrence, ça me parrait trés compliqué de mettre tous les paramètres dans une seule colonne, déjà ton départ est un jour ou un numéro (le mardi ou le 10), ensuite tu peux avoir une récurence mensuelle, hebdomadaire ou journalière.
Tu pourrais faire un UserForm avec des boutons à cocher et des listes déroulantes qui proposent toutes les conditions possibles.
Tu peux t"inspirer des récurrences des différents logiciels de rendez-vous (outlook, etc..)
jordane45
Messages postés
38145
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 avril 2024
4 650
18 déc. 2014 à 15:15
18 déc. 2014 à 15:15
Bonjour,
Pour chercher le Nieme jour d'un mois.. tu peux utiliser ceci :
Et pour tester :
Pour chercher le Nieme jour d'un mois.. tu peux utiliser ceci :
Function niemejourMois(num_jour As Integer, position_jour As Integer, mois As Integer, annee As Integer) As Date Dim firstDayOfMonth As Integer Dim DatefirstDayOfMonth As Date DatefirstDayOfMonth = CDate(Format(CDate("01/" & mois & "/" & annee), "dd/mm/YYYY")) firstDayOfMonth = Day(DatefirstDayOfMonth) If num_jour = firstDayOfMonth And position_jour = 1 Then niemejourMois = firstDayOfMonth Else If num_jour = firstDayOfMonth Then niemejourMois = DatefirstDayOfMonth + ((position_jour - 1) * 7) Else niemejourMois = DatefirstDayOfMonth + ((position_jour - 1) * 7) - firstDayOfMonth + num_jour End If End If End Function
Et pour tester :
Sub test() ' Date du Quatrième Mercredi du mois de décembre 2014 : msgbox niemejourMois(3, 4, 12, 2014) End Sub
jordane45
Messages postés
38145
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 avril 2024
4 650
18 déc. 2014 à 16:41
18 déc. 2014 à 16:41
Aller.. une petite dernière...
Pour trouver (comme la précédente) le Nième jour (de la semaine) d'un mois donné..avec possibilité de ne prendre que les semaines PAIR / IMPAIR ou ALL (peu importe)
Et pour tester :
Il y a surement des ajustements à faire.. mais ça donne un bon début..
Pour trouver (comme la précédente) le Nième jour (de la semaine) d'un mois donné..avec possibilité de ne prendre que les semaines PAIR / IMPAIR ou ALL (peu importe)
Function listJoursduMois(num_jour As Integer, mois As Integer, annee As Integer, Optional filtreSemainePairImpair = "ALL") As Variant() Dim dateTmp As Date Dim L As Integer Dim numSemaine As Integer Dim arrListDateJofMonth() Dim firstDayOfMonth As Integer Dim DatefirstDayOfMonth As Date Dim DateLastDayOfMonth As Date DatefirstDayOfMonth = CDate(Format(CDate("01/" & mois & "/" & annee), "dd/mm/YYYY")) DateLastDayOfMonth = DateAdd("d", -1, DateAdd("m", 1, DatefirstDayOfMonth)) firstDayOfMonth = Day(DatefirstDayOfMonth) L = 0 dateTmp = DatefirstDayOfMonth Do 'Debug.Print ("dateTmp : " & dateTmp & " -- weekday(dateTmp): " & Weekday(dateTmp)) If Weekday(dateTmp) - 1 = num_jour Then numSemaine = WeekNum(dateTmp) semainePair = (numSemaine Mod 2 = 0) Select Case filtreSemainePairImpair Case "ALL" L = L + 1 ReDim Preserve arrListDateJofMonth(3, L) arrListDateJofMonth(0, L - 1) = dateTmp arrListDateJofMonth(1, L - 1) = numSemaine arrListDateJofMonth(2, L - 1) = semainePair Case "PAIR" If semainePair = True Then L = L + 1 ReDim Preserve arrListDateJofMonth(3, L) arrListDateJofMonth(0, L - 1) = dateTmp arrListDateJofMonth(1, L - 1) = numSemaine arrListDateJofMonth(2, L - 1) = semainePair End If Case "IMPAIR" If semainePair = False Then L = L + 1 ReDim Preserve arrListDateJofMonth(3, L) arrListDateJofMonth(0, L - 1) = dateTmp arrListDateJofMonth(1, L - 1) = numSemaine arrListDateJofMonth(2, L - 1) = semainePair End If End Select End If dateTmp = DateAdd("d", 1, dateTmp) Loop Until dateTmp >= DateLastDayOfMonth listJoursduMois = arrListDateJofMonth End Function Function WeekNum(D As Date) As Integer WeekNum = CInt(Format(D, "ww", 2)) End Function
Et pour tester :
Sub test2() 'Par exemple... Connaitre la date ' du troisième mercredi du mois de novembre 2014 arrListJour = listJoursduMois(3, 11, 2014) MsgBox arrListJour(0, 3 - 1) 'Par exemple... Connaitre la date ' du jeudi du mois de novembre 2014 de la deuxieme semaine PAIR arrListJour = listJoursduMois(4, 11, 2014, "PAIR") MsgBox arrListJour(0, 2 - 1) 'Par exemple... Connaitre la date ' du jeudi du mois de novembre 2014 de la première semaine PAIR arrListJour = listJoursduMois(4, 11, 2014, "PAIR") MsgBox arrListJour(0, 1 - 1) End Sub
Il y a surement des ajustements à faire.. mais ça donne un bon début..
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
SF-TU
Messages postés
18
Date d'inscription
mercredi 21 mai 2014
Statut
Membre
Dernière intervention
13 juin 2016
19 déc. 2014 à 09:47
19 déc. 2014 à 09:47
Merci beaucoup pour toutes vos réponses, je vais essayer de décortiquer tout ça mais je pense que je reviendrais très vite demander des précisions! :-)
18 déc. 2014 à 15:17
Pour trouver le premier et le dernier jour du mois.. pas besoin de Select case...
ceci devrait suffire :
18 déc. 2014 à 15:32
Oui, pas nécessaire le Select Case, mais...
- je voulais juste trouver le numéro du dernier jour, 28 30 ou 31, pas la date du dernier jour du mois,
- je trouve le Select Case très explicite. On comprend facilement ou je veux en venir, enfin moi j'me comprends ;-)
- finalement il s'avère plus rapide que, par exemple :
Voilà pourquoi j'utilise cette méthode.