Detecter les Week end
Bonjour a tous,
J'ai un tableau, dans lequel je mets les numéro des jours d'un mois (qui change tout le temps) et il faudrait que je trouve un système qui noircit les colonnes des jours qui sont en Week End.
J'ai ajouté le fichier.
Ce que je n'arrive pas à faire, c'est le test pour savoir si le numéro du jour est dans un WE ou pas.
Si vous avez une idée, je suis preneur.
Il y a un essai de code vba enregistré dans le fichier en module 4
Bonjour,
un essai par MFC voir si cela te conviens.
Cordialement.
J'ai fini par trouver la solution, je la donne si ca peut servir à quelqu'un
Sub EstWeekEnd()
Dim debut As Date
Dim n As Integer
debut = Worksheets("caché").Range("D4").Value
Nb_lig = Worksheets("caché").Range("D7").Value
Nb_col = Worksheets("caché").Range("E2").Value
For m = 0 To Nb_col
n = 2
LastDayInMonth = DateSerial(Year(debut), Month(debut) + 1, 0)
x = Day(LastDayInMonth)
For n = 2 To x * 2 step 2
If Weekday(debut, vbMonday) > 5 Then
Range(Cells(6 + m * (Nb_lig + 5), n + 1), Cells(6 + m * (Nb_lig + 5) + Nb_lig - 1, n + 2)).Interior.Color = RGB(0, 0, 0)
End if
debut = DateAdd("d", 1, debut)
Next
Next
End Subvoici comment ca marche: comme le montre le fichier joint, j'ai des cases numérotées de 1 à 31 que je dois noircir si le numéro de jour est un week end dans le mois indiqué
je créé deux boucles l'une qui tourne avec m et l'autre avec n.
La boucle n va tester les jours du mois en cours la boucle m va remettre le compteur de jour a son état initial et passer au mois suivant
Le fichier ne le montre pas mais j'ai plusieurs tableaux, un pour chaque mois, a traiter. Ils sont de tailles variables mais uniformes entre eux, je me sers donc de la variable m pour faire passer le curseur d'un tableau à l'autre. C'est pour cette raison que les adresses cells sont complexes, vous pouvez faire plus simple sur ce point.
Dans la première boucle je créé une variable x qui va sortir le numéro du dernier jour du mois en cours et qui va être la limite de la boucle suivante pour prendre en compte les mois à 30 ou 31 jours et l'affreux février.
Dans la seconde boucle la limite du compteur est x*2 car chaque numéro de jour est sur deux cellules fusionnées, ils faut donc que le compteur avance par step 2 pour suivre le changement d'adresse des cellules. La aussi ca peut être plus simple chez vous
la ligne If Weekday(debut, vbMonday) > 5 teste l'écart entre le jour en cours et le lundi. S'il est supérieur à 5 c'est que le jour est un samedi ou un dimanche et dans ce cas on noircit les cellules sous le numéro de jour étudié.
Après le if, on incrémente la date avec debut = DateAdd("d", 1, debut), debut étant la date de départ de la période étudiée.
Puis la boucle reprend pour tester le jour suivant.
Lorsque le compteur atteint sa limite basée sur les nombre de jours dans le mois, on reboucle sur la première boucle m qui va faire passer au mois suivant et on resteste chaque jour jusqu'à ce que m atteigne la valeur de Nb_Col (le nombre de mois dans la période étudiée)
J'espère que l'explication sera suffisamment compréhensible