Du VBA qui me pose problème sur 2 points
Bonjour
J'ai un code dans le "Module1" qui me pose des soucis sur 2 points :
1) J'ai uniquement un problème avec les lignes 4 de toutes les feuilles "2mois" ("déc25 Jan26", fév26 Mar26", etc, etc,) avec le système des croix manuelles puisqu'un double-clique ne déclenche rien sur ces lignes 4.
2) Il ne faut pas que la valeur de la cellule "J2" de la feuille "paramètres" ne soit appliquée aux dates avant la date d'aujourd'hui. Or avec ce code, ça ne fonctionne pas puisque sur la feuille "Déc25 Jan26", le J2 prend quand même ses effets et pourtant nous sommes avant la date de "aujourdhui()".
_____________________________________________
Sub M_PreBarrage(Optional SH As Worksheet)
'*************************************************************************************************
'chaque cellule aune 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:AF41") '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 Len(Lundi) Then
bImPair = (WorksheetFunction.IsoWeekNum(Lundi) Mod 2 = 1) 'semaine impaire ?
j1 = Application.Max(1, (Date - Lundi) * 6 + 1) 'on ne touche pas aux colonnes d'une date dans le passé (6 colonnes par jour)
For j = 1 To UBound(Arr, 2) 'boucler horizontal
Debug.Print c.Cells(i, j).Address
bDiagonal = (TBL(j - bImPair * 30, 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 SubMerci pour votre aide
Bon dimanche
Bonsoir,
il faudrait savoir le déroulement de choses car la surveillance évènementielle du double-clic gauche ou du clic droit a ce test :
If Target.Row > 4 And Target.Row < 42 And Target.Column < 33 And Target.Value <> "" And Target.Value <> 0 Then
Donc si vous cliquez en ligne 4 rien ne sera lancé... Mais de toutes façon si la procédure été lancée elle ne correspond pas à celle fournie dans votre question...
@ bientôt
LouReeD
Bonjour LouReeD et merci beaucoup
Tu m'as répondu à la question 1
Je viens de comprendre où ça se passait grâce à ta question ==>
Il s'agit du Worbook et la valeur est supérieure à 3 et non à 4. Je n'avais rein compris au code !
________________________
Merci beaucoup, j'ai testé et ça marche maintenant pour les lignes 4
Bonne soirée
à bientôt
Bonsoir,
ravis que cela corrige votre problème ! Merci de votre retour !
@ bientôt
LouReeD
J'ai ouvert un autre sujet avec des explications différentes pour ce problème de dates :