VBA - problème gestion évènement

Fermé
jim35 - 16 oct. 2009 à 11:56
 jim35 - 21 oct. 2009 à 09:45
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 !
A voir également:

3 réponses

Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
16 oct. 2009 à 14:33
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
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
Svp personne pour m'aider ?
0