Si date inférieur à 7 mois alors...

Résolu
dikold Messages postés 22 Date d'inscription   Statut Membre Dernière intervention   -  
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

Je voudrais faire une macro qui supprime tous les utilisateurs qui ne sont pas connecté depuis 7 mois, mais mon code me supprime tout à chaque fois :
Sub test()

LastRow = Cells(Rows.Count, "D").End(xlUp).Row

Date = 7 - Date
For l = LastRow To 2 Step -1
 valCell = Range("D" & l).Value
    If Not varcell.Date < Date Then
         Rows(l).Delete
    End If
Next

End Sub



Merci d'avance de votre aide

2 réponses

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,

    Juste par curiosité, lance ces 3 tests :
    Sub test()
    Date = 7 - Date
    End Sub
    
    Sub test2()
    maDate = 7 - Date
    MsgBox Date & "  " & maDate
    End Sub
    
    Sub test3()
    maDate = DateSerial(Year(Range("D3").Value), Month(Range("D3").Value) - 7, Day(Range("D3").Value))
    MsgBox Range("D3").Value & "  " & maDate
    End Sub
    0
    1. dikold Messages postés 22 Date d'inscription   Statut Membre Dernière intervention   1
       
      test --> permission réfusée

      test2 --> il affiche "25/05/2015 12/07/1784"

      test3 --> il affiche "23/03/07 23/08/2006"
      0
      1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > dikold Messages postés 22 Date d'inscription   Statut Membre Dernière intervention  
         
        Oui, et?
        Tu n'entrevois pas, via ces exemples, un début de prémisse de solution à ton problème?
        0
    2. dikold Messages postés 22 Date d'inscription   Statut Membre Dernière intervention   1
       
      J'essai plein de formule mais ça marche pas ^^' :
      Sub test3()

      LastRow = Cells(Rows.Count, "D").End(xlUp).Row

      For l = LastRow To 2 Step -1
      valCell = Range("D" & l).Value
      maDate = DateSerial(Year(Range("D:D").Value), Month(Range("D:D").Value) - 7, Day(Range("D:D").Value))
      If maDate = varcell.Value Then
      Rows(l).Delete
      End If
      Next
      End Sub
      0
  2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bon.
    Tu sais faire ta boucle c'est déjà pas mal.
    On la garde donc.
    Sub test3()
    LastRow = Cells(Rows.Count, "D").End(xlUp).Row
    
    For l = LastRow To 2 Step -1
        valCell = Range("D" & l).Value
    Next
    End Sub


    Maintenant, la même en déclarant les variables :
    Sub test3()
    Dim LastRow As Long, l As Long, valCell As Date
    LastRow = Cells(Rows.Count, "D").End(xlUp).Row
    
    For l = LastRow To 2 Step -1
        valCell = Range("D" & l).Value
    Next
    End Sub


    Tu suis?
    Maintenant, on veut connaitre la date d'aujourd'hui - 7 mois.
    'Date = aujourd'hui
    maDate = DateSerial(Year(Date), Month(Date) - 7, Day(Date))


    Que l'on intègre à notre macro :
    Sub test3()
    Dim LastRow As Long, l As Long, valCell As Date, maDate As Date
    LastRow = Cells(Rows.Count, "D").End(xlUp).Row
    maDate = DateSerial(Year(Date), Month(Date) - 7, Day(Date))
    For l = LastRow To 2 Step -1
        valCell = Range("D" & l).Value
    Next
    End Sub


    Ne reste plus qu'à comparer valCell et maDate. Si valCell < maDate => on supprime la ligne...
    Donc, le test If :
    If maDate <= valCell Then
        Rows(l).Delete
    End If


    Que l'on intègre dans la boucle ainsi :
    Sub test3()
    Dim LastRow As Long, l As Long, valCell As Date, maDate As Date
    LastRow = Cells(Rows.Count, "D").End(xlUp).Row
    maDate = DateSerial(Year(Date), Month(Date) - 7, Day(Date))
    For l = LastRow To 2 Step -1
        valCell = Range("D" & l).Value
        If maDate <= valCell Then
            Rows(l).Delete
        End If
    Next
    End Sub
    0
    1. dikold Messages postés 22 Date d'inscription   Statut Membre Dernière intervention   1
       
      Merci beaucoup pour ton explication, c'est vraiment très clair mais excel me dit qu'il y a une erreur "d'incompatibilité de type" pour la ligne :
      valCell = Range("D" & l).Value
      0
      1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > dikold Messages postés 22 Date d'inscription   Statut Membre Dernière intervention  
         
        C'est peut être parce qu'à la ligne l en question, la colonne D ne contient pas une date, mais est vide.
        Est ce possible?
        Si oui, il faut ajouter un test :
        Si Range("D" & l).Value est une date
        Sub test3()
        Dim LastRow As Long, l As Long, valCell As Date, maDate As Date
        LastRow = Cells(Rows.Count, "D").End(xlUp).Row
        maDate = DateSerial(Year(Date), Month(Date) - 7, Day(Date))
        For l = LastRow To 2 Step -1
            If IsDate(Range("D" & l).Value) Then
                valCell = Range("D" & l).Value
                If maDate <= valCell Then
                    Rows(l).Delete
                End If
            end If
        Next
        End Sub
        0
    2. dikold Messages postés 22 Date d'inscription   Statut Membre Dernière intervention   1
       
      Merci ça marche, elles sont pas vides mais des fois il est écrit "never" ^^' merci encore pour des explications et le temps que t'a pris :)

      ps : j'ai inversé < et > ^^'
      0
      1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > dikold Messages postés 22 Date d'inscription   Statut Membre Dernière intervention  
         
        j'ai inversé < et > ^^'
        Arff Oui!
        Ou avais-je la tête...
        De rien en tout cas et A++
        0