Condition sur des dates

Résolu
Jono92600 Messages postés 78 Statut Membre -  
Jono92600 Messages postés 78 Statut Membre -
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. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 783
     
    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


    0
    1. Jono92600 Messages postés 78 Statut Membre
       
      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.
      0
  2. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 783
     
    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
    0
    1. Jono92600 Messages postés 78 Statut Membre
       
      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
      0
    2. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 783
       
      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.
      0
      1. Jono92600 Messages postés 78 Statut Membre > Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention  
         
        Oooh oui sa fonctionne très très bien.

        Je vous remercie énormément.
        0