Pb de paramètres VBA depuis la création de nouvelles colonnes
Bonjour,
Sur les semaines impaires de mes tableaux, j'ai un problème de paramétrage de mes croix (cellules barrées). C'est à dire que sur les emplacements indiqués ci-dessous, je ne devrais pas avoir ces croix car j'avais indiqué "0" dans la colonne G (pré-barrage) de la feuille "Paramètres".
Ces erreurs apparaissent depuis que j'ai inséré, dans le tableau, 2 colonnes supplémentaires par demi-journée.
J'ai essayé d'adapter les paramètres du code VBA de BsAlv mais visiblement sans réussite totale.
Mes modifications :
- En passant à 10 colonnes au lieu de 6 par jour ==> j1 = Application.Max(1, (Date - Lundi) * 10 + 1)
- En indiquant 50 colonnes au lieu de 30 pour le nombre total de colonnes sur mes tableaux ==> bDiagonal = (TBL(j - bImPair * 50, 6) = 1)
C'est peut-être que le paramètre "ID" n'est pas reconnu mais je ne sais pas pourquoi
___________________________________________________
Code VBA dans le module1 du classeur ==>
Sub M_PreBarrage(Optional SH As Worksheet)
'*************************************************************************************************
'chaque cellule a une propriété "ID" qui selon MS sert pour "identifying labels for webpages, blabla ..."
'bon, inappropriate use, je l'utilise pour sauvegarder le statut du "Croix" de la cellule, c'est plus pratique et plus rapide que les "comments"
'les statuts: 0 = sans croix, 1 = croix rouge, 2 : croix noir
'le temps pour lire ou écrire l'ID est négliable
'*****************************************************************************************************
' Procédure réagissant au Paramètre 1 ou autre en J2 de l'onglet Paramètres :
' 1 = mettre une croix
' Autre : enlever la croix
'*************************************************************************************************
Dim c, Arr, TBL, bPM, bImPair, i, j, j1, iWeekday, r, aBorders, bPrebarrage, Lundi, bDiagonal
t = Timer
If SH Is Nothing Then Set SH = ActiveSheet 'si on ne sait pas la feuille, c'est la feuille actuelle
If SH.Name Like "*## *##" Then 'nom de la feuille ressemble à cela
Application.ScreenUpdating = False
bPrebarrage = (Range("pre_barrage").Value = 1) ' on demande "pré-barrage"
TBL = Range("t_Semaine").Value2 'TS avec les propriétés des tâches
With SH
Set c = .Range("C2:AZ41") 'votre plage
Arr = c.Value2 'lire vers matrice
For i = 3 To UBound(Arr) Step 4 'les lignes avec les tâches
Lundi = Arr(i - 1, 1) 'première cellule de la ligne dessus = lundi
If Lundi > Date And Len(Lundi) Then
bImPair = (WorksheetFunction.IsoWeekNum(Lundi) Mod 2 = 1) 'semaine impaire ?
j1 = Application.Max(1, (Date - Lundi) * 10 + 1) 'on ne touche pas aux colonnes d'une date dans le passé (10 colonnes par jour)
For j = 1 To UBound(Arr, 2) 'boucler horizontal
Debug.Print c.Cells(i, j).Address
bDiagonal = (TBL(j - bImPair * 50, 6) = 1) 'on veut le diagonal et le pré-barrage
If bDiagonal And c.Cells(i, j).ID = "" Then c.Cells(i, j).ID = "2" 'quand l'ID n'est pas connu, on commence avec un croix noir
M_Bordures c.Cells(i, j), Array(-bPrebarrage * Val(c.Cells(i, j).ID), xlNone, 0, c.Cells(i, j).Borders(xlDiagonalDown).LineStyle = xlNone) 'matrice avec la valeur de l'ID, linestyle "xlnone" et couleur "noir" du bordure
Next
End If
Next
End With
End If
bHS_NouvelleFeuille = False 'RAZ ce drapeau
End Sub____________________________________
Merci pour vous être penché sur ce sujet
Bon dimanche...

