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

Résolu/Fermé
dikold Messages postés 22 Date d'inscription mardi 19 mai 2015 Statut Membre Dernière intervention 14 novembre 2016 - Modifié par pijaku le 25/06/2015 à 14:43
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 25 juin 2015 à 16:35
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

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
25 juin 2015 à 14:47
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
dikold Messages postés 22 Date d'inscription mardi 19 mai 2015 Statut Membre Dernière intervention 14 novembre 2016 1
25 juin 2015 à 15:00
test --> permission réfusée

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

test3 --> il affiche "23/03/07 23/08/2006"
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744 > dikold Messages postés 22 Date d'inscription mardi 19 mai 2015 Statut Membre Dernière intervention 14 novembre 2016
25 juin 2015 à 15:02
Oui, et?
Tu n'entrevois pas, via ces exemples, un début de prémisse de solution à ton problème?
0
dikold Messages postés 22 Date d'inscription mardi 19 mai 2015 Statut Membre Dernière intervention 14 novembre 2016 1
25 juin 2015 à 15:25
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
25 juin 2015 à 15:32
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
dikold Messages postés 22 Date d'inscription mardi 19 mai 2015 Statut Membre Dernière intervention 14 novembre 2016 1
25 juin 2015 à 15:48
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744 > dikold Messages postés 22 Date d'inscription mardi 19 mai 2015 Statut Membre Dernière intervention 14 novembre 2016
25 juin 2015 à 15:53
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
dikold Messages postés 22 Date d'inscription mardi 19 mai 2015 Statut Membre Dernière intervention 14 novembre 2016 1
25 juin 2015 à 16:13
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744 > dikold Messages postés 22 Date d'inscription mardi 19 mai 2015 Statut Membre Dernière intervention 14 novembre 2016
25 juin 2015 à 16:35
j'ai inversé < et > ^^'
Arff Oui!
Ou avais-je la tête...
De rien en tout cas et A++
0