IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Boucle if avec comparaison de dates


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 43
    Points : 21
    Points
    21
    Par défaut Boucle if avec comparaison de dates
    Bonjour à tous,

    Je viens d'écrire le code suivant qui me permet d'afficher des msgbox si la date d'aujourd'hui est supérieure à la valeur de ma colonne Sendingdate + 15 jours ET si la colonne Alert1date est vide.

    J'ai mis des cas concrets et il ne se passe rien et je n'ai aucun message d'erreur ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    Sub Relances()
    Dim Rep As Integer
    Dim SendingDate As Date
    Dim Alert1date As Date
    Dim Alert2date As Date
    Dim Alert3date As Date
    Dim Status As String
     
    i = 5
    Status = Range("I" & i).Value
     
    Do
    If Status = "Pending" Then
    SendingDate = FormatDateTime(Range("J" & i).Value)
    Alert1date = FormatDateTime(Range("K" & i).Value)
     
        If Date > (SendingDate + 15) And IsEmpty(Alert1date) Then
            MsgBox "Nouvelle alerte n°1 pour " & vbLf & vbLf & Range("A" & i).Value & "  " & Range("B" & i).Value, , "Nouvelle alerte"
            Rep = MsgBox("Avez vous envoyé le mail de relance ?", vbYesNo, "Mail de relance")
            Select Case Rep
            Case vbYes
            Alert1date = Date
            Range("N" & i).Value = "RELANCE N°2"
            End Select
     
        End If
    End If
     
    i = i + 1
    Loop While i < 15
     
    End Sub

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 592
    Points : 730
    Points
    730
    Par défaut
    Bonjour,

    Pour les cas comme le tien, il existe le mode pas à pas et le Debug (en passant la souris sur la variable dont tu souhaites connaître la valeur.

    PPz

  3. #3
    Inactif  
    Profil pro
    Inscrit en
    Février 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 517
    Points : 617
    Points
    617
    Par défaut
    salut

    déjà : si tu ouvres ton aide sur IsEmpty, tu peux y lire ceci :
    La fonction IsEmpty renvoie la valeur True si la variable n'est pas initialisée ou contient une valeur de type Empty
    or, tu as initialisé Alert1date !
    Tiens ! fais donc cette petite expérience. Elle te permettra de mieux comprendre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim d As Date
      If IsEmpty(d) Then MsgBox "vide"
    Commence par corriger ce premier aspect

  4. #4
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    Bonjour,

    Date comprend aussi les heures, les mn et les secondes
    il faudrait ramener au jour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If ( CLng(Date) > CLng(SendingDate + 15) ) And IsEmpty(Alert1date) Then
    par exemple
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If Format$(Date, "ddmmyyyy") <= Format$(SendingDate, "ddmmyyyy") Then

  5. #5
    Membre à l'essai
    Inscrit en
    Octobre 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 43
    Points : 21
    Points
    21
    Par défaut
    Merci pour votre aide ! Je laisse tomber la fonction Empty j'y comprends rien ...

    Donc je repars la dessus mais j'ai l'impression que mon test

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Format$(Alert1date, "ddmmyyyy") = ""
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Format$(SendingDate, "ddmmyyyy") + 15
    posent un problème ... Ma valeur de Alert1date est égal à 00:00:00 pourtant elle est sensée etre au format ddmmyyyy non ?

    Comment dire simplement que la cellule Alert1date doit être vide ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    Sub Relances()
    Dim Rep As Integer
    Dim SendingDate As Date
    Dim Alert1date As Date
    Dim Alert2date As Date
    Dim Alert3date As Date
    Dim Status As String
     
     
    i = 5
    Status = Range("I" & i).Value
     
    Do
    If Status = "Pending" Then
    SendingDate = FormatDateTime(Range("J" & i).Value)
    Alert1date = FormatDateTime(Range("K" & i).Value)
    Dim d As Date
     
        If Format$(Date, "ddmmyyyy") > Format$(SendingDate, "ddmmyyyy") + 15 And Format$(Alert1date, "ddmmyyyy") = "" Then
            MsgBox "Nouvelle alerte n°1 pour " & vbLf & vbLf & Range("A" & i).Value & "  " & Range("B" & i).Value, , "Nouvelle alerte"
            Rep = MsgBox("Avez vous envoyé le mail de relance ?", vbYesNo, "Mail de relance")
            Select Case Rep
            Case vbYes
            Alert1date = Date
            Range("N" & i).Value = "RELANCE N°2"
            End Select
     
        End If
    End If
     
    i = i + 1
    Loop While i < 15
     
    End Sub

  6. #6
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Houla,

    Tu fais des comparaisons et des calculs sur des Strings...
    Il ne faut surtout pas convertir les dates en String si tu veux les manipuler.
    Les seuls cas où c'est utile, c'est pour formater des noms de fichier ou des titres dans des documents.
    Dans les autres cas, il faut laisser les dates en type (As) date.

Discussions similaires

  1. Réponses: 3
    Dernier message: 24/09/2011, 19h40
  2. [AC-2007] pb avec comparaison de dates
    Par tibofo dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 24/11/2009, 12h27
  3. Problème de requete avec comparaison de date
    Par crabe71 dans le forum Linq
    Réponses: 2
    Dernier message: 23/07/2009, 09h39
  4. [XML] Pb avec comparaison de dates dans un XML
    Par gaggy dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 11/10/2007, 15h25
  5. Requètes avec comparaison de date
    Par phoque.r dans le forum Requêtes
    Réponses: 2
    Dernier message: 12/04/2007, 16h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo