Condition sur une colonne

Résolu
Jono92600 Messages postés 78 Statut Membre -  
Jono92600 Messages postés 78 Statut Membre -
Bonjour,

J'aimerai mettre plusieurs condition sur sur 3 colonnes ( de la colonne E à la colonne K). Le but de cette exercice est :

Si Date de la colonne E > Aujourd'hui [de + de 7 Jours] alors
Colonne G = "Dans les temps"
Si Date de la colonne E < Aujourd'hui [de - de 7 Jours] alors
Colonne G = "A FAIRE"
Si Date de la colonne E <= Aujourd'hui alors
Colonne G = "EN RETARD"
Si la colonne F contient une date alors
Colonne G = "FAIT"

Illustration de mon code :)

Sub Essais()

Dim PremLig As Long
Dim DL As Long
Dim i As Long

'dernière ligne colonne A
DL = Range("A" & Rows.Count).End(xlUp).Row
'première ligne à traiter :
PremLig = 2

'Boucle :
For i = PremLig To DL
    If Range("E" & i) > Now + 7 Then  ' Aujourd'hui + de 7 jours
        Range("G" & i) = "Dans les temps"
    ElseIf Range("E" & i) > Now - 7 Then   ' Aujourd'hui - de 7 jours
       Range("G" & i) = "A FAIRE"
    ElseIf Range("E" & i) <= Now Then  ' Aujourd'hui
       Range("G" & i) = "EN RETARD"
    Else
        Range("G" & i) = ""
    End If

Next

End Sub


Je vous remercie d'avance.

2 réponses

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 772
     
    1- ou en es tu de ton autre sujet TextBox Date?
    2- tes conditions ne conviennent pas.
    Il te faut travailler avec des intervalles de date.

    0
    1. Jono92600 Messages postés 78 Statut Membre
       
      Pour la question 1, je viens d'y répondre.

      Merci
      0
    2. Jono92600 Messages postés 78 Statut Membre
       
      J'ai essayé plusieurs méthodes mais y a que la première condition qui fonctionne.

      Si Date de la colonne E > Aujourd'hui [de + de 7 Jours] alors
      Colonne W = "Dans les temps"
      Si Date de la colonne E < Aujourd'hui [de - de 7 Jours] alors
      Colonne W = "A FAIRE"
      Si Date de la colonne E <= Aujourd'hui alors
      Colonne W = "EN RETARD"
      Si la colonne F contient une date alors
      Colonne W = "FAIT"

      'On continu les condition avec les colonnes (H et I)

      Si Date de la colonne H > Aujourd'hui [de + de 7 Jours] alors
      Colonne W = "Dans les temps"
      Si Date de la colonne H < Aujourd'hui [de - de 7 Jours] alors
      Colonne W = "A FAIRE"
      Si Date de la colonne H <= Aujourd'hui alors
      Colonne W = "EN RETARD"
      Si la colonne I contient une date alors
      Colonne W = "FAIT"

      'On continu les condition avec les colonnes (K et L)

      Si Date de la colonne K > Aujourd'hui [de + de 7 Jours] alors
      Colonne W = "Dans les temps"
      Si Date de la colonne K < Aujourd'hui [de - de 7 Jours] alors
      Colonne W = "A FAIRE"
      Si Date de la colonne K <= Aujourd'hui alors
      Colonne W = "EN RETARD"
      Si la colonne L contient une date alors
      Colonne W = "FAIT"

      Je voulais partager mon fichier a nouveau mais le site est bloqué.

      Il me manque que plus que deux codes pour le finaliser.


      Par avance merci.
      0
  2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 772
     
    Bonjour,

    Il faut travailler avec des intervalles !

    A qu'elle condition appartient la date du 01/01/2017? Elle répond à tes deux conditions :
    Si Date de la colonne K < Aujourd'hui [de - de 7 Jours] alors
    Colonne W = "A FAIRE"
    Si Date de la colonne K <= Aujourd'hui alors
    Colonne W = "EN RETARD"

    Par conséquent la première valable est celle choisie par le programme.
    Il ne faut pas laisser d’ambiguïté!

    X < Date - 7 <= Y <= Date + 7 < Z
    Te fera 3 groupes bien distincts.

    Regarde ce code :
    Dim maDate As Date
    maDate = CDate(Range("E" & i))
    Select Case maDate
        Case Is < Date - 7
            MsgBox "cas 1"
        Case Is <= Date - 7, Is <= Date + 7
            MsgBox "cas 2"
        Case Is > Date + 7
            MsgBox "cas 3"
    End Select


    A toi à bien choisir tes conditions...
    0
    1. Jono92600 Messages postés 78 Statut Membre
       
      Merci, je vais essayer votre code.
      0
    2. Jono92600 Messages postés 78 Statut Membre
       
      ' Après adaptation de votre code j'obtiens ceci.


      Sub Essais()

      Dim PremLig As Long
      Dim DL As Long
      Dim i As Long
      Dim maDate As Date

      'dernière ligne colonne A
      DL = Range("A" & Rows.Count).End(xlUp).Row
      'première ligne à traiter :
      PremLig = 2

      'Boucle :
      For i = PremLig To DL

      maDate = CDate(Range("E" & i))
      Select Case maDate

      'Si la date prévue est supérieur à la date d'aujourd'hui de + de 7 jours
      Case Is => Date + 7
      Range("G" & i) = "Dans les temps"

      'Si la date prévue est supérieur à la date d'aujourd'hui de - de 7 jours
      Case Is => Date - 7
      Range("G" & i) = "Échéance imminente"

      'Si la date prévue est inférieure ou égale à la date d'aujourd'hui
      Case Is <= Date
      Range("G" & i) = "EN RETARD"
      End Select

      Next

      End Sub

      'Je n'obtiens pas exactement la même chose au niveau de mon tableau.
      0
      1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 772 > Jono92600 Messages postés 78 Statut Membre
         
        A toi à bien choisir tes conditions...
        Si la date prévue est supérieur à la date d'aujourd'hui de - de 7 jours
        entre en conflit avec :
        Si la date prévue est inférieure ou égale à la date d'aujourd'hui
        0
    3. Jono92600 Messages postés 78 Statut Membre
       
      Bonjour,

      Suite a plusieurs essais je suis encore bloqué sur les conditions.

      Je mets mon fichier tout en continuant à bosser dessus.

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

      Merci.
      0