VBA - problème gestion évènement
jim35
-
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 :
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 !
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:
- VBA - problème gestion évènement
- Logiciel gestion locative gratuit excel - Télécharger - Comptabilité & Facturation
- Logiciel gestion photo gratuit - Guide
- Gestion de fichiers - Télécharger - Gestion de fichiers
- Evenement whatsapp - Accueil - WhatsApp
- Gestion autorisation application android - Guide
3 réponses
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
;o)
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)
je suis peut etre sur une piste
voici mon code :
j'ai placé ce code dans l'évenement :
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 !
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 !