Changer 1 ligne VBA sur une conditionnelle par rapport à aujourdhui

Bonsoir,

Il faudrait arriver à changer la ligne VBA suivante ==>

image

___________________________

Or j'aimerais qu'à la place de "If Lundi > Date", que chaque cellule des lignes où se trouvent les dates soient comparées à la date d'aujourd'hui.

Exemple :
Admettons, nous sommes aujourd'hui, le mardi 10 février ==> Donc toutes les cellules strictement supérieures au 10 février, pourront se voir appliquer les croix...
Donc ça oblige à tester les cellules C3, F3, I3, L3, ... AD3 et aussi toutes les lignes suivantes C7, F7, I7, L7, ... AD7 etc, etc pour tout le tableau ==>
En réalité on teste toutes ces cellules pour repérer celle qui contient le jour d'aujourd'hui !

image

______________________________________

_____________________

Merci à vous...

Bonne soirée

_____________________

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 Lundi > Date And Len(Lundi) Then  ' NEW - Tester ICI
                         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

Bonsoir,

je n'ai pas pris le fichier mais essayez If c > Date Then

Bonsoir Doux Rêveur et merci beaucoup

J'ai essayé mais ça donne ça car je suppose que c'est parce qu'il n'y a pas que des dates dans la plage "C2:AF41" ==>

image

Merci

Bonne soirée

Bonjour,

il ne faut pas mettre And Len(Lundi), juste If c > Date Then

Il me semble que les cellules contenant autre chose que des chiffres (ce que sont les dates) seront ignorées.

Si ça ne va pas, essayez : If c > Date And IsNumeric(c) Then

Sinon je ne vois pas.

Bonsoir Doux Rêveur et merci beaucoup,

J'avais testé en mettant ta première solution sans le "And Len(Lundi)" mais j'avais quand même l'erreur.

Et en testant ta nouvelle solution, ça ne change pas ==>
Je pense qu'il faut tester, comme je l'avais indiqué dans le message initial du sujet, uniquement les cellules concernées avec une formule colonnes/lignes mais je ne sais pas faire
Tester les cellules C3, F3, I3, L3, ... AD3 et aussi toutes les lignes suivantes C7, F7, I7, L7, ... AD7 etc, etc pour tout le tableau...

image

En tout cas merci d'avoir tenté

Bonne soirée

à bientôt...

Bonjour Vodoraix,

Je m'aperçois que tu nous indiques ce que tu voudrais avoir, mais jamais comment tu fais pour l'avoir

Donc, par rapport à ta demande, comment le code est exécuté !?
Tu cliques sur un bouton, tu saisis une valeur, autre ..

Quel est le résultat escompté, capture d'écran de ce que tu veux ?

Sinon ta boucle initiale

For i = 3 To UBound(Arr) Step 4 

Parcours les lignes de la 3ème à X toutes les 4 lignes, donc : 3, 7, 11, etc...
Donc les cellules qui sont dans le tableau Arr() sont bien testées pour moi

Lundi = Arr(i - 1, 1)     

Récupère bien la date de la cellule

De plus "c" est une plage, donc tester

C > date

N'est pas possible => Incompatibilité de type = logique

A te lire

Bonjour JExcel2fr et merci pour ton aide

Je m'aperçois que tu nous indiques ce que tu voudrais avoir, mais jamais comment tu fais pour l'avoir

Jamais est un bien grand mot puisqu'il s'agit toujours du même problème sur les 4 derniers sujets dont un sur lequel tu as participé, et d'ailleurs c'est très sympa de ta part ==>
https://forum.excel-pratique.com/excel/pas-appliquer-1-sub-si-les-cellules-ont-une-date-inferieure-a...

image

Donc ça vient de la valeur en J2 sur la feuille paramètres :

- Si je mets "1" ==> Apparition des croix provenant du tableau de la feuille paramètres

- Si on met autre chose ==> Toutes les croix sont effacées

_______________________________

Sinon, merci pour la boucle, je crois que j'ai compris mais alors pourquoi j'ai toutes les croix automatiques sur toute une ligne de la semaine et pas seulement à partir du lendemain de la date d'aujourd'hui ==> Voir précisions au tout début de ce sujet...

Ne faut-il pas également boucler sur les colonnes C donc 3, F donc 6, I donc 9, etc... ? Comme je l'écris au au tout début du sujet ?

Merci...

Bonne journée

Rechercher des sujets similaires à "changer ligne vba conditionnelle rapport aujourdhui"