1 bouton qui active ou désactive un "Sub" pour enlever toutes les croix

Bonsoir,

Serait-il possible, sur la feuille "Paramètres" de désactiver ou activer le "Sub M_PreBarrage" du module1 ci-dessous à l'aide d'un bouton ==>
En gros, on clique sur le bouton "Activer/Désactiver", ça met toutes les croix sur toutes les feuilles "2mois" (sur toutes les cellules qui ont comme valeur "1" dans la colonne G) et lorsqu'on clique à nouveau, ça enlève toutes les croix sur toutes les feuilles "2mois". C'est nécessaire par rapport à une programmation de début de semaine et une autre en fin de semaine.

image

Le code VBA ==>

Sub M_PreBarrage(Sh As Worksheet)
     Dim c, Arr, TBL, bPM, bImPair, i, j, j1, iWeekday, r
     If Not Sh.Name Like "*## *##" Then Exit Sub     'nom de la feuille ressemble à cela

     TBL = Range("t_Semaine").Value2         'TS avec les propriétés des tâches
     With Sh
          .Unprotect
          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
               For j = 1 To UBound(Arr, 2)   'boucler horizontal
                    If Len(Arr(i, j)) > 0 Then     'tâche connu
                         j1 = Int((j - 1) / 3) * 3 + 1     'colonne avec sa date
                         bPM = (j1 Mod 6 = 4)     'c'est l'après-midi
                         Jour = Arr(i - 1, j1)     'quel jour ?
                         iWeekday = WorksheetFunction.Weekday(Jour, 2)     'n° weekday
                         bImPair = (WorksheetFunction.IsoWeekNum(Jour) Mod 2 = 1)     'semaine impaire ?
                         r = -30 * bImPair + (iWeekday - 1) * 6 - 3 * bPM + 1 + (j - j1)     'ligne dans t_semaine
                         'Debug.Print i, j, r, Tbl(r, 3), Arr(i, j)
                         If TBL(r, 3) = Arr(i, j) Then     'normallement ces 2 sont égal
                              If TBL(r, 6) = 1 Then c.Cells(i, j).Borders(xlDiagonalDown).LineStyle = xlDot     'si on demande "pré-barrage", alors on le fait
                         Else
                              MsgBox "impossible"
                         End If
                    End If
               Next
          Next
     End With
End Sub

Merci beaucoup et bonne soirée

A la suite de conseils sur un autre sujet, j'ai changé à nouveau quelques paramètres dans ce nouveau classeur :

Bonjour vodoraix,

Si j'ai bien compris, tu désires que, à chaque clic sur le bouton "Désactiver/Activer" , dans l'onglet "Paramètres" à la colonne G les 1 deviennent des "X" et si ce sont des "X", cela devient des 1.

Je ne suis pas entré dans la logique de ton application assez complexe alors j'ai strictement exécuté la procédure demandée. Pour faire cela, j'ai ajouté un statut en

G1 qui se positionne à "1" ou à "X" en fonction du dernier passage du VBA .

Bonne continuation

Chris

Chris

Bonjour CHRIS et merci beaucoup

En réalité, c'est une action qui doit être faite sur les feuilles "2 mois", celles qui sont au début du classeur et il n'y a aucune action à réaliser sur la feuille "Paramètres".

D'ailleurs je vais enlever le bouton car BsAlv m'a construit un code VBA à l'aide de la variable "pre_barrage" en "J2" qui fonctionne très bien. Je viens tout juste de la comprendre

Feuille "Paramètres" ==>

image

C'est-à-dire que lorsque je créé une nouvelle feuille à l'aide du bouton bleu marine "New Feuil" (ci-dessous) sur une des feuilles "2 mois", les croix qui barrent les cellules :

1) - Apparaissent si la valeur en J2 est égale à "1"

2) - Et n'apparaissent pas si en J2, je mets autre chose, par exemple un "0".

_______________________________

La feuille avec le cas "1)" pour J2=1 ==>

image

_________________________________

La feuille construite avec le cas "2)" pour J2=0 donc aucune cellule barrée ! ==>

image

________________________________________________________________

C'est parfait sauf que j'aimerais que cette action se fasse également sur les feuilles qui sont déjà construites !!!!!!!!
C'est à dire que lorsque j'ouvre une des feuilles "2 mois" déjà construite, il y ait un rafraîchissement de la feuille pour que la valeur J2=1 ou J2=0 soit prise en compte systématiquement.

Exemple : En temps réel je mets la valeur "0" en J2 (feuille Paramètres).... Donc après ça, dès que j'ouvre une des feuilles "2mois" déjà construite, si des cellules sont barrées sur la feuille alors toutes les croix de barrage dans les cellules disparaissent.

Et l'inverse aussi. Si la valeur en J2 est égale à "1", toutes les cellules sur les feuilles "2mois" déjà construites et non barrées, deviennent barrées selon les paramètres du tableau "t_semaine" sur la feuille "Paramètres".

Je crois avoir mieux détaillé et illustré avec des exemples donc désolé si ça n'était pas très clair

Voici le code VBA de BsAlv dans le module 1 ==>

Sub M_PreBarrage_ActiveSheet()
     M_PreBarrage ActiveSheet
End Sub

Sub M_PreBarrage(SH As Worksheet)
     Dim c, Arr, TBL, bPM, bImPair, i, j, j1, iWeekday, r, aBorders
     If Not SH.Name Like "*## *##" Then Exit Sub     'nom de la feuille ressemble à cela
     Application.ScreenUpdating = False
     TBL = Range("t_Semaine").Value2         'TS avec les propriétés des tâches
     aBorders = Array(xlDiagonalUp, xlDiagonalDown) 'les 2 diagonaux
     With SH
          Set c = .Range("C2:AF41")          'votre plage
          For Each brdr In aBorders
               c.Borders(brdr).LineStyle = xlNone 'enlever tous les bordures diagonaux
          Next
          If Range("pre_barrage").Value = 1 Then 'si on demande "pré-barrage"
               Arr = c.Value2                'lire vers matrice
               For i = 3 To UBound(Arr) Step 4     'les lignes avec les tâches
                    If Len(Arr(i - 1, 1)) Then
                         bImPair = (WorksheetFunction.IsoWeekNum(Arr(i - 1, 1)) Mod 2 = 1)     'semaine impaire ?
                         For j = 1 To UBound(Arr, 2)     'boucler horizontal
                              If TBL(j - bImPair * 30, 6) = 1 Then
                                   For Each brdr In aBorders
                                        c.Cells(i, j).Borders(brdr).Weight = xlHairline
                                   Next
                              End If
                         Next
                    End If
               Next
          End If
     End With
End Sub

Merci beaucoup pour votre aide

Bon w.e.

Bonjour, Vodoraix, Chris1945,

Il faut placer l'ensemble du code Module1 dans l'évènement du Workbook_SheetActivate(sh as Sheet... )

Faire clic-droit sur l'objet Workbook, choisir l'évènement cité plus haut. Conserver le pattern *## *## pour ne prendre en compte que les noms de feuille mois année. L'ensemble du code copié s'appliquera alors à l'activation des seuls feuilles semblables au pattern.

En résumé, le bouton va servir à n'importe quelle feuille possèdant le pattern mois année, selon le chiffre en cellule J2.

Bonjour X Cellus et merci beaucoup

Je n'ai pas compris le :

Faire clic-droit sur l'objet Workbook, choisir l'évènement cité plus haut.

Car quand je clic-droit, j'ai plein d'options et comment on choisit l'événement ?

Ca ne serait pas possible de copier directement dans le code ci-dessous, "M_PreBarrage" directement sous "M_Formes" au lieu de recopier tout le code ? ==>

Private Sub Workbook_SheetActivate(ByVal SH As Object)
     M_Proteger SH
     If SH.Name Like "*## *##" Then
          Application.ScreenUpdating = False
          M_Formes
     End If
End Sub

Merci X Cellus....

Et aussi merci pour toutes les explications données

__________________________________________________________________

Dernière petite chose, désolé... Serait-ce possible d'interdire les changements de toutes sortes de cellules barrées avec les croix (que nous ayons J2=1 ou J2=0, peu importe), à partir du moment où la date "aujourdhui()" est dépassée.

Exemple : Nous sommes le 24/01/26 et tout ce qui est avant (entourées en rouge dans la capture ci-dessous) ne peut plus subir des changements de bordures avec les cellules barrées en croix. Tout reste en l'état !

image

Encore merci

à +...

A nouveau,

Lorsque tu fais un clic droit sur l'objet cela te permet d'ouvrir une fenêtre qui est propre à l'objet Workbook (donc au classeur). En haut à droite tu as un menu déroulant ou sont listés tous les événements applicables au classeur.

L'évènement Workbook_SheetActivate en est un mais la liste de ces événements est importante. Une fois que tu as sélectionné l'évènement que tu veux utiliser il va apparaître dans le corps de la fenêtre. Du moins l'entête et la fin (End sub)

Entre ces 2 lignes c'est le code ci-dessous qui va v en fonction de J2 appliquer une croix ou non.

Dim c, Arr, TBL, bPM, bImPair, i, j, j1, iWeekday, r, aBorders
     If Not SH.Name Like "*## *##" Then Exit Sub     'nom de la feuille ressemble à cela
     Application.ScreenUpdating = False
     TBL = Range("t_Semaine").Value2         'TS avec les propriétés des tâches
     aBorders = Array(xlDiagonalUp, xlDiagonalDown) 'les 2 diagonaux
     With SH
          Set c = .Range("C2:AF41")          'votre plage
          For Each brdr In aBorders
               c.Borders(brdr).LineStyle = xlNone 'enlever tous les bordures diagonaux
          Next
          If Range("pre_barrage").Value = 1 Then 'si on demande "pré-barrage"
               Arr = c.Value2                'lire vers matrice
               For i = 3 To UBound(Arr) Step 4     'les lignes avec les tâches
                    If Len(Arr(i - 1, 1)) Then
                         bImPair = (WorksheetFunction.IsoWeekNum(Arr(i - 1, 1)) Mod 2 = 1)     'semaine impaire ?
                         For j = 1 To UBound(Arr, 2)     'boucler horizontal
                              If TBL(j - bImPair * 30, 6) = 1 Then
                                   For Each brdr In aBorders
                                        c.Cells(i, j).Borders(brdr).Weight = xlHairline
                                   Next
                              End If
                         Next
                    End If
               Next
          End If
     End With

Donc en valorisant d'abord J2 puis en choisissant une des feuilles mois année l'évènement va dérouler tous le code pour s'appliquer sur la feuille active. Et si tu changes de feuille pour aller sur une autre il va s'appliquer de même sur celle-ci.

Si maintenant tu souhaites que selon une date donnée certaines lignes ne peuvent être changées. Il faut opter pour une condition supplémentaire ici

For Each brdr In aBorder
If Ladate>datejour then c.Borders(brdr).LineStyle = xlNone
 'enlever toutes les bordures diagonaux uniquement si Ladate (celle inscriste dans chaque cellule toutes les 5 lignes)  est égale ou supérieure à la date actuelle) 
          Next
' Ainsi rien ne changera dans les blocs ou la date est inférieure. Dans les cellules ou il n' y a pas de Croix elle resteront sans Croix. Et dans les cellules ou il y a des Croix elles resteront telles qu'elles sont. 

Je t'écris de mon phone car je ne suis pas encore dans mon bureau. Je vais regarder mieux cela ce soir ou demain. Mais tu as ainsi quelques pistes de réflexion.

Merci beaucoup X Cellus pour tt le temps pris...

Avec un téléphone tu es capable de composer du code ? Pas facile de tt visualiser sur Excel...

Alors pour les options c.est que j.ai cherché au mauvais endroit pour l.objet Workbook... Je continue pour trouver l'endroit que tu expliques.

Pour le reste, j.ai compris ttes tes explications.

Mais si j.ai bien compris ton code avec la date, pour tout ce qui est avant la date du jour, je ne veux pas effacer toutes les croix envoyées par J=1 puisque je veux garder absolument le formatage complet des bordures, croix et autres comme ils sont. Pour tout et entièrement tout ce que contiennent les cellules avant la date du jour sans aucun changement par les rafraîchissements des feuilles.

Mais après relecture, je crois finalement que c.est ce que tu avais prévu. 😇

Merci beaucoup pour ta précieuse aide...

Bonne soirée 😀

Bonsoir vodoraix,

Avec tes dernières explications, j'ai pu comprendre ce que tu voulais. Pas évident.

En fait ce n'était pas grand chose à faire car le travail a été effectué (très bien d'ailleurs) par BsAlv. Il suffisait d'installer le petit VBA évènementiel dans les onglets VBA des 3 premiers mois.

Voici ton classeur en retour et j'espère que cette fois ci c'est la bonne...

Bonne continuation.

Chris

Après avoir envoyer, je me suis aperçu que Cellus avait déjà répondu et que tu avais demandé en plus que les croix ne se mettent plus si la date est < que la date du jour.

Bon j'ai ajouté ce test et je te renvoie le classeur...jusqu'à la prochaine demande...

A+

Chris

Bonjour CHRIS1945 et merci beaucoup pour proposer encore des solutions

La feuille des "2mois" maîtresse est la feuille "Prévisions" sur laquelle j'ai copié l'événement "M_PreBarrage" pour qu'à la création d'une nouvelle feuille ce sub y soit copié automatiquement.

image

Je remets en ligne la version précédente de mon classeur car la solution que tu proposes efface tous les formatages des dates avant celle d'aujourd'hui or c'est très très important qu'une fois la date passée, il n'y ait plus aucune influence de quoi que ce soit sur le formatage de ces cellules lors d'un rafraichissement ou autre.
Exemple : Avec tes modifications, ça m'efface tous mes formatages entourés en rouge ci-dessous alors que la date est bien passée (petite précision, tu remarqueras que ces cellules barrées entourées en rouge ne suivent pas les règles de la feuille "Paramètres" ==> c'est normal puisqu'en fonction des absences imprévues de profs de sport, on modifie le planning au dernier moment) ... Désolé si je n'avais pas bien expliqué les choses

image

__________________________________

J'ai essayé de comprendre comment intervenir à ce niveau...

Tes modifications dans l'événement :

For Each brdr In aBorders
                                        'MsgBox c.Cells(i - 1, j)
                                        'Stop
                                        If c.Cells(i - 1, j) > Date Then
                                        'MsgBox Date
                                        c.Cells(i, j).Borders(brdr).Weight = xlHairline

                                        End If
                                        'MsgBox Date
                                   Next

Je pense qu'il faut aussi agir en tout début d'événement pour exclure celui-ci lorsque la date est dépassée. Mais je ne sais pas comment le formuler correctement car je n'y connais rien

Peut-être dans le premier "For Each brdr In aBorders" de la sub ci-dessous, en conditionnant "Date". Qu'en penses-tu ?

Sub M_PreBarrage(SH As Worksheet)
'*************************************************************************************************
' 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
     If Not SH.Name Like "*## *##" Then Exit Sub     'nom de la feuille ressemble à cela
     Application.ScreenUpdating = False
     TBL = Range("t_Semaine").Value2         'TS avec les propriétés des tâches
     aBorders = Array(xlDiagonalUp, xlDiagonalDown) 'les 2 diagonaux
     With SH
          Set c = .Range("C2:AF41")          'votre plage
          For Each brdr In aBorders
               c.Borders(brdr).LineStyle = xlNone 'enlever tous les bordures diagonaux
          Next

J'ai rendu visible la feuille "Prévisions" pour mieux l'identifier Feuille cachée qu'on peut montrer par les macros enregistrées.

Encore merci

Bon dimanche

Dans ce classeur, ci-dessous, j'y ai ajouté l'événement "M_PreBarrage" sur la feuille "Prévisions" mais je n'ai pas copié le segment "Date" dans le sub car sinon en l'appliquant à toutes les feuilles "2mois" ça va effacer tous les formatages de la première feuille

Bonjour Vodoraix, Le Fil,

Dans la macro M_PreBarrage(SH As Woksheet) tu peux insérer ces quelques lignes avant le FOR EACH brdr In aBorders

'Plage variable afin de ne pas effacer les croix déjà placées sur les jours inférieurs à la date du jour
DJ = Now
For Kol = 3 To 30 Step 4
For Lin = 3 To 35 Step 4
If Cells(Lin, Kol) >= CDate(Left(DJ, 10)) Then Plage = Cells(Lin, Kol).Address(0, 0) & ":AF41": Kol = 31: Exit For
Next Lin, Kol
Set c = .Range(Plage)

La Plage pour le Set c est maintenant rendu variable en fonction de la date du jour. Les cellules qui ont été croisées avant cette date ne peuvent être modifiées.

Pour chaque Feuille mois année (donc 6 feuilles) tu peux à l'intérieur du code de ces feuilles, placer dans un Worsheet_Activate l'appel de la macro M_Prebarrage ActiveSheet. Ainsi plus besoin de vérifier si elles ont le bon pattern mois année. Seulement ces feuilles pourront y accéder et les nouvelles pour d'autres années.

Bonne adaptation

Bonjour X Cellus et merci beaucoup pour ton aide

Alors, je ne suis pas certain ==> Il faut que j'enlève le "Set c = .Range("C2:AF41")" qui est ci-dessous aussi, non ?
Et en dessous du "With SH" je colle ta proposition ? C'est ça ?

With SH
          Set c = .Range("C2:AF41")          'votre plage
          For Each brdr In aBorders
               c.Borders(brdr).LineStyle = xlNone 'enlever tous les bordures diagonaux
          Next

Sinon, les lignes de CHRIS ci-dessous, ne sont plus nécessaires, si je ne me trompe pas :

For Each brdr In aBorders
                                        'MsgBox c.Cells(i - 1, j)
                                        'Stop
                                        If c.Cells(i - 1, j) > Date Then
                                        'MsgBox Date
                                        c.Cells(i, j).Borders(brdr).Weight = xlHairline

                                        End If
                                        'MsgBox Date
                                   Next

Donc ça donnerait, au final, le code VBA ci-dessous ? ==>

Sub M_PreBarrage(SH As Worksheet)
     Dim c, Arr, TBL, bPM, bImPair, i, j, j1, iWeekday, r, aBorders
     If Not SH.Name Like "*## *##" Then Exit Sub     'nom de la feuille ressemble à cela
     Application.ScreenUpdating = False
     TBL = Range("t_Semaine").Value2         'TS avec les propriétés des tâches
     aBorders = Array(xlDiagonalUp, xlDiagonalDown) 'les 2 diagonaux
     With SH
          'Plage variable afin de ne pas effacer les croix déjà placées sur les jours inférieurs à la date du jour
            DJ = Now
            For Kol = 3 To 30 Step 4
            For Lin = 3 To 35 Step 4
            If Cells(Lin, Kol) >= CDate(Left(DJ, 10)) Then Plage = Cells(Lin, Kol).Address(0, 0) & ":AF41": Kol = 31: Exit For
            Next Lin, Kol
        Set c = .Range(Plage)
          For Each brdr In aBorders
               c.Borders(brdr).LineStyle = xlNone 'enlever tous les bordures diagonaux
          Next
          If Range("pre_barrage").Value = 1 Then 'si on demande "pré-barrage"
               Arr = c.Value2                'lire vers matrice
               For i = 3 To UBound(Arr) Step 4     'les lignes avec les tâches
                    If Len(Arr(i - 1, 1)) Then
                         bImPair = (WorksheetFunction.IsoWeekNum(Arr(i - 1, 1)) Mod 2 = 1)     'semaine impaire ?
                         For j = 1 To UBound(Arr, 2)     'boucler horizontal
                              If TBL(j - bImPair * 30, 6) = 1 Then
                                   For Each brdr In aBorders
                                        c.Cells(i, j).Borders(brdr).Weight = xlHairline
                                   Next
                              End If
                         Next
                    End If
               Next
          End If
     End With
End Sub

Merci à vous 2

Bonne aprèm

A nouveau,

Effectivement, c'est comme ton code au final. Tu peux changer (selon modif en cours) des cases qui sont croisées mais égales ou supérieures à la date du jour. Exemple : c'était prévu absent mais finalement ce jour là ce sera présence. Et l'absence sera plus tard ou non. Tant que la date modifiée est >= date du jour, voir tu peux aussi ne modifier que si supérieur. Mais pour toutes les dates passées ce n'est plus possible car figé.

Ne pas oublier de placer dans le Worksheet_activate l'appel au code du Mprebarrage.

Au final on remplace une plage fixe C2:F41 par une plage variable. Où le début de la plage varie en fonction de la date du jour. La fin de la plage restant toujours la même.

Merci pour toutes les précisions X Cellus

Quand j'ouvre une des feuilles "2mois", j'ai une erreur :
A titre d'info, je ne l'avais pas auparavant...
Ce n'est pas "Step 4" qui pose pb ?

image image

Y'a autre chose d'étrange, c'est que j'ai l'impression que les "2mois" qui commencent par une semaine paire arrivent à prendre les croix mais pas les autres

Suite,

Je n'ai pas contrôlé l'ensemble du process. Cela me prendrait beaucoup de temps.

Par contre tu peux revenir à un tableau global lorsque la valeur de J2 est égale à 1.

Avant la ligne If Range("pre_barrage"). Value =1 then

Inscris Set c=.Range("C2:AF41")

Et tu peux mettre en commentaire. Reprise plage gobale

Ainsi tu reviens à boucler sur tous le tableau et donc tes nouvelles croix s'afficheront sans perturbation (arrêt du programme sur bImPair). Laisse le step 4 pour le For i = 3 to Ubound(Arr)

En faisant ça, la date du jour n'est plus prise en compte et tous mes formatages de cellules avant la date du jour sont effacées et remplacées par le pre_barrage

Sub M_PreBarrage(SH As Worksheet)
     Dim c, Arr, TBL, bPM, bImPair, i, j, j1, iWeekday, r, aBorders
     If Not SH.Name Like "*## *##" Then Exit Sub     'nom de la feuille ressemble à cela
     Application.ScreenUpdating = False
     TBL = Range("t_Semaine").Value2         'TS avec les propriétés des tâches
     aBorders = Array(xlDiagonalUp, xlDiagonalDown) 'les 2 diagonaux
     With SH
          'Plage variable afin de ne pas effacer les croix déjà placées sur les jours inférieurs à la date du jour
            DJ = Now
            For Kol = 3 To 30 Step 4
            For Lin = 3 To 35 Step 4
            If Cells(Lin, Kol) >= CDate(Left(DJ, 10)) Then Plage = Cells(Lin, Kol).Address(0, 0) & ":AF41": Kol = 31: Exit For
            Next Lin, Kol
        Set c = .Range(Plage)
          For Each brdr In aBorders
               c.Borders(brdr).LineStyle = xlNone 'enlever tous les bordures diagonaux
          Next
          Set c = .Range("C2:AF41")  'Reprise plage gobale
          If Range("pre_barrage").Value = 1 Then 'si on demande "pré-barrage"
               Arr = c.Value2                'lire vers matrice
               For i = 3 To UBound(Arr) Step 4     'les lignes avec les tâches
                    If Len(Arr(i - 1, 1)) Then
                         bImPair = (WorksheetFunction.IsoWeekNum(Arr(i - 1, 1)) Mod 2 = 1)     'semaine impaire ?
                         For j = 1 To UBound(Arr, 2)     'boucler horizontal
                              If TBL(j - bImPair * 30, 6) = 1 Then
                                   For Each brdr In aBorders
                                        c.Cells(i, j).Borders(brdr).Weight = xlHairline
                                   Next
                              End If
                         Next
                    End If
               Next
          End If
     End With
End Sub

Par conséquent, j'ai désactivé la première feuille pour éviter que le rafraichissement efface tout...

Désolé de ne pas pouvoir agir efficacement en cas de pb pour pouvoir corriger : je n'y connais rien à la programmation

A nouveau,

J'ai testé sur la première feuille De 25 Janv26. Et voilà le résultat en images.

Avant le changement sur paramètres J2 = 0

tabloavantmaj

Je passe J2 à 1 afin d'actualiser par la macro MpreBarrage. Ci-dessous le tableau après.

tabloapresmaj

On voit bien que les positions (Croix) avant la date du jour n'ont pas bougées. Mais que celles après le 25 janvier 2026, ce jour, ont pris les Croix.

Ou alors tu fais une manipulation autre que le changement de J2. Peut être efface tu tous (les jours) qui sont déjà en 1 sur la colonne G avant de lancer la macro?

Merci X Cellus d'essayer de comprendre mes explications

Je suis nul en programmation mais au niveau des tests, je passe des heures à en faire pour déceler les soucis de fonctionnement

Alors la première capture de la première feuille que tu me montres n'est pas ce que je souhaite puisqu'il a subi le J2=1 !!!
Or en tapant "1" pour J2=1, j'aimerais que cette page reste comme ça et aucun rajout ne soit fait, d'aucune sorte puisqu'il s'agit de cellules avant la date du jour.

La capture que j'avais envoyée aujourd'hui à 8h09 (sur ce sujet si tu remontes un peu nos discussions) est la même que celle ci-dessous :
La capture ci-dessous,c 'est exactement la feuille qu'il faudrait avoir au final. Sans avoir subi J2=1 (avec ses croix) ou quoi que ce soit d'autres puisque la date est avant

image

Et ici, tu as le même classeur que j'envoie à chaque discussion ==> Celui-ci ==>

Tu peux entièrement me faire confiance, sur tous les renseignements que je donne dans ce sujet !
Je les vérifie scrupuleusement ! C'est la moindre des choses quand on est nul en programmation, par respect pour des pointures en Excel et passionnés comme vous

Voici ce que ça donne quand on applique le sub et c'est ça que je ne veux pas ==>
Mes cellules barrées sont toujours là donc ça c'est bon (les 2 groupes entourés en rouge dans la capture ci-dessous) mais tous les J2=1 se sont insérés en plus et c'est ça que je ne souhaitais pas !
La partie entourée en vert dans la capture ci-dessous, elle, elle est correcte. Alors pourquoi, elle est correcte ? ==> Parce qu'il s'agit de dates après la date du jour, donc cette partie là peut subir le J2=1 ou le J2=0.
Et l'objectif c'est de mettre à jour en fonction des profs de sport présents au jour le jour et de faire avancer les pointages.

Pour mieux comprendre ==> toutes les croix envoyées par J2=1 sont des séances de sport non prioritaires. Ce qui fait que lorsqu'on est en nombre suffisant de prof, on les fait quand même (les cellules barrées) et après au final, on les réajuste en mettant un J2=0 puis on barre les cellules pour lesquelles les séances n'ont vraiment pas eu lieu ! Toute une gymnastique mais c'est plutôt efficace en fin de compte

image

__________________________________

Pour résumer, la feuille ne devrait contenir que les parties entourées en rouge et que la partie entourée en verte....

Et si je mets J2 = 0 alors je n'aurai plus que les 2 parties entourées en rouge et rien d'autre.

__________________________________

Je pense que la ligne ci-dessous est peut-être placée au mauvais endroit dans le sub, nan ? Qu'en pesnes-tu ?

Set c = .Range("C2:AF41")  'Reprise plage gobale

Désolé pour ces quiproquos et les explications qui t'ont conduit à autre chose. Sincèrement désolé de t'avoir fait perdre beaucoup de temps...

Message de samedi 17h19 mais c'est vrai que j'écris beaucoup et peut-être qu'on se perd un peu dans mes explications

Et celui de ce matin 8h09...

image
Rechercher des sujets similaires à "bouton qui active desactive sub enlever toutes croix"