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

Coucou Chris

J'ai besoin du double-clic et il est stoppé :

image

Ca entraîne des erreurs sur les lignes 4 mais aussi 5, etc...

________________________________________________________

Je pense que l'idéal serait de s'appuyer sur le classeur de BsAlv qui fonctionne très bien sauf qu'il y a des changements de fonctionnement à revoir :

Les 3 types (croix rouge, croix noire et rien), ça fonctionne à merveille.

Mais quelques changements à apporter ==> Pour les croix, j'ai essayé de changer le code mais je n'ai pas réussi:

- En réalité, les croix qui viennent des paramètres quand J2=1, je préférais qu'elles soient en noires et non en rouges.

- Je voulais pouvoir changer les croix (en noires, rouges ou rien) uniquement avant la date d'aujourd'hui et non après. Donc l'inverse mais ça c'était mon idée de départ mais finalement j'ai changé car avec X Cellus et les modifications apportées depuis hier, j'aimerais pouvoir changer les croix à n'importe quel moment, que ce soit avant la date d'aujourd'hui ou après. Donc à tout moment au final.

- Y'a une erreur sur la première ligne (ligne 4) d'un tableau "2mois", on n'arrive pas à changer les couleurs des croix.

image

Dans ce nouveau classeur ci-dessous, j'ai refait toutes les MFC comme je voulais et j'ai ouvert une feuille qui comporte l'erreur (uniquement sur la ligne 4 de toutes les feuilles) que j'ai cité juste au-dessus ==>

MErci beaucoup pour l'insistance à trouver des solutions à mes pbs

Bravo les Belges ==> Le FC Bruges a été très très fort Et les portugais sont trop méchants

Bonne soirée

Bonsoir,

Je suis à nouveau perdu : le classeur que tu m'envoies ne contient plus les modifications que j'avais faites pour la MAJ des lignes 4 ; 8 etc...

C'est voulu ?

Dis moi à quoi sert le double clics ?

Dans le fichier 8 que je t'ai envoyé j'avais oublié simplement d'enlever l'instruction STOP qui servait pour tester pendant que je cherchais pourquoi cela bloquait. Il suffisait de l'enlever et le programme se déroule normalement.

Maintenant je regarde la dernière version que tu m'envoies et je vois que ce n'est plus les mêmes instructions...

Je m'y perd.

Est ce que tu souhaiterais que je prenne cette dernière version et j'y incorpore mes adaptations pour le RAZ des lignes 4 avec le test sur la date ??

Pour ce qui est de la couleur de la croix en février peux tu être plus clair : est-ce seulement sur la ligne 4 de cet onglet de février que cela se passe ?

Bonne nuit

Chris

Bonjour Chris

J'avais essayé, dans ton classeur, en enlevant le "stop" mais plus rien ne se déclenchait, désolé ==>

________________________________

C'est pourquoi j'ai proposé le classeur de BsAlv qui date de mardi 19h49 dans ce sujet ==>

___________________________________

Le double-clic ou le clic-droit de BsAlv fonctionne par rapport à la ligne qui l'utilise :

- Si je clique au niveau de ligne 4 (bon là y'a juste un pb de code), alors disons les lignes 8 ou 12 ou 16, etc.... ==> Alors les 3 systèmes de croix.

C'est le seul pb dans le code VBA de BsAlv (cette ligne 4) sinon tout fonctionne parfaitement... Sauf pour les changements de gestion cités plus haut.

- Si je clique au niveau de 5, 9, 13, etc... ==> Les prénoms se mettent en gras et en soulignés

__________________________________

Est ce que tu souhaiterais que je prenne cette dernière version et j'y incorpore mes adaptations pour le RAZ des lignes 4 avec le test sur la date ??

Désolé je ne comprends pas ==> C'est quoi ce RAZ des lignes 4 ? Car je voudrai que la ligne 4 réagisse comme les autres (8, 12, etc...). Je pense que c'est juste une petite erreur de code VBA à rectifier en fait

_____________________________________

Pour ce qui est de la couleur de la croix en février peux tu être plus clair : est-ce seulement sur la ligne 4 de cet onglet de février que cela se passe ?

L'erreur n'a pas de relation avec les couleurs. Et non, ça n'est pas que sur février, l'erreur ligne 4 mais avec toutes les nouvelles feuilles créées aussi

______________________________________

Pour les croix, il s'agit du message dans ce sujet du lundi 20h02 ==>

AINSI ON FERAIT LE DISTINGO ENTRE LES CROIX DES PREVISIONS (en noires) ET LES CROIX DES SEANCES QUI N'ONT PAS EU LIEU CAR 1 OU DES PROFS ETAIENT ABSENTS (croix en rouges) : Qu'en penses-tu ?

Donc les croix qui proviennent de la feuille "Paramètres" pour J2=1 ==> Les croix en noires...

MErci beaucoup Chris pour ton implication et désolé pour toutes les incompréhensions. Oui tu as entirèrement raison, le classeur est très très complexe

Bonne journée

à bientôt

Ou alors j'abandonne ce sujet si incompréhensions car beaucoup beaucoup d'infos et je remets tout à plat sur un nouveau. Qu'en penses-tu ?

une nouvelle version,

EDIT : l'idée de jeter plusieurs choses dans la poubelle n'est pas si stupide, mais une "tabula rasa complète" n'est pas nécessaire; Le TS "tabel4" de "BDD" serait le master de tout et ces feuilles des 2 mois, pfff, une suffit avec un choix pour le mois qu'on veut, on pourrait même choisir pour commencer avec de mois impaires.

Le problème de la ligne 4, je ne le vois pas ici, comme-ça, pour moi, je ne connais pas la cause. Moi, j'ai Excel365, vous 2, vous avez Excel2021 ... ???

Bonsoir Bart' et merci beaucoup

Oui, il s'agit bien de la version 2021 ==>

image

________________________________

Pour les feuilles qui ne prennent pas les pré-barrages sur ton classeur c'est :

La feuille déjà créée "Fév26 Mars26" pour laquelle, seule la ligne 4 ne me permet pas de mettre des croix ==>

image

_______________________________________

Et sur les autres feuilles créées pareil pour la ligne 4 qui ne prend pas. Sur toutes les autres lignes, TOUT VA BIEN

image

_________________________________

Dernière petite chose, dans une version que tu m'avais envoyée mardi 19h49, le processus suivant fonctionnait parfaitement ==> Les croix provenant de la feuille paramètre qui affichent les croix si J2=1 ou "rien" si J=autre chose, ne devaient jamais s'afficher avant la date du jour. Donc ça, ça fonctionnait correctement. Mais dans cette nouvelle version, ça ne fonctionne plus. Je m'explique ==>

Exemple : Au fur et à mesure des journées qui sont passées, j'ai changé les croix des J2=1 en fonction des présences réelles des profs de sport ==> Et en définitive la feuille devient celle-ci (du 1er décembre eu 29 janvier), voir ci-dessous ==>
Autrement dit, il ne faudrait plus que J2 de "Paramètres", influence ces cellules puisque la date est avant la date d'aujourd'hui.
Or dans les 2 nouvelles versions que tu me proposes, si je mets J2=1 ou J=0, toutes mes croix ci-dessous disparaissent et sont remplacées par les valeurs de la feuille paramètre
La feuille devrait restée en réalité dans cet état là (ci-dessous) et définitivement puisque toutes ces cellules ci-dessous, sont à une date inférieure à aujourd'hui ==>
Il faut juste que je puisse continuer à mettre manuellement des croix en noires, en rouges, ou rien. Mais plus de croix possibles avec la feuille paramètres (à partir du moment où les cellules sont datées avant la date d'aujourd'hui...)

image

Petite bizarrerie, j'ai des croix qui s'affichent en ligne 35

MErci en tout cas pour ton aide Bart'

Bonne soirée

Bonsoir Vodoraix, le Fil,

Désolé de n'avoir pu te répondre comme indiqué dans mon dernier message. J'ai repris ce soir seulement ton fichier, du moins celui intitulé New2.

D'abord un correctif à mon code fourni avant. J'ai rajouté un Exit sub si la Plage est vide. Du fait que la date du jour est supérieure à la dernière date du tableau. Il n'y a pas besoin de réaliser le processus.

On pourrait aussi faire cela avant la boucle Kol en comparant DJ à la dernière date du tableau.

'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
If Plage = "" then exit sub
Set c = .Range(Plage)

Ensuite pour éviter que le pre_barrage modifie les cellules (croix éventuelles ou non) avant la date du jour. J'ai ajouté une ligne de code juste après la ligne For j = 1 To Ubound(Arr, 2). Donc

For j = 1 To Ubound(Arr, 2)
'Ciblage de la colonne de chaque Cible ayant la Date 
If (j + 2) MOD 3 = 0 then CD = Arr(i - 1,  j)
If TBL etc....
For Each brdr In aBorders
'Contrôle que la Cible Date soit >= DJ pour appliquer les bordures selon J2
If CD >= DateValue(DJ) Then c.Cells(i, j).borders(brdr).Weight = xlHairline
Next

Apparemment tu as pour les couleurs bordures. Donc si cela va je ne reviens pas dessus.

Bonne adaptation.

Bonjour X Cellus

Je suis obligé de reprendre la version de BsAlv car il a mis au point mes croix rouges, noires et "rien" sur les lignes 4, 8, 12, etc...

Voici le code qui me pose des soucis sur 2 points :
- Les lignes 4 sur toutes les feuilles "2mois" ne fonctionnent pas avec le système des croix manuelles.
- 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.

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 Sub

De plus, les variables que vous utilisez tous les 2, sont différentes.

Et je ne suis pas certain que les lignes que tu proposes puissent s'incorporer au code ci-dessus car plusieurs conflits possibles :
- Chez BsAlv, J2 ne s'applique pas aux dates inférieures malgré ce qu'on voit sur cette ligne ci-dessous ==> ça ne fonctionne pas puisque sur la feuille "Déc25 Janv26" les croix apparaissent ou sont écrasées avec J2

 j1 = Application.Max(1, (Date - Lundi) * 6 + 1)     'on ne touche pas aux colonnes d'une date dans le passé (6 colonnes par jour)

Et en plus vous n'avez pas placé cette condition au même endroit (toi c'est au tout début et lui au coeur du programme) ==> C'est certain que ça n'est pas évident pour vous car chacun a sa logique de programmation avec des variables parlantes
Je suis un peu perdu... Désolé...

En tout cas merci beaucoup pour ton aide.

Bon w.e.

à bientôt

Bonjour Vodoraix, le Fil,

Je te propose avec peu de modifications sur la version New2 que j'ai téléchargé un code qui fonctionne pour ton message dans l'en-tête de ta demande.

C' est un "patch" correctif des lignes de code existantes.

Tu peux le tester sur cette version New2. Même sur la feuille Dec25_Jan26. Il suffit sur la ligne de DJ = Now d'ajouter après Now

- 4 par exemple pour reculer la date réelle de 4 jours. DJ gardant la date du jour. Ou bien

- 10 pour revenir 10 jours en arrière.

Tu peux le tester aussi les jours suivants sur la feuille de Février.

Si au fil des discussions tu rajoutes à ta demande initiale des suppléments. Il voudrait mieux, à mon sens, créer un autre post.

Car si à chaque fois on doit corriger des nouvelles versions qui créent d'autres soucis... Le post ne finira jamais... Enfin c'est ton post, c'est ton choix.

Coucou X Cellus,

Je vais suivre tes conseils avisés, merci :

- Je vais tester la version New2 avec tes nouvelles lignes mais c'est juste à titre d'info, pour ton travail fourni et pour ma curiosité mais je n'ai pas le choix de mettre en référence la version New2-3 car la plus avancée. Et d'abandonner la version New2.

- Depuis le sujet du 24/01 à 17h19, je n'ai jamais demandé de suppléments. Car sur tous mes messages suivants, je n'ai fait qu'essayer de mieux expliquer les incompréhensions. Et de plus, je n'ai pas de suppléments prévus, en tout cas, pas pour le moment ==> Donc j'abandonne ce post car trop de versions distantes. Et pour moi, à mon niveau de nullité, je suis incapable de greffer un morceau de code proposé par un spécialiste à un autre code rédiger par une autre personne. Car chacun ayant sa logique, c'est trop compliqué dans mon petit cerveau.

En tout cas merci pour tout le monde...

à bientôt et bon w.e.

Bonjour à tous,

On est en effet mal parti avec plusieurs personnes sur le même classeur (et quel classeur...), chacun ayant sa logique... cela devient comme on dirait chez vous, une véritable bouillabaise.

Pour ma part, j'en suis rester à la version 9 que tu m'as envoyée et qui réagissait au double click sauf dans la ligne 4 et qui ne contenait plus le test sur la date du jour.

Alors j'ai remis en place le test sur la date du jour et corrigé pour que la réaction sur le double clic en ligne 4 fonctionne.

Je répondrai avec plaisir à toute demande sur un poste précis mais je crois, qu'effectivement, il faut stabiliser les choses et rester sur un interlocuteur.

Dis moi quand même si cette version fonctionne.

A bientôt

Chris

Coucou Chris et merci beaucoup d'insister

Désolé mais dès que j'ouvre le classeur, j'ai une erreur ==>

image image

____________________

J'ai suivi les conseils de X Cellus et j'abandonne ce sujet pour me consacrer à la même chose en repartant de ce qui fonctionne vers ce lien ==>

https://forum.excel-pratique.com/excel/du-vba-qui-me-pose-probleme-sur-2-points-201605

Merci

à bientôt Chris...

Bonne soirée

Pour X Cellus. Bonjour

J'ai essayé ton code sur le New2 en rajoutant toutes tes modifs mais j'ai dû rater un "Next" ou un "End With", non ? ==>
Car j'ai peur que ça beug par la suite.
Mais pour le moment tout marche
Il faudrait que j'arrive à l'adapter au code de BsAlv avec ses croix manuelles

____________________________

____________________________

____________________________

____________________________

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
            If Plage = "" Then Exit Sub
        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
                              'Ciblage de la colonne de chaque Cible ayant la Date
                            If (j + 2) Mod 3 = 0 Then CD = Arr(i - 1, j)
                                If TBL(j - bImPair * 30, 6) = 1 Then
                                     For Each brdr In aBorders
                                     'Contrôle que la Cible Date soit >= DJ pour appliquer les bordures selon J2
                                    If CD >= DateValue(DJ) Then c.Cells(i, j).Borders(brdr).Weight = xlHairline
                                    Next
                                    End If

                         Next
                    End If
               Next
          End If
     End With
End Sub

Bonne journée

Et merci beaucoup X Cellus

J'ai ouvert un autre sujet avec des explications différentes pour ce problème de dates :

https://forum.excel-pratique.com/excel/pas-appliquer-1-sub-si-les-cellules-ont-une-date-inferieure-a...

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