Si j’ai bien compris, tes données évoluent mois par mois et non semaine par semaine, et il y a 6 colonnes pour chaque mois.
Egalement, tu travailles sur 13 mois, puisque le tableau s’arrête en janvier.
je n’ai pas testé, mais le coup du 31, ça me laisse dubitatif, je ne suis pas sûr que les jours en bordure de période (24,25,27) soient toujours traités dans leur bonne période.
Sinon, ta méthode chr(x)+64 pour obtenir la lettre en fonction de la valeur numérique est bonne (c’est chr(x)+48 pour convertir un chiffre sous forme de chaine), mais tu peux faire autrement, en utilisant cells à la place de Range, ou travaillant avec les offsets.
Pour DateFinPrec, tu seras obligé de le modifier manuellement en fin d’année ;
Tu peux peut être mettre
DateFinPrec = DateSerial(year(now) -1, 12, 26)
Ca ne marchera pas entre le 26/12 et le 01/01, mais bon …
sinon, si tu veux un code un peu léger, je peux te proposer ce qui suit :
Tant qu’à faire d’utiliser DateDiff, autant lui demander de retourner des mois plutôt que des jours (DateDiff(“m”,…)
Le code devient
Dim today As Date, currentmonth As Integer, coloffset As Integer
’ démasquer toutes les cellules
Range(“B:CA”).EntireColumn.Hidden = False
'provisoire pour la mise au point : plutôt que de changer l’heure du PC, on met la date dans la 1e cellule de la feuille
il suffira ensuite de remplacer par today=now
today = DateValue(Range(“A1”))
currentmonth = DateDiff(“m”, DateSerial(Year(today) - 1, 12, 26), today)
If Day(today) > 25 Then
currentmonth = currentmonth + 1
End If
’ calcul du nombre de colonnes à masquer à gauche;
-1 car on ne compte pas la colonne B
coloffset = 6 * (currentmonth - 1) - 1
If coloffset > 0 Then
Range(“B1”, Range(“B1”).Offset(0, coloffset)).EntireColumn.Hidden = True
End If
’ masquage des colonnes de droite
coloffset = 6 * (12 - currentmonth) - 1
If coloffset > 0 Then
Range(“CA1”, Range(“CA1”).Offset(0, -coloffset)).EntireColumn.Hidden = True
End If