Condition sur des dates

Résolu
Bonjour,

J'aimerai pouvoir mettre la condition suivante dans mon tableau.

Si la date de la colonne "F" est égale ou dépasse la date d'aujourd'hui de 7 jours alors
Colonne "G" = "En retard"

Si la date de la colonne "F" est égale ou dépasse la date d'aujourd'hui de 1 mois alors
Colonne "G" = "Critique"

Exemple :

For i = PremLig To DL

If Range("F" & i) <= Date + 7 Then '(Je ne sais pas si c'est le terme exacte)
Range("G" & i) = "En retard"
ElseIf Range("F" & i) <= 1 mois Then '(Je ne sais pas si c'est le terme exacte)
Range("G" & i) = "Critique"
End If

Next

End sub

Par avance merci.

Cordialement,

2 réponses

  1. Bonjour,

    Par exemple :
    Option Explicit
    Sub TestDesDates()
    Const strPlageDesDates As String = "F2:F500"
    Dim cel As Range
    
      For Each cel In ActiveSheet.Range(strPlageDesDates)
        If DateSerial(Year(Date), Month(Date) - 1, Day(Date)) >= _
              cel.Value Then
          cel.Offset(0, 1).Value = "Critique"
        ElseIf Date - 7 >= cel.Value Then
          cel.Offset(0, 1).Value = "En retard"
        End If
      Next cel
    
    End Sub


    1. Bonjour Patrice33740,

      Je vous remercie de votre retour. Le code fonctionne maisj'ai des cellules vides.
      je vous met ci-joint, le fichier avec le résultat.

      https://www.cjoint.com/c/GBwkEpk3wiG

      Par avance merci.
  2. Bonjour,

    Le problème vient du fait que certaines dates ne sont pas au format date mais au format texte. Pour voir ce genre d'anomalie, il suffit de mettre l'alignement horizontal de la colonne au format standard : les date s'alignent
    à droite et les textes s'alignent à gauche.

    Ne connaissant pas l'origine de cette anomalie, j'ai supposé, comme c'est souvent le cas, que les données ont été copiées depuis une autre source.
    J'ai donc ajouté dans le code VBA une correction de cette anomalie pour éviter d'avoir à ressaisir les dates en question.

    Ton fichier en retour :
    https://www.cjoint.com/c/GBwnEXMyeiJ
    1. Très bien merci.

      Le code fonctionne parfaitement. Je voudrais rajouter une condition en plus.

      Si la colonne "F" contient une date alors
      la colonne "G" = FAIT

      Mon code :

      If DateSerial(Year(Date), Month(Date) - 1, Day(Date)) >= "" Then
      cel.Offset(0, 2).Value = "Réalisé"
      End if
    2. Avec ce code :
      Option Explicit
      Sub TestDesDates()
      Const strPlageDesDates As String = "E3:E37"
      Dim cel As Range
      
        For Each cel In ActiveSheet.Range(strPlageDesDates)
          'Corriger les dates saisies au format texte
          If IsDate(cel.Value) And VarType(cel.Value) <> vbDate Then
            cel.Value = CDate(cel.Value)
          End If
          ' Renseigner la colonne ETAT
          If IsDate(cel.Offset(0, 1).Value) Then
            cel.Offset(0, 2).Value = "Réalisé"
          ElseIf DateSerial(Year(Date), Month(Date) - 1, Day(Date)) >= cel.Value Then
            cel.Offset(0, 2).Value = "Critique"
          ElseIf Date - 7 >= cel.Value Then
            cel.Offset(0, 2).Value = "En retard"
          Else
            cel.Offset(0, 2).Value = "Dans les temps"
        End If
        Next cel
      
      End Sub


      Attention la ligne 15 n'est pas une nouvelle ligne, c'est la fin de la ligne 14, elles ne forment qu'un seule et même ligne.
    3. @Patrice33740Oooh oui sa fonctionne très très bien.

      Je vous remercie énormément.