VBA - problème gestion évènement

jim35 -  
 jim35 -
Bonjour,
je solicite votre aide parce que j'ai un problème pour faire ce que je veux.

Voilà j'ai un tableau excel, dans la colonne E on inscrit une date d'ouverture de fichier, 48h plus tard on ouvre le fichier, si la date d'ouverture dans la colonne E dépasse de 48h par rapport à la variable dateJour=now alors on envoi un mail de retard, on inscrit dans la conne Z "mail envoyé" et dans la colonne "AB" la date du jour, on ferme fichier.

On le réouvre 48h plus tard, si la macro vérifie la valeur "mail envoyé" dans la colonne Z, et que la comparaison entre la date du jour et la date de la colonne Z dépasse 48h, on envoi un mail.
voilà le code :

Public Sub en retard_test1()

Application.EnableEvents = False
Dim date48 As Date
Dim datejour As Date

date48 = 48
datejour = Now

Dim lig As Long
For lig = 158 To [E65536].End(xlUp).Row
If datejour - Cells(lig, 5) > date48 / 24 Then 
call envoyer_mail
Cells(lig, 26).value = "mail en retard envoyé"
Cells(lig, 27).Value = datejour 
End If
Next lig
Application.EnableEvents = True


End Sub

Public Sub en retard_test2()


Dim date48 As Date
Dim datejour As Date

date48 = 48
datejour = Now

Dim lig As Long
For lig = 158 To [E65536].End(xlUp).Row
If datejour - Cells(lig, 27) > date48 / 24 And Cells(lig, 26) ="mail en retard envoyé" Then 
call envoyer_mail

End If
Next lig


End Sub


j'avais mis cette macro dans worksheet_change mais même si le mail a été envoyé, et qu'on remodifi la ligne le test est re-effectué.

J'ai essayé de mettre la macro au niveau du workbook_open mais ca ne fonctionne pas non plus.
Je veux q'une fois tous les tests effectué, la macro ne cherche plus a revérifié la ligne quand les 2 tests sont fait.

Merci de m'aider, je n'en sorts pas !

3 réponses

  1. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Bonjour,

    C'est bien dans Workbook_open qu'il faut lancer la macro

    Il faut d'abord tester si la colonne Z est renseignée par "mail envoyé", si elle n'est pas renseignée, on effectue le test sur la colonne E avec la date du jour. Si elle est renseignée, on effectue le test avec la date colonne AB.

    Je ne vois pas trop bien ce que tu veux faire si la date de la colonne AB est > 48h ? Parce que si aujourd'hui elle est supérieure de 48h, elle le sera encore demain et après demain ... etc ...

    Il faut une autre condition pour ne pas envoyer éternellement des mails ...

    Peux-tu donner plus de détails stp.

    Voilà un point de départ

    Dim datejour As Date
    Dim ecart As Variant
    Dim lig As Long
        
        For lig = 158 To [E65536].End(xlUp).Row
            If Range("Z" & lig).Value <> "" Then
                ecart = DateDiff("h", Range("AB" & lig).Value, Date)
                If ecart > 48 Then
                    '....
                End If
            Else
                ecart = DateDiff("h", Range("E" & lig).Value, Date)
                If ecart > 48 Then
                    Call envoyer_mail
                    Range("Z" & lig).Value = Date
                    Range("AB" & lig).Value = "mail en retard envoyé"
                End If
            End If
        Next
    


    ;o)
    0
  2. jim35
     
    je suis peut etre sur une piste
    voici mon code :

    Private Sub test1()
    
    Dim date48 As Date
    Dim datejour As Date
    
    date48 = 48
    datejour = Now
    
    Dim lig As Long
    For lig = 158 To [E65536].End(xlUp).Row
    If datejour - Cells(lig, 5) > date48 / 24 And Cells(lig, 5) <> "" Then
    call envoyer_email
    Cells(lig, 26) = "mail envoyé"
    Exit For
    End If
    Next lig
    
    
    
    End Sub

    j'ai placé ce code dans l'évenement :

    Private Sub Worksheet_Change(ByVal Target As Range)


    Enfait il faut que tant que la date ne dépasse pas 48h, on envoit pas de mail.

    pour executer mon test il faut qu'une macro modifit les cellules de ma ligne en question(une selection d'une cellule engendre l'execution du test : ActiveCell.FormulaR1C1 = "")

    par contre il faudrait qu'une fois le mail envoyé, le test ne s'execute plus même si on modifit la ligne. Enfait il faudrait que le test soit comme ca : si la date est supèrieur OU STRICTEMENT EGALE à 48 alors on execute le test, comme ca même si ca dépasse 48h ca ne s'execute plus. mais je ne sais pas comment faire.
    merci !
    0