Comparaison de date en vba [Résolu]

Messages postés
318
Date d'inscription
jeudi 5 août 2004
Statut
Membre
Dernière intervention
17 août 2019
-
Bonjour,
Pour des rappels de vaccin sur du bétail je veux surligner en rouge des dates qui arrivent dix jours avant l'échéance. les dates de vaccination sont en C2 : C6 et la date en F2 est celle du jour.
Peut on la nommer aujourd'hui dans le code (celle en F2)?
Seconde question la macro fonctionne jusqu'à la ligne avec then là on me dit erreur d'éxécution 424 objet requis ,j'ai fait plusieurs scénarios sans succès . Quelle est l’erreur pour désigner les cellules C2: C6 qui doivent passer en rouge.
Merci pour la réponse.
Sub vaccin()

Dim cel As range

   madate = range("F2")
   madate2 = range("C2;C6").cells
      
      
      
 madate = DateSerial(Year(madate), Month(madate), Day(madate))
 madate2 = DateSerial(Year(madate), Month(madate), Day(madate) + 10)
 For Each cel In range("c2;C6").cells
 
 If madate2 > madate Then (après il y a l'erreur)
  cells("c2;C6").Value = Interior.ColorIndex = 3
  
 
End If

Next cel



End Sub



Configuration: Windows / Chrome 73.0.3683.103


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.
Afficher la suite 

4 réponses

Messages postés
26119
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 août 2019
1757
0
Merci
Bonjour,

quelques erreurs dans ton code
Sub vaccin()

Dim cel As Range
   Dim aujourdhui
   Dim madate2
      
   'aujourdhui = (Range("F2").Value)
   aujourdhui = CDate(Format(Now(), "d/mm/YY")) ' pas besoin de la cellule F2 pour avoir la date de maintenant...
   
      
 For Each cel In Range("c2:C6").Cells
   madate2 = CDate(DateAdd("d", 10, CDate(cel.Value)))
   If madate2 > aujourdhui Then
     cel.Interior.ColorIndex = 3
   End If
 Next cel

End Sub


Commenter la réponse de jordane45
Messages postés
9060
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
19 août 2019
1608
0
Merci
Bonjour à tous les deux

On peut faire un poil plus simple en lisant les dates comme entiers

Sub vaccin()
Dim cel As Range, madate2 As Long, aujourdhui As Long
aujourdhui = Date
For Each cel In Range("C2:C6")
  madate2 = cel.Value + 10
  If madate2 > aujourdhui Then
    cel.Interior.ColorIndex = 3
  Else
    cel.Interior.ColorIndex = xlNone
  End If
Next cel
End Sub

Cdlmnt
Commenter la réponse de ccm81
0
Merci
Bonjour Jordane,

Merci pour ta réponse,çà fonctionne bien ,mais j'ai modifié celle de mon crû et j'ai toujours un problème au niveau de la ligne madate2 = madate(DateAdd("d", -10, madate(cel.Value))) qui consiste à enlever dix jours à la date inscrite dans chaque cellule c2 à c6 pour la comparer à la date du jour je ne vois pas le problème je me suis un peu calé sur ton code pourtant.
merci pour le dérangement

Sub vaccin()

Dim cel As range
Dim madate2

madate = range("F3")


madate = DateSerial(Year(madate), Month(madate), Day(madate))

For Each cel In range("c2:C6").cells

madate2 = madate(DateAdd("d", -10, madate(cel.Value)))

If madate2 > madate Then

cel.Interior.ColorIndex = 3


End If

Next cel


End Sub
jordane45
Messages postés
26119
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 août 2019
1757 -
Déjà, pour poster ton code, merci à l'avenir d'utiliser les BALISES DE CODE.
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

Ensuite, si tu regardes bien la ligne
madate2 = madate(DateAdd("d", -10, madate(cel.Value))) 

que viennent y faire le "madate( " devant le dateAdd et celui devant le cel.value ???
Commenter la réponse de randall
Messages postés
9060
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
19 août 2019
1608
0
Merci
Re

Tu te compliques la vie pour rien, une date est codée comme un entier, donc
madate et madate2 étant déclarées comme de type long
- pour lui ajouter 10 jours > madate2 = madate+10
- pour lui enlever 10 jours > madate2 = madate-10

Cdlmnt
Commenter la réponse de ccm81