Comparaison de date en vba

Résolu
randall Messages postés 531 Date d'inscription   Statut Membre Dernière intervention   -  
ccm81 Messages postés 11033 Statut Membre -
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.

4 réponses

  1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    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
    
    

    0
  2. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
    0
  3. randall
     
    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
    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      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 ???
      0
  4. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
    0